1 #include <windows.h>
2
3 //处理窗口过程
4 LRESULT CALLBACK WindowProc(
5 HWND hwnd, //消息所属的窗口句柄
6 UINT uMsg, //具体的消息名称 WM_XXX消息名 (WindowMessage)
7 WPARAM wParam, //键盘附加消息
8 LPARAM lParam //鼠标附加消息
9 )
10 {
11 switch (uMsg){
12 case WM_CLOSE:
13 //所有xxxWindow为结尾的方法,都不会进入到消息队列中 而是直接执行
14 DestroyWindow(hwnd); //DestroyWindow发送另一个消息 WM_DESTROY
15 break;
16
17 case WM_DESTROY:
18 PostQuitMessage(0);
19 break;
20
21 case WM_LBUTTONDOWN: //鼠标左键按下
22 {
23 int xPos = LOWORD(lParam);
24 int yPos = HIWORD(lParam);
25 char buf[1024];
26 wsprintf(buf, TEXT("x = %d, y = %d"), xPos, yPos);
27 MessageBox(hwnd, buf, TEXT("标题"), MB_OK);
28 break;
29 }
30
31 case WM_KEYDOWN: //键盘
32 MessageBox(hwnd, TEXT("键盘按下"), TEXT("标题"), MB_OK);
33 break;
34
35 case WM_PAINT: //绘图
36 {
37 PAINTSTRUCT ps; //绘图结构体
38 HDC hdc = BeginPaint(hwnd, &ps);
39
40 TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
41
42 EndPaint(hwnd, &ps);
43 break;
44 }
45
46 }
47
48 //返回值用默认处理方式
49 return DefWindowProc(hwnd, uMsg, wParam, lParam);
50 }
51
52 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PreInstance, LPSTR lpCmdLine, int nShowCmd){
53 //设计窗口
54 //注册窗口
55 //创建窗口
56 //显示和更新
57 //通过循环取消息
58 //处理消息(窗口过程)
59
60
61 //设计窗口
62 WNDCLASS wc;
63 wc.cbClsExtra = 0; //类的额外的内存
64 wc.cbWndExtra = 0; // 窗口额外的内存
65 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景
66 wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标, 如果第一个参数为NULL,代表使用系统提供的光标
67 wc.hIcon = LoadIcon(NULL, IDI_ERROR);//图标 如果第一个参数为NULL,代表使用系统提供的图标
68 wc.hInstance = hInstance;//应用程序的实例句柄 传入WinMain中的形参即可
69 wc.lpfnWndProc = WindowProc;//回调函数 窗口过程
70 wc.lpszClassName = TEXT("WIN");//指定窗口的类名称
71 wc.lpszMenuName = NULL; //菜单名称
72 wc.style = 0; //显示的风格 0代表默认风格
73
74
75
76 //注册窗口类
77 RegisterClass(&wc);
78
79
80
81 //创建窗口
82 /*
83 lpClassName, 类名
84 lpWindowName, 标题名
85 dwStyle, 一般用WS_OVERLAPPDWINDOW风格
86 x, 显示的坐标
87 y,
88 nWidth, 宽高
89 nHeight, CW_USEDEFAULT默认值
90 hWndParent, 父窗口 null
91 hMenu, 菜单 null
92 hInstance, 实例句柄 hInstance
93 lpParam 附加值 鼠标的附加值 NULL
94 */
95 HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
96
97
98
99 //显示和更新
100 ShowWindow(hwnd, SW_SHOWNORMAL);
101 UpdateWindow(hwnd);
102
103
104
105 //循环取消息
106 /*
107 HWND hwnd; 主窗口句柄
108 UINT message; 具体的消息名称
109 WPARAM wParam; 附加消息 键盘消息
110 LPARAM lParam; 附加消息 鼠标消息(左右键)
111 DWORD time; 消息产生的时间
112 POINT pt; 附加消息 鼠标消息(x y)
113 */
114 MSG msg;
115 while (1){
116 /*
117 _Out_ LPMSG lpMsg, 消息
118 _In_opt_ HWND hWnd, 捕获窗口 填NULL代表捕获所有的窗口
119 _In_ UINT wMsgFilterMin, 最小和最大的过滤消息 一般填0
120 _In_ UINT wMsgFilterMax); 填0代表捕获所有的消息
121 */
122 if (GetMessage(&msg, NULL, 0, 0) == FALSE){
123 break;
124 }
125
126 //翻译消息
127 TranslateMessage(&msg);
128 //不为False 分发
129 DispatchMessage(&msg);
130 }
131
132
133
134 //处理窗口过程
135
136
137
138 return 0;
139 }