我是靠谱客的博主 辛勤胡萝卜,这篇文章主要介绍如何使用visual studio2019创建简单的MFC窗口(使用C++),现在分享给大家,希望可以做个参考。

本文介绍了如何使用visual studio2019创建简单的MFC窗口(使用C++)

```cpp

使用visual studio 2019 创建过程请参考Bili的上一篇文章⬇⬇
→!使用visual studio 2019 创建简单的MFC窗口「使用底层的C语言」

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#include<windows.h> //底层实现窗口的头文件 //6.处理窗口过程 //CALLBACK 代表_stdcall 参数的传递顺序:从右到左依次入栈,并且函数返回前清空堆栈 LRESULT CALLBACK WindowProc(HWND hand, //消息所属窗口句柄 UINT uMsg, //具体消息名称 WM_XXXX消息名 WPARAM wParam, //键盘附加消息 LPARAM lParam) { //鼠标附加消息 switch (uMsg) { case WM_CLOSE: //所有以XXXXWindow为结尾的方法,都不会进入到消息队列中,而是直接执行 DestroyWindow(hand);//发送另一个消息WM_DESTROY break; case WM_DESTROY: PostQuitMessage(0); break; case WM_LBUTTONDOWN://鼠标左键按下 { int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); char buf[1024]; wsprintf(buf, TEXT("x = %d,y = %d"),xPos,yPos); MessageBox(hand, buf, TEXT("按下鼠标左键"), MB_OK); break; } case WM_KEYDOWN: //键盘 { MessageBox(hand, TEXT("键盘"), TEXT("按下键盘"), MB_OK); break; } case WM_PAINT: //画图 { PAINTSTRUCT ps; //画图结构体 HDC hdc = BeginPaint(hand, &ps); TextOut(hdc, 100, 100,TEXT("hello"), strlen("hello")); EndPaint(hand, &ps); break; } default: break; } //返回值用默认处理方式 return DefWindowProc(hand, uMsg, wParam, lParam); } /*程序入口函数 _In_ HINSTANCE hInstance,//应用程序实例句柄 _In_opt_ HINSTANCE hPrevInstance,//上一个应用程序句柄,在WIN32环境下一般为NULL,不起作用了 _In_ LPSTR lpCmdLine,//char * argv[] _In_ int nShowCmd//显示命令 最大化、最小化、正常 WINAPI 代表_stdcall 参数的传递顺序:从右到左依次入栈,并且函数返回前清空堆栈*/ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { /* 1.设计窗口 2.注册窗口 3.创建窗口 4.显示和更新 5.通过循环取消息 6.处理消息(窗口过程) */ //1.设计窗口 WNDCLASS wc; wc.cbClsExtra = 0; //类的额外的内存 wc.cbWndExtra = 0; //窗口额外的内存 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景 wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标,如果第一个参数为null,代表使用系统提供的光标 wc.hIcon = LoadIcon(NULL, IDI_ERROR); //图标,如果第一个参数为null,代表使用系统提供的图标 wc.hInstance = hInstance; //应用程序的实例句柄,传入winmain的形参即可 wc.lpfnWndProc = WindowProc; //回调函数 窗口过程 wc.lpszClassName = TEXT("WIN"); //指定窗口名称 wc.lpszMenuName = NULL; //菜单名称 wc.style = 0; //显示风格,0代表默认 //2.注册窗口 RegisterClass(&wc); //3.创建窗口 /*lpszClassName,//类名 lpWindowName, //标题名 dwStyle, //风格 WC_OVERLAPPEDWINDOW x, //坐标 CW_USERDEFAULT y, //坐标 nWidth, //宽 nHeight, //高 hWndParent, //父窗口 null hMenu, //菜单 null hInstance, //实例句柄 lpParam //附加值 鼠标附加值*/ HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //4.显示和更新 ShowWindow(hwnd, SW_SHOWNORMAL); UpdateWindow(hwnd); /*HWND hwnd; //主窗口句柄 UINT message; //具体消息名称 WPARAM wParam; //附加消息 键盘消息 LPARAM lParam; //附加消息 鼠标消息 DWORD time; //消息产生时间 POINT pt;*/ //附加消息 鼠标消息 x,y //5.通过循环取消息 MSG msg; /* _Out_ LPMSG lpMsg, //消息 _In_opt_ HWND hWnd, //捕获窗口 填null表示捕获所有窗口 _In_ UINT wMsgFilterMin, //最大和最小的过滤消息 一般填0 _In_ UINT wMsgFilterMax);*/ while (GetMessage(&msg, NULL, 0, 0)) { /*if (GetMessage(&msg, NULL, 0, 0) == FALSE) { break; }*/ //翻译消息 TranslateMessage(&msg); //不是false //分发消息 DispatchMessage(&msg); } return 0; }

划重点:项目->属性->常规->高级->将MFC的使用设置为在“共享dll中使用mfc”

头文件mfc.h

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <afxwin.h>//mfc头文件 class MyApp:public CWinApp{ public: virtual BOOL InitInstance(); }; class MyFrame :public CFrameWnd {//窗口框架类 public: MyFrame(); //声明宏 提示消息映射机制 DECLARE_MESSAGE_MAP(); afx_msg void OnLButtonDown(UINT,CPoint); afx_msg void OnChar(UINT,UINT,UINT); afx_msg void OnPaint(); };

源文件mfc.cpp

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include “mfc.h” MyApp app; BOOL MyApp::InitInstance() { //创建窗口 MyFrame* frame = new MyFrame; //显示和更新 frame->ShowWindow(SW_SHOWNORMAL); frame->UpdateWindow(); m_pMainWnd = frame;//保存指向应用程序的主窗口的指针 return TRUE;//返回正常初始化 } //分界宏 BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) ON_WM_LBUTTONDOWN()//鼠标左键按下 ON_WM_CHAR() ON_WM_PAINT() END_MESSAGE_MAP() MyFrame::MyFrame() { Create(NULL,TEXT(“windows”)); } void MyFrame::OnLButtonDown(UINT, CPoint point) { //TCHAR buf[1024]; //wsprintf(buf, TEXT(“x = %d,y = %d”), point.x, point.y); //MessageBox(buf); CString str; str.Format(TEXT(“x = %d,y = %d”),point.x,point.y); MessageBox(str); } void MyFrame::OnChar(UINT key, UINT, UINT) { CString str; str.Format(TEXT(“按下了%c键”),key); MessageBox(str); } void MyFrame::OnPaint() { CPaintDC dc(this); dc.TextOutW(100,100,TEXT(“为了部落”)); dc.Ellipse(10,10,100,100); }

到此这篇关于如何使用visual studio2019创建简单的MFC窗口(使用C++)的文章就介绍到这了,更多相关vs2019创建MFC窗口内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是辛勤胡萝卜最近收集整理的关于如何使用visual studio2019创建简单的MFC窗口(使用C++)的全部内容,更多相关如何使用visual内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(601)

评论列表共有 0 条评论

立即
投稿
返回
顶部