MessageBox与AfxMessageBox用法与区别.pdf

上传人:赵** 文档编号:21160292 上传时间:2022-06-18 格式:PDF 页数:8 大小:215.28KB
返回 下载 相关 举报
MessageBox与AfxMessageBox用法与区别.pdf_第1页
第1页 / 共8页
MessageBox与AfxMessageBox用法与区别.pdf_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《MessageBox与AfxMessageBox用法与区别.pdf》由会员分享,可在线阅读,更多相关《MessageBox与AfxMessageBox用法与区别.pdf(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、VCVC 中中 MessageBoxMessageBox 与与 AfxMessageBoxAfxMessageBox 用法与区别用法与区别MessageBox()用法消息框是个很常用的控件, 属性比较多,本文列出了它的一些常用方法, 及指出了它的一些应用场合。1.MessageBox(这是一个最简单的消息框!);2.MessageBox(这是一个有标题的消息框!,标题);3.MessageBox(这是一个确定 取消的消息框!,标题, MB_OKCANCEL );4.MessageBox(这是一个警告的消息框! ,标题, MB_ICONEXCLAMATION );5.MessageBox(这是一

2、个两种属性的消息框!,标题, MB_ICONEXCLAMATION|MB_OKCANCEL );6.if(MessageBox(一种常用的应用,标题,MB_ICONEXCLAMATION|MB_OKCANCEL)=IDCANCEL)return;附其它常用属性系统默认图标,可在消息框上显示X 错误 MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR?询问 MB_ICONQUESTION!警告 MB_ICONEXCLAMATION and MB_ICONWARNINGi 信息 MB_ICONASTERISK and MB_ICONINFORMATION按钮的形式

3、MB_OK 默认MB_OKCANCEL 确定取消MB_YESNO 是否MB_YESNOCANCEL 是否取消返回值IDCANCEL 取消被选IDNO 否被选IDOK 确定被选IDYES 是被选以上消息框的用法是在CWnd 的子类中的应用,如果不是,则要 MessageBox(NULL,ddd,ddd,MB_OK);或 MessageBox(hWnd,ddd,ddd,MB_OK); hWnd 为某窗口的句柄,或者直接用AfxMessageBox。AfxMessageBox 的用法nt AfxMessageBox(LPCTSTR lpszText,UINT nType = MB_OK,UINT n

4、IDHelp = 0);lpszText 为显示内容。nType 基本类型:MB_ABORTRETRYIGNORE The message box contains three pushbuttons: Abort, Retry, and Ignore.MB_OK The message box contains one pushbutton: OK.MB_OKCANCEL The message box contains two pushbuttons: OK and Cancel.MB_RETRYCANCEL The message box contains two pushbuttons

5、: Retry andCancel.MB_YESNO The message box contains two pushbuttons: Yes and No.MB_YESNOCANCEL The message box contains three pushbuttons: Yes, No,and Cancel.AfxMessageBox()与 MessageBox()的区别带 afx 的是全局函数,可以在程序任何地方使用,不带的是CWnd 的子函数,只能在 CWnd 窗口类对象里面使用AfxMessageBox 的函数原型int AfxMessageBox( LPCTSTR lpszTex

6、t, UINT nType = MB_OK, UINT nIDHelp = 0 );int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINTnIDHelp = (UINT) 1 );在第一种形式中,lpszText 表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如 Hello)。在第二种形式中,nIDPrompt 为要显示的文本字符串在字符串表中的 ID。函数调用时会自动从字符串表中载入字符串并显示在消息框中。 nType 为消息框中显示的按钮风格和图标风格的组合,可以采用|(或)操作符组合各种风格

7、。按钮风格MB_ABORTRETRYIGNORE消息框中显示 Abort、Retry、Ignore 按钮MB_OK显示 OK 按钮MB_OKCANCEL 显示 OK、Cancel 按钮MB_RETRYCANCEL 显示 Retry、Cancel 按钮MB_YESNO 显示 Yes、No 按钮MB_YESNOCANCEL 示 Yes、No、Cancel 按钮图标风格MB_ICONINFORMATION 显示一个 i 图标,表示提示MB_ICONEXCLAMATION 显示一个惊叹号,表示警告MB_ICONSTOP 显示手形图标,表示警告或严重错误MB_ICONQUESTION 显示问号图标,表示

8、疑问与 AfxMessageBox 类似的函数 MessageBox,它是 CWnd 的类成员函数:int MessageBox( LPCTSTR lpszText,LPCTSTR lpszCaption = NULL,UINT nType = MB_OK );两个函数的区别: AfxMessageBox 比 MessageBox 简单一些, 因为它是一个全局函数所以不需要对应的一个窗口类, 但是不能控制消息框标题, 常用于调试程序时的内部数据输出或警告;MessageBox 比较正式,常用在要提交的应用程序版本中,可以控制标题内容而不必采用含义不明的可执行文件名为标题。举例:AfxMessa

9、geBox(“Are you sure?”,MB_YESNO|MB_ICONQUESTION);int a = MessageBox(TEXT( 是否确认删除? ), TEXT(Warning!),4);if (a = 6)AfxMessageBox(Yes);elseAfxMessageBox(No);(其中#define IDYES 6 #define IDNO 7)VC 中可调用的函数大致可分三类:1.类自己的函数,只对类自己的数据成员有作用;2.AFX 小组在设计 Application Framworks 时设计的全局函数, 多冠在 Afx 前缀,在包含了 MFC 库/框架的工程中可

10、用;3.Windows API 的全局函数。对所有Windows 平台下的程序设计都可以调用,如Vb,Vc,Dephi 等等。你说的 MessageBox 是属于 CWnd 类的成员函数,只能在 CWnd 和 CWnd 的派生类的对象中调用;AfxMessageBox 则可在任何地方调用。另外对应的还有::MessageBox()这个 windows API 的全局函数。上述中1 和 3 一般有一个区别,就是1 要比 3 少一个参数, 即窗口句柄。 大家知道, 这个句柄是通过 this 指针曲折转换得到的,不用程序员操心了。如何修改 AfxMessageBox 的标题?应用程序的 exe 的名

11、称可以随意更改,但是如果程序内部弹出一个系统对话框,这时候就会发现对话框的标题和应用程序的名称不一致了。怎么办呢?系统内部弹出的对话框一般调用的是AfxMessageBox()函数, 那就检查一下这个函数吧。一路跟下去,最后发现到了CWinApp 类中。int CWinApp:ShowAppMessageBox(CWinApp *pApp, LPCTSTR lpszPrompt,UINT nType, UINT nIDPrompt)/ disable windows for modal dialogDoEnableModeless(FALSE);HWND hWndTop;HWND hWnd =

12、 CWnd:GetSafeOwner_(NULL, &hWndTop);/ re-enable the parent window, so that focus is restored/ correctly when the dialog is dismissed.if (hWnd != hWndTop)EnableWindow(hWnd, TRUE);/ set help context if possibleDWORD* pdwContext = NULL;DWORD dwWndPid=0;GetWindowThreadProcessId(hWnd,&dwWndPid);if (hWnd

13、!= NULL & dwWndPid=GetCurrentProcessId() )/ use app-level context or frame level contextLRESULT lResult = :SendMessage(hWnd, WM_HELPPROMPTADDR, 0, 0);if (lResult != 0)pdwContext = (DWORD*)lResult;/ for backward compatibility use app context if possibleif (pdwContext = NULL & pApp != NULL)pdwContext

14、= &pApp-m_dwPromptContext;DWORD dwOldPromptContext = 0;if (pdwContext != NULL)/ save old prompt context for restoration laterdwOldPromptContext = *pdwContext;if (nIDPrompt != 0)*pdwContext = HID_BASE_PROMPT+nIDPrompt;/ determine icon based on type specifiedif (nType & MB_ICONMASK) = 0)switch (nType

15、& MB_TYPEMASK)case MB_OK:case MB_OKCANCEL:nType |= MB_ICONEXCLAMATION;break;case MB_YESNO:case MB_YESNOCANCEL:nType |= MB_ICONQUESTION;break;case MB_ABORTRETRYIGNORE:case MB_RETRYCANCEL:/ No default icon for these types, since they are rarely used./ The caller should specify the icon.break;#ifdef _D

16、EBUGif (nType & MB_ICONMASK) = 0)TRACE(traceAppMsg, 0, Warning: no icon specified for message box.n);#endifTCHAR szAppName_MAX_PATH;szAppName0 = 0;LPCTSTR pszAppName;if (pApp != NULL)pszAppName = pApp-m_pszAppName;elsepszAppName = szAppName;DWORD dwLen = GetModuleFileName(NULL, szAppName, _MAX_PATH)

17、;if (dwLen = _MAX_PATH)szAppName_MAX_PATH - 1 = 0;int nResult =:AfxCtxMessageBox(hWnd, lpszPrompt, pszAppName, nType);/ restore prompt context if possibleif (pdwContext != NULL)*pdwContext = dwOldPromptContext;/ re-enable windowsif (hWndTop != NULL):EnableWindow(hWndTop, TRUE);DoEnableModeless(TRUE);return nResult;红字的地方是关键, 最终 pszAppName 的值会指向当前应用程序的一个字符串m_pszAppName,这个值是开放的可以被动态修改的。 如此一来,在应用程序初始化之前修改m_pszAppName 这个值就会更改 AfxMessageBox 的标题了。那这个 m_pszAppName的值怎么修改呢?很简单。WCHAR* szAppName = new WCHARMAX_PATH;lstrcpy(szAppName , LTargetTitle);AfxGetApp()-m_pszAppName = szAppName;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com