窗口过程函数
窗口过程函数,主要用于处理发送给窗口的信息。一般的Windows应用程序的主要代码部分就集中在窗口过程函数中。而对于游戏程序而言,在窗口过程中是很少去写大量代码的。
LRESULT CALLBACK WinProc(
_In_ HWND hwnd,
_In_ UINT Msg,
_In_ WPARAM wPAram,
_In_ LPARAM lParam
);
窗口过程函数的名字可以随便取,但是函数定义形式必须与上面一致。系统通过窗口过程函数的地址(指针)来调用窗口过程函数,而不是通过函数的名字来调用;
- LRESULT :窗口函数的返回值,一般是非0值
- CALLBACK用来告诉Windows这个函数是一个回调函数,每当windows参数遇到需要处理的事件时候,就调用这个函数。
- HWND类型的hwnd ,需要处理消息的那个窗口的句柄
- UINT类型的uMsg ,表示待处理的消息的ID,即消息的类型
- 第三个、四个参数WPARAM类型的wParam和LPARAM类型的lParam,用于表示信息的附加信息,这个附加信息会随着消息类型的不同而不同
- 在一个程序中,可能会有多个窗口,而窗口过程函数的第一个参数就是用于指定了接收消息的那个特定窗口。我们可以同时打开几个窗口,各自窗口具有不同的句柄和分开定义的窗口过程函数来处理各自的信息。
LRESLT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wPAram, LPARAM lParam){ switch(message){ case WM_PAINT://客户区重绘消息 Direct3D_Render(hwnd); //调用Direct3D_Render函数,进行画面的绘制 ValidateRect(hwnd,NULL);//更新客户区的显示 break; case WM_KEYDOWN://键盘按下 if(wParam==VK_ESCAPE) //ESC键 DestroyWindow(hwnd);//销毁窗口,并发送一条WM_DESTORY消息 break; case WM_DESTORY://窗口销毁 Direct3D_CleanUp() //调用Direct3D_CleanUp函数,清理COM接口对象 PostQuitMessage(0); //向系统表明有个线程终止请求,用来响应WM_DESTORY消息 break; default: return DefWindowProc(hwnd,message,wParam,lParam);//调用默认的窗口过程处理 } return 0; }
窗口类的注销
WinMain函数之前,对之前注册的窗口类进行注销;
UnregisterClass
BOOL WINAPI UnregisterClass(In LPCTSTR lpClassName,_In_opt HINSANCE hInstance);
第一个参数:呀注销的类的名称;
第二个参数填的是:创建这个类的应用程序的实例句柄,也就是WinMain函数的hInstance,或者是类的实例句柄wndClass.hInstance。