在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框.

在Win32 API程序中只有MessageBox这一种用法.

而在MFC中就有三各方法:

1.调用API中的MessageBox  2.调用CWnd的成员函数MessageBox 3.调用全局函数AfxMessageBox

Win32 API 中MessageBox

举个简单例子

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPre,PSTR szCmdLine, int iCmdShow){

MessageBox(NULL,TEXT("hello world."),TEXT("Title"),0);//TEXT跟在MFC中常用的_T()一样,表示unicode字符

return 0;

}

消息对话框函数定义如下

MessageBoxHWND hWnd,  LPCWSTR lpText,  LPCWSTR lpCaption,  UINT uType);

参数hWnd窗口句柄,一般用的较少.这例子中也没有涉及窗口就直接写NULL.

参数lpText是消息对话框中显示的内容

参数lpCaption是对话框的标题

参数uType,指定对话框按钮,图标.

按钮类型如下

这都是些在WinUser.h中定义的宏.MB是MessageBox Button的简称,后面的文字就表示有几个按钮,按钮上显示啥字.

比如MB_YESNOCANCEL 就是显示3个按钮,分别是yes, no , cancel

MB_OK

MB_OKCANCEL

MB_ABORTRETRYIGNORE

MB_YESNOCANCEL

MB_YESNO

MB_RETRYCANCEL

MB_CANCELTRYCONTINUE

图标显示

另外我还会常在对话框上面看到一个问号和警告的一些图标,可以通过如下宏指定

MB_ICONWARNING

MB_ICONERROR

MB_ICONINFORMATION

MB_ICONSTOP

默认焦点

现在按钮图标都有了你可能还会想到如果有几个按钮那默认的焦点是在哪个按钮.可以通过如下宏

MB_DEFBUTTON1

MB_DEFBUTTON2

MB_DEFBUTTON3

MB_DEFBUTTON4

数字代表从左到右按钮的位置

上面讲了按钮,图标,默认焦点的三个宏,但怎么一起用呢 ?通过|这个符号把它们组合起来就是.举例

MessageBox(NULL,TEXT("hello world."),TEXT("Title"),MB_OKCANCEL|MB_ICONINFORMATION|MB_DEFBUTTON1);

对话框函数返回值

最后你可能还会想如果用户点不同的按钮,我们怎么得到用户的选择信息呢? 很简单,就是通过函数MessageBox的返回值就判断.函数会有如下返回值

IDOK

IDCANCEL

IDABORT

IDRETRY

IDIGNORE

IDYES

IDNO

所以可以这样来判断

if( MessageBox(NULL,TEXT("hello world."),TEXT("Title"),MB_OKCANCEL) == IDOK)

{

}

AfxMessageBox用法

AfxMessageBox是MFC对MessageBox的封装.它有两个不同的重载函数.

1) int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT)-1)

其中nIDPrompt是字符串资源ID,也就是你在String Table中定义的字符串. nType跟前面MessageBox中的完全一样. hIDHelp是跟帮助信息相关的.它这里来个(UINT)-1,把一个-1转成无符号类型.我实在没搞懂啥意思,我都怀疑是不是它们写错了.应该直接写个0. 反正在这里默认值0也就表示使用默认的帮助文档信息.

使用举例AfxMessageBox(IDS_MSG)

2) int AFXAPI AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK,

UINT nIDHelp = 0);

其中的lpszText是指定对话框要显示的内容.我们发现封装好处就是使用更简单,这里之所以简单是因为用到了默认参数,用户使用时不用老指定一堆参数.

不过我们发现有点扯蛋的事封装到最后竟然连指定对话框标题的参数都给能没了.你没法再去指定了,只能默认显示应用程序名字了.我估计当初那些写代码来封装的人肯定也纠结了番,这title名字嘛给默认指定一个啥才好啊? 估计肯定不会有满意的名字,最后干脆把这参数弄没了,去动态获取程序名字做标题了.

CWnd的MessageBox

只能继承自CWnd的类才能使用该函数

int MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK)

我们发现它也只是稍微封装了下API的MessageBox,只是少了个HWnd的参数,然后后面有两个参数有默认值.其他完全一样.

当然如果你想使用消息对话框更漂亮点,添加些额外的消息.那就直接整成个Dialog就行了.

消息对话框(MessageBox)用法介绍的更多相关文章

  1. [转载]ExtJs4 笔记(6) Ext.MessageBox 消息对话框

    作者:李盼(Lipan) 出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法 ...

  2. ExtJs4 笔记(6) Ext.MessageBox 消息对话框

    本篇演示消息对话框的用法,ExtJs封装了可能用到的各类消息框,并支持自定义的配置. 如下是用到的html: [html] <h1>各种消息框</h1> <div id= ...

  3. 消息对话框 MessageBoxButtons

    消息对话框MessageBox经常用于向用户显示通知信息.例如,在操作过程中遇到错误或程序异常,经常会使用这种方式给用户以提示,它是特殊类型的对话框. 在C#中,MessageBox消息对话框位于Sy ...

  4. WPF编程,C#中弹出式对话框 MessageBox 的几种用法。

    原文:WPF编程,C#中弹出式对话框 MessageBox 的几种用法. 1.MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息.   2.Mes ...

  5. C# MessageBox 消息对话框

    在程序中,我们经常使用消息对话框给用户一定的信息提示,如在操作过程中遇到错误或程序异常,经常会使用这种方式给用于以提示.在C#中,MessageBox消息对话框位于System.Windows.For ...

  6. C#中的MessageBox消息对话框

    关键字:C# MessageBox 消息对话框 在程序中,我们经常使用消息对话框给用户一定的信息提示,如在操作过程中遇到错误或程序异常,经常会使用这种方式给用于以提示.在C#中,MessageBox消 ...

  7. 【转】Delphi的消息对话框

    Delphi的消息对话框 输入输出inputBox()函数MessageBox()ShowMessage 对话框是Windows操作系统中程序与用户沟通的一种常见的交互方式,对话框可以向用户提供当前程 ...

  8. C#中MessageBox用法大全(转)

    我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...

  9. Qt——消息对话框的设计

    1.消息对话框是什么 消息对话框(MessageBox)提供了一个模态对话框,用来通知用户某些信息,或者用来询问用户一个问题并获得一个答复. 先看下面2张图—— 第一张图是网易云音乐的界面截图,在删除 ...

随机推荐

  1. 接收串口数据0x00 strlen函数会截断

    写个串口接收程序接收到之后,用了一个上strlen,结果数据不全了,百度了下 strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域) ...

  2. 《算法导论》读书笔记之排序算法—Merge Sort 归并排序算法

    自从打ACM以来也算是用归并排序了好久,现在就写一篇博客来介绍一下这个算法吧 :) 图片来自维基百科,显示了完整的归并排序过程.例如数组{38, 27, 43, 3, 9, 82, 10}. 在算法导 ...

  3. PCB设计铜铂厚度、线宽和电流关系

    以下总结了网上八种电流与线宽的关系公式,表和计算公式,虽然各不相同(大体相近),但大家可以在实际的PCB板设计中,综合考虑PCB板的大小,通过电流,选择一个合适的线宽. 一.PCB电流与线宽 PCB载 ...

  4. QLabel设置行间距(使用html的语法,比较巧妙)

    1.设置行间距 QLabel没有设置行间距的函数,所以这种办法是行不通的.只能采用其它类似的方法来实现,例如设置行高,使用样式代码如下: <p style='line-height:18px'& ...

  5. Codeforces Round #250 (Div. 2)—A. The Child and Homework

         好题啊,被HACK了.曾经做题都是人数越来越多.这次比赛 PASS人数 从2000直掉 1000人  被HACK  1000多人! ! ! ! 没见过的科技啊 1 2 4 8 这组数 被黑的 ...

  6. SQL查询各阶段的统计信息

            我们经常会遇到各种分类统计问题,须要将这些结果一次显示出来.这次老师提出的要求是我想看60分下面多少人.60~70多少人,70~80多少人.80~90多少人,90~100多少人.他们曾 ...

  7. Codeforces 360C Levko and Strings dp

    题目链接:点击打开链接 题意: 给定长度为n的字符串s,常数k 显然s的子串一共同拥有 n(n-1)/2 个 要求找到一个长度为n的字符串t,使得t相应位置的k个子串字典序>s #include ...

  8. Jquery Ajax时 error处理 之 parsererror

    Jquery Ajax时 error处理 之 parsererror     01 $.ajax({ 02         type: "POST", 03         con ...

  9. Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0

    今天在真机调试低版本系统的时候出现如题类似Layout Max Width在ios 8 之前不适用的问题, 初步估计是autolayout 所导致的 查找资料解决方法如下: 将label下Preffe ...

  10. CentOS6.5下VNC Server远程桌面配置详解

    参考文献: (总结)CentOS Linux下VNC Server远程桌面配置详解 远程桌面连接工具VNC——license Key 我的下载地址为 太平洋下载 VNC连接黑屏的问题 centos 6 ...