1)MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);

第一个参数是句柄;第二个是正文;第三个是标题(Caption);第四个是类型。

MB_OK就是表示有一个OK按钮【确定】)
     TEXT是一个宏,当字符串中有中文的时候最好用TEXT来包围这个字符串,虽然不使用TEXT在VC6中没问题,但是在VC7中有问题,而且微软也建议使用TEXT宏,因此在涉及到中文的场合要使用它。他的作用就是把中文转化成不会乱码的格式。(暂时这么认为)。_T("问好"),其实_T只是TEXT的一个缩写而已。而且_T在有的低版本里不识别。TEXT()低版本也识别。暂时不用关心TEXT的细节。

换个样子:MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL);

可从设置希望在对话框中显示的按钮:

#define MB_OK   0x00000000L

#define MB_OKCANCEL   0x00000001L

#define MB_ABORTRETRYIGNORE   0x00000002L

#define MB_YESNOCANCEL   0x00000003L

#define MB_YESNO   0x00000004L

#define MB_RETRYCANCEL     0x00000005L

也可以设置对话框中显示的图标:

#define MB_ICONHAND     0x00000010L(叉号)

#define MB_ICONQUESTION    0x00000020L(问号)

#define MB_ICONEXCLAMATION    0x00000030L (惊叹号)

#define MB_ICONASTERISK    0x00000040L(星号)

比如:MessageBox(NULL, TEXT("世界你好") ,TEXT("你好"), MB_ICONQUESTION);

(2)可是如果我想显示“确定、取消”按钮的时候同时使用问号图标呢?

MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION);

MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),

MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);

(3)思考:

到这一步如果你只是在背诵“第一组和第二组中间放一个竖线就可以实现两种效果的组合形式”,那么你未来只会成为一个代码工人。我们要思考一下其背后的原理。

“|”是什么意思?“|”是位运算里的“或”运算,只有对应的两个二进位有一位为1时,结果位才为1 ,否则为0。MB_OK、MB_OKCANCEL等的低四位不同,但是高位永远为0;MB_ICONHAND、MB_ICONQUESTION等的低5至第8位不同,而其他位永远为0。这样“MB_OK、MB_OKCANCEL”组的数值与“MB_ICONHAND、MB_ICONQUESTION”组的数值进行或运算后能分别保留各自的部分,也就是在结果值中同时体现两组的取值。

这种风格叫“掩码”,在Windows编程中这种用法会经常用到。

(4)返回值

MessageBox是有返回值的,返回值为用户点击的按钮:

#define IDOK       1

#define IDCANCEL       2

#define IDABORT       3

#define IDRETRY       4

#define IDIGNORE       5

#define IDYES       6

#define IDNO       7

代码:
int ret = MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"),

MB_YESNO | MB_ICONQUESTION);
if(ret==IDYES)
{
MessageBox(NULL, TEXT("火星人你好"), TEXT("问好"),MB_OK);
}
else
{
MessageBox(NULL, TEXT("欢迎回家来"), TEXT("问好"),MB_OK);
}

*****编程小技巧:if(ret==IDYES),若不小心少写一个等号,则无论按下哪个按钮都是一种情况,应为少一个等号时它成了一个赋值语句,即将IDYES这个宏的值赋值给ret,怎样避免呢?可以将ret和IDYES调换一下位置,则如果少写一个等号调试时就会报错,因为IDYES已经是个固定值没法再给它赋值,这样就避免了错误的发生。

C:深入研究MessageBox相关推荐

  1. [.Net] C# MessageBox.Show 用法与连结说明档

    好头痛, user 不会操作程式导致问题连连,灾情严重. 老板大大, 希望程式能跳出MessageBox对话盒并连接说明档( help.htm). 开始研究MessageBox.Show语法--. 首 ...

  2. MessageBox深入研究

    总结的特别好,所以打算记录下来 原文地址:https://blog.csdn.net/AcceZn/article/details/54670776 MessageBox是最简单的图形界面交互API之 ...

  3. 由MessageBox和AfxMessageBox的使用异同所感

    我记得刚开始学图形界面编程的时候,接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序,突然能运行蹦出一个对话框感觉还是很新鲜的.当时还利用MessageBox写一些恶搞程序,利用 ...

  4. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  5. 进程注入的研究与实现

    为了对内存中的某个进程进行操作,并且获得该进程地址空间里的数据,或者修改进程的私有数据结构,必须将自己的代码放在目标进程的地址空间里运行,这时就避免不了使用进程注入方法了. 进程注入的方法分类如下: ...

  6. 原创“.NET研究”企业级控件库之图片浏览控件

    在上两篇:我介绍了原创企业级控件库之组合查询控件 和原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢.有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我 ...

  7. Win32 鼠标绘图代码研究

    http://download.csdn.net/detail/u012313945/9534690 下面摘录绘图部分代码以供研究:winmain和相关窗口过程函数参阅相关资料: #include&l ...

  8. WPF messagebox生命周期的探讨

    WPF messagebox生命周期的探讨 wpf中messagebox默认要依赖于其他window窗口,如果再app.xaml.cs中还未创建其他任何窗口的情况下使用messagebox.show( ...

  9. SEH in ASM 研究(一)

    SEH  in ASM 研究(一)                                             By Hume/冷雨飘心 为什么老调重弹:     SEH出现已绝非一日,但 ...

最新文章

  1. Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动
  2. Java序列化、反序列化
  3. js获取几个月前,几周前时间。
  4. css-博客圆形头象的制作
  5. 3.1Python数据处理篇之Numpy系列(一)---ndarray对象的属性与numpy的数据类型
  6. C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
  7. jquery内容过滤器:contains :empty :has(p) :parent
  8. Linux系统调用怎么和内核或底层驱动交互的 inode struct file
  9. CAN协议 J1939
  10. IT专用英语词汇1500词
  11. 软件测试网上订餐系统,星月外卖网上订餐系统软件测试报告(正式).doc
  12. 声网合伙人王骅:聊聊企业拥抱全球化 关键是什么?
  13. MapStruct一个代码的装潢师
  14. 大数据告诉你——垃圾围城,现行的垃圾分类制度,作用到底能有多大?
  15. 解字谜:黑白皆算,对我等众猿而言中央C所在位置数优剃爱肤杠吧爱慕帝贰亿次的值是?...
  16. 不重装系统改硬盘模式: RAID ON 改成 AHCI
  17. Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
  18. 在贴吧怎样引流宝妈粉?怎么从百度贴吧引流宝妈粉?
  19. 5分钟带你走进webpack
  20. yDAI受创 Curve“喜”收意外之财

热门文章

  1. AJAX实现页面登录及注册用户名验证
  2. 投资基建无异扩大货币供应
  3. XXL-JOB任务调度中心---阻塞处理策略
  4. 【Android】SD卡的安全存储问题
  5. NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......
  6. Web前端开发工资差距是如何产生的?根源是技术水平
  7. 魔众企业VI系统-帮您快速创建现代化的企业形象
  8. 服务器2012r2系统要求,Winserver2012R2配置有什么要求
  9. Ubuntu 16.04 Wifi列表是空的(搜索不到Wifi)的解决方法
  10. 你想了解ADSS和OPGW光缆之间的区别吗?