快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → windows编程之MessageBox

windows编程之MessageBox

时间:2022-09-26 15:21:01人气:作者:快盘下载我要评论

windows编程之MessageBox


什么是MessageBox

MessageBox 是一个函数;用于显示一个模态对话框;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息;如状态或错误的信息。

消息框中返回一个整数值;该值指示用户单击了哪个按钮。


API函数原型

MessageBoxA(
    _In_opt_ HWND hWnd,
    _In_opt_ LPCSTR lpText,
    _In_opt_ LPCSTR lpCaption,
    _In_ UINT uType);

MessageBoxW(
    _In_opt_ HWND hWnd,
    _In_opt_ LPCWSTR lpText,
    _In_opt_ LPCWSTR lpCaption,
    _In_ UINT uType);

注释;In 说明该参数是输入的;opt 说明该参数是可选参数。


参数解析

参数含义hWnd【1】该消息框的父窗口句柄 【2】如果此参数为NULL;则该消息框没有拥有父窗口lpText消息框的内容lpCaption消息框的标题uType【1】指定一个决定对话框的内容和行为的位标志集 【2】此参数可以通过指定下列标志或标志的组合;来显示消息框中的按钮以及图标

uType参数定义解析

按钮含义MB_OK默认值;有一个“确认”按钮在里面MB_YESNO有“是”和“否”两个按钮在里面MB_ABORTRETRYIGNORE有“中止”;“重试”和“跳过”三个按钮在里面MB_YESNOCANCEL有“是”;“否”和“取消”三个按钮在里面MB_RETRYCANCEL有“重试”和“取消”两个按钮在里面MB_OKCANCEL有“确定”和“取消”两个按钮在里面
默认按钮含义MB_DEFBUTTON1指定第一个按钮为默认按钮MB_DEFBUTTON2指定第二个按钮为默认按钮MB_DEFBUTTON3指定第三个按钮为默认按钮MB_DEFBUTTON4指定第四个按钮为默认按钮
图标含义MB_ICONEXCLAMATION一个惊叹号出现在消息框MB_ICONWARNING一个惊叹号出现在消息框;同上;MB_ICONINFORMATION一个圆圈中小写字母i组成的图标出现在消息框MB_ICONASTERISK一个圆圈中小写字母i组成的图标出现在消息框;同上;MB_ICONQUESTION一个问题标记图标出现在消息框MB_ICONSTOP一个停止消息图标出现在消息框MB_ICONERROR一个停止消息图标出现在消息框;同上;MB_ICONHAND一个停止消息图标出现在消息框;同上;
消息框形态含义MB_APPLMODAL1. 在 hWnd 参数标识的窗口中继续工作以前;用户一定响应消息框 2. 但是;用户可以移动到其他线程的窗口且在这些窗口中工作 3. 根据应用程序中窗口的层次机构;用户则以移动到线程内的其他窗口 4. 所有母消息框的子窗口自动地失效;但是弹出窗口不是这样 5. 如果既没有指定 MB_SYSTEMMODAL 也没有指定 MB_TASKMODAL;则 MB_APPLMODAL 为默认的MB_SYSTEMMODAL1. 除了消息框有 WB_EX_TOPMOST 类型;否则 MB_APPLMODAL 和 MB_SYSTEMMODAL 一样 2. 用系统模态消息框来改变各种各样的用户;主要的损坏错误需要立即注意;例如;内存溢出; 3. 如果不是那些与 hWnd 联系的窗口;此标志对用户对窗口的相互联系没有影响MB_TASKMODAL1. 如果参数 hWnd 为 NULL 的话;那么除了所有属于当前线程高层次的窗口失效外;MB_TASKMODAL 和 MB_APPLMODAL 一样 2. 当调用应用程序或库没有一个可以得到的窗口句柄时;可以使用此标志;但仍需要阻止输入到调用线程的其他窗口;而不是搁置其他线程
其他标志含义MB_DEFAULT_DESKTOP_ONLY1. 接收输入的当前桌面一定是一个默认桌面;否则函数调用失败 2. 默认桌面是一个在用户已经记录且以后应用程序在此上面运行的桌面MB_HELP1. 把一个 Help 按钮增加到消息框 2. 选择 Help 按钮或按 F1 产生一个 Help 事件MB_RIGHT文本为右对齐MB_RTLREADING用在 Hebrew 和 Arabic 系统中从右到左的顺序显示消息和大写文本MB_SETFOREGROUND1. 消息框变为前景窗口 2. 在内部系统为消息个调用 SetForegroundWindow 函数MB_TOPMOST消息框用 WS_EX_TOPMOST 窗口类型来创建 MB_SERVICE_NOTIFICATION

以上的uType都可以用|;位或操作符;来组合多个参数


参数组合

#define MB_OKCANCEL                 0x00000001L
#define MB_ICONHAND                 0x00000010L
#define MB_DEFBUTTON2               0x00000100L
#define MB_SYSTEMMODAL              0x00001000L
#define MB_DEFAULT_DESKTOP_ONLY     0x00020000L

查看定义;可以发现他们每个类型的位都是不一样的;如果想组合MB_OKCANCELMB_ICONHAND

MessageBox(NULL, TEXT(;I am a messagebox;), TEXT(;titile;), MB_OKCANCEL | MB_ICONHAND);

实际情况就是0000000100000010进行位或操作;结果就是00000011


返回值

返回值含义IDOK用户按下了“确认”按钮IDCANCEL用户按下了“取消”按钮IDABORT用户按下了“中止”按钮IDRETRY用户按下了“重试”按钮IDIGNORE用户按下了“忽略”按钮IDYES用户按下了“是”按钮IDNO用户按下了“否”按钮

课后练习

#include <Windows.h>
#pragma comment(lib, ;User32.lib;)

int WINAPI WinMain(HINSTANCE hIsntance, HINSTANCE hPrevIsntance, PSTR szCmdLine, int iCmdShow)
{
  MessageBox(NULL, TEXT(;I am a messagebox;), TEXT(;titile;), MB_OK);
  return 0;
}

修改上面代码;将对话框中的显示文本改为**“是否退出程序”**;对话框上的按钮改为“是”、“否”。之后程序中对MessageBox的返回值进行判断;**按下“是”**则显示新对话框;其上显示文本为“退出窗口”;按钮为“确定”;按下“否”则显示新对话框;其上显示文本为“不退出窗口”;按钮为“确定”。


答案参考

#include <windows.h>
#pragma comment(lib, ;User32.lib;)

int WINAPI WinMain(HINSTANCE hIsntance, HINSTANCE hPrevIsntance, PSTR szCmdLine, int iCmdShow)
{
  int ret = MessageBox(NULL, TEXT(;是否退出程序;), TEXT(;NueXini;), MB_YESNO);
  if (ret == IDYES)
  {
    MessageBox(NULL, TEXT(;退出窗口;), TEXT(;NueXini;), MB_OK);
  }
  if (ret == IDNO)
  {
    MessageBox(NULL, TEXT(;不退出窗口;), TEXT(;NueXini;), MB_OK);
  }

  return 0;
}

课后思考

关于MessageBox;回答以下几个问题;

函数主要做什么事情?函数的返回是怎么样的?函数的各个参数是什么意思?第四个参数如果为MB_OK、MB_OKCANCEL、MB_ICONSTOP;分别表示什么意思?

以上问题都在本文涉及到了;还请耐心看完~


enjoy it~

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。