HELLOWIN.C程序代码注释

HELLOWIN.C程序代码注释

/*------------------------------------------------------------
   HELLOWIN.C -- Displays "Hello, Windows 98!" in client area
                 (c) Charles Petzold, 1998
  ------------------------------------------------------------*/
//====================================================================
//Name         : HELLOWIN.C
//Author       : LaoDing
//Version      :
//Copyright    : Your copyright notice
//Description  : 代码注释

//====================================================================

#include <windows.h>//系统自带头文件,位置在:C:\Program Files\Microsoft Visual Studio\VC98\Include\
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
/*WndProc回调函数声明,类型为CALLBACK,WndProc为标识符,被定义为__stdcall,它指定了window和应用程序之间函数调用的特定次序;
返回值LRESULT 等价于LONG数据类型,CALLBACK是回调,UINT 类型,即unsigned int,表示一个32位的值。
WPARAM为32位UINT类型,LPARAM为32位LONG型 */
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
/*int 表示函数返回值为int, WINAPI为函数调用约定,定义为__stdcall,它指定了window和应用程序之间函数调用的特定次序;WinMain 为Windows程序主函数,
HINSTANCE为实例句柄,为一个数值,程序用来标识我们这个程序,把句柄当作调用参数。
同一程序所有实例都可以享受代码和只读存储器;PSTR为指向非宽字符串的指针,即char*,用来运行程序的命令行,有时是把程序装入内存;
iCmShow 用来定义程序如何显示,或正常显示,或全屏显示。
 */
{
     static TCHAR szAppName[] = TEXT ("HelloWin") ;
     HWND         hwnd ;//窗口句柄,(非常重要),句柄本质上是引用某个对象数值(一个32位数值)
     MSG          msg ;//消息结构
     WNDCLASS     wndclass ;//窗口类结构

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;//前缀lpfn表示“指向函数的长指针
     wndclass.cbClsExtra    = 0 ;//前缀cb表示“字节数”(count of byte),常用在一个表示字节尺寸的变量名称中
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;//前缀h表示一个句柄
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;//加载图标函数,供程序使用
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;//加载光标函数,供程序使用,鼠标变成一个小箭头,也可以定义为其他样式
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//前缀hbr表示画刷的句柄,handle to a brush;获取一个图像对象,参数表示用来对窗体背景进行重绘的画刷
     wndclass.lpszMenuName  = NULL ;//前缀lpszb表示指向以零为结束的字符串的指针long pointer to a string terminated with a zero,不带任何菜单
     wndclass.lpszClassName = szAppName ;

     if (!RegisterClass (&wndclass))//RegisterClass函数为应用程序注册一个窗口类
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
                      szAppName, MB_ICONERROR) ;//MessageBox函数是显示消息框;
//用来显示短信息的,显示一个小小的对话窗口,第一个参数是通常是一个窗口句柄,第二个参数是要在信息框中显示的文字内容,
//第三个参数是将要在标题拦上位置显示的文本,第四个参数是以MB打头的常量组合,常量值表示对话框里希望用哪种按钮。。
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName,                  // window class name,CreateWindow函数-基于窗口类创建一个窗口
                          TEXT ("The Hello Program"), // window caption
                          WS_OVERLAPPEDWINDOW,        // window style
                          CW_USEDEFAULT,              // initial x position “CW”表示创建窗口选项
                          CW_USEDEFAULT,              // initial y position
                          CW_USEDEFAULT,              // initial x size
                          CW_USEDEFAULT,              // initial y size
                          NULL,                       // parent window handle
                          NULL,                       // window menu handle
                          hInstance,                  // program instance handle
                          NULL) ;                     // creation parameters
     
     ShowWindow (hwnd, iCmdShow) ;
/*在屏幕上显示窗口,第一个参数指向由CreateWindow创建的句柄,第二个参数是winMain函数接收的iCmdShow值,
这个参数决定窗口是正常显示,还是最小化或最大化窗体,如果正常显示,则从winMain传给ShowWindow的参数值为SW_SHOWNORMAL。
	 若窗体最大化显示,则SW_SHOWMAXMIZED,若窗体只是显示在任务栏,则为SW_SHOWMINNOACTIVE*/
     UpdateWindow (hwnd) ;//指示窗口对其自身进行重绘
     
     while (GetMessage (&msg, NULL, 0, 0))//从消息队列获取消息
/* msg是一个结构变量,定义于WINUSER.h文件中
tyfedef struct  tagMSG{
HWND hwnd;//指向窗口的句柄
UINT message;//消息标识符,用来标识消息的数字,比如,在客户区,按下鼠标左键,windows会收到一个以WM(Windows message)为前缀的message字段为
//WM_LBUTTONDOWN(值为0x0201)的消息放入消息队列。
WPARAM wparam;//32为消息字段,取决于具体的消息
LPARAM lparam;//32消息字段
DWORD time;//消息进入队列的时间
POINT pt;//消息进入消息队列中时,鼠标指针的位置坐标。

}MSG, *PMSG;

  
	*/
     {
          TranslateMessage (&msg) ;//翻译一些键盘消息
          DispatchMessage (&msg) ;//将消息发送给窗口过程
     }
     return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
     HDC         hdc ;//设备环境句柄
     PAINTSTRUCT ps ;//绘制结构
     RECT        rect ;//矩形结构
     
     switch (message)
     {
     case WM_CREATE:
          PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_SYNC) ;//播放声音文件
/* 解决无法播放声音文件的方法:从Project菜单中选setting菜单项, 如何选Link选项,在object/library modules中添加WINMM.LIB (windows 多媒体对象库 
PlaySound函数,第一个参数是波形文件名称	,第二个参数只有声音文件是资源文件时才可用,第三个参数指定一组选项
*/
          return 0 ;
          
     case WM_PAINT:/*这个消息在windows编程中非常重要,
	当窗口的客户区部分、全部“无效”(比如首次创建、调整窗口大小,最小化后恢复、遮挡)时,且必须更新,应用程序将得到通知,这意味着窗口必须重绘。


  */
		  //PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_SYNC) ;

          hdc = BeginPaint (hwnd, &ps) ;//标明窗口绘制开始,BeginPaint函数必须跟EndPaint函数成对出现。第一个参数hwnd为程序的窗口句柄,
          //第二个参数为指向PAINTSTRUCT结构的指针。
          GetClientRect (hwnd, &rect) ;//获取窗口客户区的尺寸
          
          DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;//显示一个文本字符串
		  //第一个参数为设备资源分配表的句柄,第二个参数为所要绘制的文本内容,第三个参数设为-1,表示文本字符串以0位结尾。
		  //最后一个参数为一组位标记,这些位标记位的定义于WINUSER.h文件中,这些标记表示在第四个参数矩形里显示,并且水平和垂直居中显示。
          
          EndPaint (hwnd, &ps) ;//结束窗口绘制
          return 0 ;
          
     case WM_DESTROY:

		  //PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_SYNC) ;

          PostQuitMessage (0) ;//将“退出”消息插入消息队列
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;//对所以窗口过程没有处理的消息执行默认的消息处理,这一点非常重要,否则其他正常行为无法执行。
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值