前面章节都是让人脑细胞高度紧张,这一章放松一下。对于公共对话框MessageBox大家并不陌生,在MFC的CWnd类中封装了一个MessageBox()成员函数,但MSDN并不推荐使用,一般用AfxMessageBox()全局函数,任何地方都可使用。
intAfxMessageBox(intAFXAPI AfxMessageBox( LPCTSTR lpszText, UINT nIDPrompt, //要表示的字符串 UINT nType = MB_OK, UINT nType = MB_OK, //画面形状(按钮、模式、图标、缺省值4个值组合使用) UINT nIDHelp = 0 UINT nIDHelp = (UINT) -1 //帮助ID,缺省为0 ); );
| 返回值 | 说明 |
|---|---|
| 0 | 不能正常表示 |
| IDYES | 被按下 |
| IDNO | 被按下 |
| IDOK | 被按下 |
| IDCANCEL | 被按下或【ESC】被按下 |
| IDABORT | 被按下 |
| IDIGNORE | 被按下 |
| IDRETRY | 被按下 |
| 显示按钮 | 说明 |
| ID_ABORTRETRYIGNORE | ![]() |
| ID_OK | ![]() |
| ID_OKCANCEL | ![]() |
| ID_RETRYCANCEL | ![]() |
| ID_YESNO | ![]() |
| ID_YESNOCANCEL | ![]() |
| 模式 | 说明 |
| ID_APPMODAL | 模态(缺省值)即不关闭就不能回到父窗口,但可以切换到其它应用程序。 |
| ID_SYSTEMMODAL | 系统模态即不关闭就不能回到任何窗口。 |
| ID_TASKMODAL | 特殊用途而备用。 |
| 显示图标 | 说明 |
| ID_ICONEXCLAMATION | 感叹符号 |
| ID_ICONINFORMATION | 情报符号 |
| ID_ICONquestion | 问号 |
| ID_ICONSTOP | 停止符号 |
| 缺省按钮 | 说明 |
| ID_DEFBUTTON1 | 第一个探针为缺省按钮。 |
| ID_DEFBUTTON2 | 第二个探针为缺省按钮。 |
| ID_DEFBUTTON3 | 第三个探针为缺省按钮。 |
类型:MFC将C++的关键字用宏定义成以下内容。
| MFC类型 | 意思 | C++类型 |
|---|---|---|
| BOOL,BOOLEAN | 布尔型 | boolean |
| BYTE | 1字节数值型 | char |
| WORD | 2字节数值型 | short |
| DWORD | 4字节数值型 | int |
| UINT | 无符号整型 | unsigned int |
| VOID | void型 | void |
| LPDWORD | DWORD的指针型 | int* |
| LPCSTR | 常量字符串 | const char* |
| LPSTR | 字符串 | char* |
| LPCVOID | 常量void指针 | const void* |
| LPVOID | void指针 | void* |
常量:MFC将C++的常量用宏定义成以下内容。
| MFC常量 | 意思 | C++常量 |
|---|---|---|
| NULL | 空指针 | 0 |
| TRUE | 布尔值:真 | true |
| FALSE | 布尔值:假 | false |
命名规则:MFC有以下命名规则。
可以在程序的任何位置插入TRACE()宏函数来调试程序,TRACE()宏函数只在DEBUG状态有效,即按<F5>运行时有效,<Ctrl + F5>时无效。另外,断点也可以设置条件。下面例子是一个没有消息循环的MFC程序(控制台程序)。断点的条件是“i>5”。
// test5.cpp : 定义控制台应用程序的入口点。//
#include"stdafx.h"#include"test5.h"#ifdef_DEBUG#definenew DEBUG_NEW#endif// 唯一的应用程序对象 CWinApp theApp;using namespacestd;int_tmain(intargc, TCHAR* argv[], TCHAR* envp[]) {intnRetCode = 0; // 初始化 MFC 并在失败时显示错误if(!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 更改错误代码以符合您的需要 _tprintf(_T("致命错误: MFC 初始化失败\n")); nRetCode = 1; }![]()
else{ // TODO: 在此处为应用程序的行为编写代码。for(inti=0; i<10; i++) {TRACE("i = [%d]\n", i); //按钮:[是(Y)][否(N)][取消],图标为:[i], //模式:不能切换到其它窗口,缺省:[否(N)] AfxMessageBox("这是小雅的MFC教程。" , MB_YESNOCANCEL|MB_SYSTEMMODAL|MB_ICONINFORMATION|MB_DEFBUTTON2);
printf("劝学网:测试AfxMessageBox功能。\n"); } }
returnnRetCode; }