第一个MFC

万事开头难!

步骤一:新建MFC项目

打开Visual Studio,文件–>新建–>项目,如图1所示:

图1
进入新建项目窗口后,左侧选择已安装–>模板–>Visual C++–>MFC,中间选择MFC应用程序,下方自由命名名称和选择新建项目位置,最后点击确定,如图2所示:

图2
确定后,选择MFC应用程序向导按如下图操作:

图3
图4
图5
图6
图7
图8
以上步骤完成后,进入图8的界面,至此,项目建立完成!

步骤二:对话框编辑

打开左侧工具箱–>对话框编辑器,如图9所示,

图9
删除对话框中确定按钮,从对话框编辑中拖一个Button和一个Edit Control到对话框中,将Button复制四份,Edit Control复制两份,如图10所示:

图10
调整好大小,放好位置,鼠标放在Button右键–>属性,在右下角属性栏的Caption修改按钮名,如图11所示:

图11

步骤三:设置变量与编程

鼠标放在Edit Control右键–>添加变量,设置前两个Edit Control变量为E1、E2,设置后一个Edit Control变量为E3,类型:Value,变量类型:float,变量名:E1,如图12所示:

图12

双击每一个控件,就进入主程序中,输入以下代码,运行(本地Windows调试器)

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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
// MFConeDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "MFCone.h"
#include "MFConeDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMFConeDlg 对话框
CMFConeDlg::CMFConeDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_MFCONE_DIALOG, pParent)
, E2(0)
, E3(0)
, E1(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFConeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT2, E2);
DDX_Text(pDX, IDC_EDIT3, E3);
DDX_Text(pDX, IDC_EDIT1, E1);
}
BEGIN_MESSAGE_MAP(CMFConeDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFConeDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CMFConeDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CMFConeDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMFConeDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMFConeDlg::OnBnClickedButton5)
ON_EN_CHANGE(IDC_EDIT2, &CMFConeDlg::OnEnChangeEdit2)
ON_EN_CHANGE(IDC_EDIT1, &CMFConeDlg::OnEnChangeEdit1)
ON_EN_CHANGE(IDC_EDIT3, &CMFConeDlg::OnEnChangeEdit3)
ON_BN_CLICKED(IDCANCEL, &CMFConeDlg::OnBnClickedCancel)
END_MESSAGE_MAP()
// CMFConeDlg 消息处理程序
BOOL CMFConeDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
ShowWindow(SW_MINIMIZE);
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFConeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CMFConeDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFConeDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFConeDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//从控件获得数据赋给变量
E3 = E1 + E2;
UpdateData(false);//输出变量的值到控件
}
void CMFConeDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//从控件获得数据赋给变量
E3 = E1 - E2;
UpdateData(false);//输出变量的值到控件
}
void CMFConeDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//从控件获得数据赋给变量
E3 = E1 * E2;
UpdateData(false);//输出变量的值到控件
}
void CMFConeDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
if (E2 == 0)
{
MessageBox(_T("除数不能为零!"));
return;
}
E3 = E1 / E2;
UpdateData(false);
}
void CMFConeDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
E1 = 0;
E2 = 0;
E3 = 0;
UpdateData(false);
GotoDlgCtrl((CEdit*)GetDlgItem(IDC_EDIT1));//设置焦点在第一个编辑框
}
void CMFConeDlg::OnEnChangeEdit2()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMFConeDlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMFConeDlg::OnEnChangeEdit3()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CMFConeDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}

打开刚刚的新建项目目录:MFCone/Debug里就有个MFCone.exe,点击运行就成功了,如图13

图13
完成喽!

© 2018 TinTin All Rights Reserved. 本站访客数人次 本站总访问量
主题: hiero