/* 在创建窗口、显示窗口、更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息, 并进行响应。要从消息队列中取出消息,我们需要调用GetMessage()函数,
该函数的原型声明如下:
BOOL GetMessage(
LPMSG lpMsg, // address of structure with message
HWND hWnd, // handle of window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax // last message);
参数 lpMsg 指向一个消息(MSG)结构体,GetMessage 从线程的消息队列中取出的消息信息将保存在该结构体对象中。 参数 hWnd 指定接收属于哪一个窗口的消息。通常我们将其设置为NULL,用于接收属于调用线程的所有窗口的窗口消息。 参数 wMsgFilterMin 指定要获取的消息的最小值,通常设置为0。 参数 wMsgFilterMax 指定要获取的消息的最大值。如果wMsgFilterMin 和wMsgFilterMax 都设置为0,则接收所有消息。 */
return msg.wParam;
//PostQuitMessage函数的参数值(见代码,通常是0)将作为WM_QUIT 消息的wParam 参数(见注释⑦),
//此时参数wParam为0。收到WM_QUIT 消息消息循环自然终止,然后程序执行下面的语句:
//return msg.wParam; 即返回0值正常退出WinMain并终止程序。
}
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_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_CLOSE://关闭状态
if (IDYES == MessageBox(hwnd, TEXT("是否真的结束?"), TEXT("message"), MB_YESNO))
{ DestroyWindow(hwnd); }
/*1.int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT UType); hwnd表示拥有的窗口,第二个为显示消息内容,第三个为对话框标题,第四个位按钮类型 IDABORT:Abort 按钮被选中。IDCANCEL:Cancel按钮被选中。IDIGNORE:Ignore按钮被选中。 IDNO:NO按钮被选中。IDOK:OK按钮被选中。IDRETRY:RETRY按钮被选中。 IDYES:YES按钮被选中。 */
return 0;
case WM_DESTROY://销毁
PostQuitMessage(0);
return 0; }
return DefWindowProc(hwnd, message, wParam, lParam);
}
/*进队消息与不进队消息(了解): 进队消息和不进队消息 其实在Windows中消息能够被分为“进队的”和“不进队的”。进队的的消息是由Windows放入程序消息队列中的 在程序的消息循环中,重新返回并分配给窗口过程。不进队的的消息在Windows调用窗口时直接送给窗口过程。 也就是说,进队的消息被“发送”给消息队列,而不进队的的消息则直接“发送”给窗口过程。任何情况下, 窗口过程都将获得窗口所有的消息--包括进队的和不进队的。窗口过程是窗口的“消息中心”。 进队消息基本上是用户输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、 鼠标移动(WM_MOUSEMOVE)和鼠标键(WM_LBUTTONDOWN)的形式给出。进队消息还包含时钟消息(WM_TIMER)、 刷新消息(WM_PAINT)和退出消息(WM_QUIT)。不进队消息则是其它消息。在许多情况下,不进队消息来自 调用特定的Windows函数。例如,当WinMain调用CreateWindow时,Windows将创建窗口并在处理中给窗口过程 发送一个WM_CREATE消息。当WinMain调用ShowWindow时,Windows将给窗口过程发送WM_SIZE和WM_SHOWWINDOW消息。 当WinMain调用UpdateWindow时,Windows将给窗口过程发送WM_PAINT消息。键盘或鼠标输入时发出的进队消息信号 ,也能在不进队消息中出现。例如,用键盘或鼠标选择了一个菜单项时,键盘或鼠标消息就是进队的,而说明菜单 项已选中的WM_COMMAND消息则可能就是不进队的 */