一个简单的MFC程序,需要具备以下条件:
- 需要包含头文件 afxxin.h
- 每一个 MFC 工程,必须有一个 CWinApp 的派生类对象,而不再需要 WinMain 函数
- 必须重写 InitInstance 函数
- 在 InitInstance 函数中,创建窗口,或者对话框
- 并将窗口对象的指针赋值给 CWinApp 的成员变量 m_pMainWnd
```cpp
include
//CWinApp theApp; class CMyApp : public CWinApp { BOOL InitInstance() // 初始化程序实例 { CFrameWnd *Frame = new CFrameWnd(); // 创建窗口框架 m_pMainWnd = Frame; // 保存窗口框架 Frame->Create(NULL, L”最简单的窗口”); // 创建窗口 Frame->ShowWindow(SW_SHOW); // 显示窗口 return true; } };
CMyApp theApp; // 建立应用程序
```
由于编写的是 MFC 程序,需要在项目属性中进行设置:
MFC 编程框架
与 SDK 编程一样,当生成一个默认的工程的时候,编译器已经将框架搭好,可以直接在搭好的框架中编写程序。
默认的工程有三种:对话框程序、单文档程序、多文档程序。依次对应三种不同 MFC 编程框架。
MFC 中的对话框
使用 MFC 中的向导创建对话框程序,通过向导建立对话框,选择基于对话框后,直接点击“生成的类”即可看到即将生成的类
CDialogEx 是 CDialog 类的扩展版本,其比 CDialog 多了一些功能,比如可以指定对话框的背景色和背景图像。
通常 CDialog 或者 CDialogEx 的派生类中包含以下成员:
- DoDataExchange 虚函数,用于对话框控件与数据的交换交互
- OnInitDialog 虚函数,等价对话框消息 WM_INITDIALOG,在这个函数中可以添加一些对话框的初始化代码。
- enum { IDD=XX},标记了一个对话框资源的 ID,这个 ID 与这个类有对应关系。
- m_hWnd 成员变量,用于保存对话框的窗口句柄。
通常 CWinApp 或者 CWinAppEx 的派生类中包含以下成员:
- m_pMainWnd 成员变量,用于保存主窗口的窗口句柄,在这里保存的也是主对话框句柄。
- InitInstance 虚函数,这个函数用于程序的初始化,最重要的功能,就是用 CWnd 的派生类创建出窗口,或者用 Cdialog 的派生类创建出对话框。
MFC 中的对话框类型
模态对话框 | 非模态对话框 | |
---|---|---|
区别 | 在程序运行的过程中,若出现了模态对话框,会阻塞程序,只有处理完这个对话框才能继续程序。 | 在程序运行过程中,若出现了非模态对话框,其不会阻塞线程。 |
创建方式 | CDialog(Ex)的DoModal()函数 | CDialog(Ex)的Create()函数 |
使用方式 | 模态对话框对象一般是局部的。 | 非模态对话框对象一般是一个成员变量。 |