14 Win32Window
官方代码($sdk)\examples\14.Win32Window
例子里一开头定义了两个全局的句柄,一个按钮的,另一个窗口的。
//按钮句柄
HWND hOKButton;
//窗口句柄
HWND hWnd;
接下来是消息处理的回调函数。窗口收到属于该窗口的消息时,会自动调用它的回调函数对消息进行处理。
CustomWndProc函数的样式是固定的,不能随意增减或改变参数,它将以函数指针的形式被窗口调用。参数HWND窗口句柄;UINT被传过来的消息ID,通过这ID可以知道具体是什么类型的消息;WPARAM和LPARAM附加到消息上的数据,它们可以是直接的数据,也可以是指针,具体需根据消息类型来确定,和API里面的MSG结构一样。
static LRESULT CALLBACK CustomWndProc(HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam)
{
switch (message)
{
//处理窗口的命令
case WM_COMMAND:
{
HWND hwndCtl = (HWND)lParam;
int code = HIWORD(wParam);
//按钮发出的消息
if (hwndCtl == hOKButton)
{
//销毁窗口
DestroyWindow(hWnd);
//发送一个结束消息,告诉系统线程要结束了
PostQuitMessage(0);
return 0;
}
}
break;
//窗口销毁
case WM_DESTROY:
//发送一个结束消息,告诉系统线程要结束了
PostQuitMessage(0);
return 0;
}
//使用系统默认的消息处理函数
return DefWindowProc(hWnd, message, wParam, lParam);
}
这个例子里的消息处理函数功能很简单,它只处理了窗口收到的按钮点击消息和退出消息。如果需要处理其他的消息,增加相应的case就可以了。下面是主函数了,这次例子里主函数的代码跟前面的例子比,可以说完全不一样了。
int main()
{
//这里跟以往的例子一样,