
| LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case ... ... case ... ... } return DefWindowProc (hwnd, message, wParam, lParam) ; } |
| #include "stdafx.h" #include <windows.h> //一、消息处理函数 //参数:窗口句柄,消息,消息参数,消息参数 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { //处理感兴趣的消息 switch (message) { case WM_DESTROY: //当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环 PostQuitMessage (0) ; return 0 ; } //其他消息交给由系统提供的缺省处理函数 return ::DefWindowProc (hwnd, message, wParam, lParam) ; } //二、应用程序主函数 //参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { //1.注册窗口类 static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗口类名称 //定制"窗口类"结构 WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; //关联消息处理函数 wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; //实例句柄 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //图标 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //光标 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //画刷 wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName; //类名称 //注册 if (!ReGISterClass (&wndclass)) { MessageBox (NULL, TEXT ("RegisterClass Fail!"), szAppName, MB_ICONERROR) ; return 0 ; } //建立窗口 HWND hwnd ; hwnd = CreateWindow (szAppName, //窗口类名称 TEXT ("The Hello Program"), //窗口标题 WS_OVERLAPPEDWINDOW, //窗口风格 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, //实例句柄 NULL); ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; //消息循环 MSG msg ; while (GetMessage (&msg, NULL, 0, 0)) //从消息队列中取消息 { TranslateMessage (&msg) ; //转换消息 DispatchMessage (&msg) ; //派发消息 } return msg.wParam ; } |