C:深入研究MessageBox
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相关推荐
- [.Net] C# MessageBox.Show 用法与连结说明档
好头痛, user 不会操作程式导致问题连连,灾情严重. 老板大大, 希望程式能跳出MessageBox对话盒并连接说明档( help.htm). 开始研究MessageBox.Show语法--. 首 ...
- MessageBox深入研究
总结的特别好,所以打算记录下来 原文地址:https://blog.csdn.net/AcceZn/article/details/54670776 MessageBox是最简单的图形界面交互API之 ...
- 由MessageBox和AfxMessageBox的使用异同所感
我记得刚开始学图形界面编程的时候,接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序,突然能运行蹦出一个对话框感觉还是很新鲜的.当时还利用MessageBox写一些恶搞程序,利用 ...
- C#程序实现动态调用DLL的研究(转)
摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...
- 进程注入的研究与实现
为了对内存中的某个进程进行操作,并且获得该进程地址空间里的数据,或者修改进程的私有数据结构,必须将自己的代码放在目标进程的地址空间里运行,这时就避免不了使用进程注入方法了. 进程注入的方法分类如下: ...
- 原创“.NET研究”企业级控件库之图片浏览控件
在上两篇:我介绍了原创企业级控件库之组合查询控件 和原创企业级控件库之大数据量分页控件,受到了很多朋友的支持,给了我很大的动力,在此我特表感谢.有的朋友要求把源码提供上来,我在第一篇就讲了,源码会在我 ...
- Win32 鼠标绘图代码研究
http://download.csdn.net/detail/u012313945/9534690 下面摘录绘图部分代码以供研究:winmain和相关窗口过程函数参阅相关资料: #include&l ...
- WPF messagebox生命周期的探讨
WPF messagebox生命周期的探讨 wpf中messagebox默认要依赖于其他window窗口,如果再app.xaml.cs中还未创建其他任何窗口的情况下使用messagebox.show( ...
- SEH in ASM 研究(一)
SEH in ASM 研究(一) By Hume/冷雨飘心 为什么老调重弹: SEH出现已绝非一日,但 ...
最新文章
- Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动
- Java序列化、反序列化
- js获取几个月前,几周前时间。
- css-博客圆形头象的制作
- 3.1Python数据处理篇之Numpy系列(一)---ndarray对象的属性与numpy的数据类型
- C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
- jquery内容过滤器:contains :empty :has(p) :parent
- Linux系统调用怎么和内核或底层驱动交互的 inode struct file
- CAN协议 J1939
- IT专用英语词汇1500词
- 软件测试网上订餐系统,星月外卖网上订餐系统软件测试报告(正式).doc
- 声网合伙人王骅:聊聊企业拥抱全球化 关键是什么?
- MapStruct一个代码的装潢师
- 大数据告诉你——垃圾围城,现行的垃圾分类制度,作用到底能有多大?
- 解字谜:黑白皆算,对我等众猿而言中央C所在位置数优剃爱肤杠吧爱慕帝贰亿次的值是?...
- 不重装系统改硬盘模式: RAID ON 改成 AHCI
- Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
- 在贴吧怎样引流宝妈粉?怎么从百度贴吧引流宝妈粉?
- 5分钟带你走进webpack
- yDAI受创 Curve“喜”收意外之财
热门文章
- AJAX实现页面登录及注册用户名验证
- 投资基建无异扩大货币供应
- XXL-JOB任务调度中心---阻塞处理策略
- 【Android】SD卡的安全存储问题
- NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......
- Web前端开发工资差距是如何产生的?根源是技术水平
- 魔众企业VI系统-帮您快速创建现代化的企业形象
- 服务器2012r2系统要求,Winserver2012R2配置有什么要求
- Ubuntu 16.04 Wifi列表是空的(搜索不到Wifi)的解决方法
- 你想了解ADSS和OPGW光缆之间的区别吗?