119.WIN32窗口原理

 1 #include <Windows.h>
 2 
 3 //处理消息的回调函数
 4 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 5 
 6 int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreinstance, PSTR szcmdline, int icmdshow)
 7 {
 8     //设置窗口的名字
 9     static TCHAR szappname[100] = TEXT("mywindow");
10     
11     //窗口类
12     WNDCLASS wndclass;
13     //风格
14     wndclass.style = CS_HREDRAW | CS_VREDRAW;
15     wndclass.lpszClassName = szappname;//设置名字
16     wndclass.lpszMenuName = NULL;
17     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
18     wndclass.lpfnWndProc = WndProc;//设置回调函数处理窗口
19     wndclass.cbClsExtra = wndclass.cbWndExtra = 0;//拓展
20     wndclass.hInstance = hinstance;//窗口句柄
21     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//载入图标
22     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//载入鼠标风格
23 
24     //通过名字,注册窗口
25     if (!RegisterClass(&wndclass))
26     {
27         MessageBoxA(0, "窗口注册失败", "提示", 0);
28         return 0;
29     }
30     
31     //通过名字,创建窗口
32     HWND hwnd = CreateWindow(szappname,//窗口名字
33         TEXT("窗口"),//窗口标题
34         WS_OVERLAPPEDWINDOW,//窗口风格
35         CW_USEDEFAULT,//默认显示位置x
36         CW_USEDEFAULT,//默认显示位置y
37         CW_USEDEFAULT,//默认宽度
38         CW_USEDEFAULT,//默认高度
39         NULL,//子窗口
40         NULL,//子菜单
41         hinstance,//窗口句柄
42         NULL);
43 
44     ShowWindow(hwnd, SW_SHOW);
45     UpdateWindow(hwnd);//显示并更新
46     MSG msg;//消息
47     //消息循环(GetMessage 创建事件 TranslateMessage DispatchMessage响应事件)
48     while (GetMessage(&msg,NULL,0,0))
49     {
50         TranslateMessage(&msg);
51         //调用回调函数
52         DispatchMessage(&msg);
53     }
54 
55     return msg.wParam;
56 }
57 
58 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
59 {
60     //设备环境
61     HDC hdc;
62     PAINTSTRUCT ps;
63     RECT rect;
64     switch (message)
65     {
66     case WM_LBUTTONDOWN:
67         MessageBoxA(0, "按下鼠标左键", "提示", 0);
68         break;
69     case WM_RBUTTONDOWN:
70         MessageBoxA(0, "按下鼠标左键", "提示", 0);
71         break;
72     case WM_CLOSE:
73         if (MessageBoxA(0, "是否关闭窗口", "提示", 1) == 1)
74         {
75             //关闭窗口,发送WM_DESTROY消息
76             DestroyWindow(hwnd);
77         }
78         else
79         {
80             return 0;
81         }
82         break;
83     case WM_DESTROY:
84         MessageBoxA(0, "已成功关闭", "提示", 0);
85         exit(0);
86         break;
87     default:
88         break;
89     }
90     return DefWindowProc(hwnd, message, wparam, lparam);
91 }
原文地址:https://www.cnblogs.com/xiaochi/p/8538613.html