Windows编程模型

  1 #include <windows.h>
  2 
  3 //事件驱动编程模型
  4 //一切都是窗口:窗口和句柄
  5 //消息与消息队列
  6 
  7 //最简单的应用程序必须包含两个函数
  8 //WinMain
  9 //WndProc
 10 
 11 //窗口过程回调函数
 12 //宏修饰符
 13 LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
 14 
 15 //相当于int main(void)
 16 //H是handler句柄
 17 //Instamce实例
 18 int WINAPI WinMain( HINSTANCE hInstance,
 19                     //实例句柄
 20                     HINSTANCE HprevInstance,
 21                     LPSTR lpszCmdLine,
 22                     int nCmdShow)
 23 {
 24     //窗口句柄
 25     HWND hwnd;
 26     //MSG是消息类型
 27     MSG msg;
 28     //窗口类
 29     //typedef struct tagWNDCLASSW {
 30     //    UINT        style;
 31     //    WNDPROC     lpfnWndProc;
 32     //    int         cbClsExtra;
 33     //    int         cbWndExtra;
 34     //    HINSTANCE   hInstance;
 35     //    HICON       hIcon;
 36     //    HCURSOR     hCursor;
 37     //    HBRUSH      hbrBackground;
 38     //    LPCWSTR     lpszMenuName;
 39     //    LPCWSTR     lpszClassName;
 40     //} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
 41     //1.设计一个窗口类
 42     WNDCLASS wc;
 43     wc.style = 0;
 44     //告诉窗口类用哪个窗口过程回调
 45     wc.lpfnWndProc = WndProc;
 46     //窗口类额外信息
 47     wc.cbClsExtra = 0;
 48     //窗口句柄额外信息
 49     wc.cbWndExtra = 0;
 50     //窗口实例
 51     wc.hInstance = hInstance;
 52     //窗口图标
 53     wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
 54     //窗口鼠标类型
 55     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
 56     //画刷背景颜色
 57     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
 58     //窗口菜单
 59     wc.lpszMenuName = NULL;
 60     //窗口类名字
 61     wc.lpszClassName = TEXT("myWndClass");
 62 
 63     //2.注册窗口类
 64     RegisterClass(&wc);
 65 
 66     //3.创建窗口
 67     hwnd = CreateWindow(
 68         TEXT("myWndClass"),
 69         TEXT("窗口标题"),
 70         WS_OVERLAPPEDWINDOW,
 71         CW_USEDEFAULT,
 72         CW_USEDEFAULT,
 73         CW_USEDEFAULT,
 74         CW_USEDEFAULT,
 75         NULL,//父窗口句柄
 76         NULL,//窗口菜单句柄
 77         hInstance,
 78         NULL);
 79 
 80     //4.显示和更新窗口
 81     ShowWindow(hwnd, nCmdShow);
 82     UpdateWindow(hwnd);
 83 
 84     //5.消息循环
 85     while (GetMessage(&msg, NULL, 0, 0))
 86     {
 87         //主要是键盘的消息是扫描码要变换成ASCII码需要翻译
 88         TranslateMessage(&msg);
 89         DispatchMessage(&msg);
 90     }
 91 
 92     return msg.wParam;
 93 }
 94 
 95 
 96 LRESULT WINAPI WndProc(HWND hwnd,
 97                             UINT message, 
 98                             WPARAM wParam, 
 99                             LPARAM lParam)
100 {
101     //窗口过程回调对各种消息进行处理
102     switch (message)
103     {
104     case WM_PAINT:
105         return 0;
106     case WM_DESTROY:
107         //销毁窗口
108         PostQuitMessage(0);
109         return 0;
110     }
111     return DefWindowProc(hwnd, message, wParam, lParam);
112 }
原文地址:https://www.cnblogs.com/mubu/p/5813091.html