初识MFC

创建MFC工程的方法

新建空项目,右键项目属性

常规->MFC的使用 在共享DLL中使用MFC

链接器->系统->子系统 窗口(/SUBSYSTEM:WINDOWS)

添加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
#include <afxwin.h>
#include <afxdialogex.h>
#include "resource.h"

//CDialogEx是MFC中的对话框类
//通过继承这个类来编写控件消息的响应
class MyDialog :public CDialogEx {
public:
MyDialog(UINT nIDTemplate, CWnd *pParent = NULL)
:CDialogEx(nIDTemplate, pParent)/*调用父类构造*/
{
}
//在类中定义按键点击函数
//需要将函数在消息映射表中注册
void onButtonClicked() {
MessageBox("按键事件");
}
protected:
//在类内声明消息映射表
DECLARE_MESSAGE_MAP()
//DECLARE_MESSAGE_MAP 等价于
//static const AFX_MSGMAP* PASCAL GetThisMessageMap();
//virtual const AFX_MSGMAP* GetMessageMap() const;
};

//在类外定义消息映射表
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
ON_COMMAND(IDC_BUTTON1, &MyDialog::onButtonClicked)
END_MESSAGE_MAP()

//等价于
//BEGIN_MESSAGE_MAP
//const AFX_MSGMAP* MyDialog::GetMessageMap() const
//{
// return GetThisMessageMap();
//}
//const AFX_MSGMAP* PASCAL MyDialog::GetThisMessageMap()
//{
// typedef MyDialog ThisClass;
// typedef CDialogEx TheBaseClass;
// static const AFX_MSGMAP_ENTRY _messageEntries[] =
// {
// //响应事件
// ON_COMMAND(IDC_BUTTON1, &MyDialog::onButtonClicked)
// //END_MESSAGE_MAP
// {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
// };
// static const AFX_MSGMAP messageMap =
// { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };
// return &messageMap;
//}

//CWinApp是MFC的应用程序类
//CWinApp类或它的子类只能定义一个对象
class MyApp :public CWinApp {
public:
virtual BOOL InitInstance() override {
//这个虚函数相当于程序入口
MyDialog dlg(IDD_DIALOG1);
//运行一个模态对话框
dlg.DoModal();
return TRUE;
}
};
//全局对象
MyApp g_app;

或者

新建 MFC应用程序 项目

应用程序类型->基于对话框(用户界面功能->”关于”框 可以不选)

添加变量

  1. 给控件绑定变量
    控件类型:将控件绑定到一个MFC的类
    值类型:将控件绑定到一个非窗口类中(例如CString类)
  2. 绑定流程
    1. 在类中声明一个成员变量
      1. 如果是控件类型绑定,使用MFC窗口类作为变量类型
      2. 如果是值类型绑定,就使用其他类型作为变量的类型(须通过UpdateDate交换控件和变量数据)
    2. 在虚函数DoDataExchange中添加代码,将控件ID和变量名绑定在一起
      1. 控件绑定的使用,例如:
        DDX_Control(pDx,控件ID,成员变量名);
      2. 值绑定,例如:
        DDX_XXX(pDx,控件ID,成员变量名)
        一般编辑框使用的是DDX_Text,复选框使用的是DDX_Check

添加对话框类

  1. 先添加对话框资源
  2. 添加一个MFC类
    1. 需要继承CDialogEx类
    2. 声明并定义消息映射表
    3. 重写DoDataExchange虚函数
    4. 需要在构造函数中调用父类构造,并将对话框的资源ID传给父类构造

响应消息和类向导

  1. 窗口消息
    1. 对话框初始化消息
    2. WM_SIZE,WM_LBUTTONDOWN
    3. 需要用到类向导
  2. 控件消息