《Windows编程循序渐进》——建立MFC应用程序
- 如何建立MFC应用程序
打开VS2013:
单击下一步:
选中相应的选项:
点击完成:
- 应用程序类
我们可以看到:
对于应用程序类,该项目的名称是FirstSoftware,对应的类就是CFirstSoftwareApp;对于对话框类(尽管一个应用程序不一定含有对话框,也可能含有多个对话框),对应的类时CFirstSoftwareDlg
我们在FirstSoftware.h中会发现:
这个类是由CWinApp派生出来的。进入InitInstance()中看下:
这一句使用父类的初始化方法对子类进行初始化。
这里是接收对话框是点击了“确定”还是“取消”。
我们添加一些东西到里边:
但是当真正运行起来之后,单击“确定”或者是“取消”都不会弹出这个MessageBox,Why?继续往下看。
- 对话框类
下面再来看对话框类:
class CFirstSoftwareDlg : public CDialogEx { // 构造 public: CFirstSoftwareDlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据,对话框的ID enum { IDD = IDD_FIRSTSOFTWARE_DIALOG }; protected: //动态数据交换 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint();//每当对话框重新出现在屏幕上,就需要一次重绘 afx_msg HCURSOR OnQueryDragIcon();//绘制图标 DECLARE_MESSAGE_MAP() };
MFC的开发主要是针对消息处理机制。
先Ctrl+Shift+E切换到资源窗口,点击对话框ID,我们双击对话框中的某一个按钮,就来到了:
你只需要在这里添加代码,告诉点击一个按钮之后需要做什么即可。
这时候再Ctrl+F5运行,单击某一个按钮运行,就可以弹出对话框了:
- 添加消息响应
Ctrl+Alt+X调出工具箱:
可以在工具箱里拖拽一个Button进来。
更改其名称和ID后,双击添加代码:
这种形式的MessageBox和上面的那种MessageBox有什么区别呢?运行一下:
我们发现,对于确定按钮,点几次就会弹出几个MessageBox,且它的标题和内容都是由自己设定的。
而当我们点击新添加的FirstButton时,发现它只能弹出一个MessageBox,且它的标题是自己设定的。
前者被称为非模态的,后者被称为模态的。后者的MessageBox隐含的传递了一个this指针,你也可以写成: