Windows API中的MessageBox函数 展示一系列不同类型的消息框

本文探讨了如何通过WindowsAPI中的MessageBox函数展示不同类型的模态对话框,包括按钮选择和图标设置。
摘要由CSDN通过智能技术生成

 

这段代码是使用Windows API中的MessageBox函数来展示一系列不同类型的消息框。MessageBox函数是一个标准的Windows消息框显示函数,它创建一个模态对话框,用于显示文本、标题以及一组按钮。

代码中的每个MessageBox函数调用都会显示一个具有不同标志(flags)的消息框。这些标志决定了消息框的样式、按钮类型、图标等。

#include <windows.h> // 引入Windows API头文件

int main()
{
    // 下面的每一行都会显示一个具有不同标志的消息框
    MessageBox(NULL, "sa", "da", MB_ABORTRETRYIGNORE);  // 包含Abort, Retry, Ignore按钮的消息框
    MessageBox(NULL, "sa", "da", MB_ABORTRETRYIGNORE);  // 同上(重复调用)
    MessageBox(NULL, "sa", "da", MB_APPLMODAL);         // 应用程序模态消息框
    MessageBox(NULL, "sa", "da", MB_CANCELTRYCONTINUE); // 包含Cancel, Try Again, Continue按钮的消息框
    MessageBox(NULL, "sa", "da", MB_DEFAULT_DESKTOP_ONLY); // 仅默认桌面显示消息框
    MessageBox(NULL, "sa", "da", MB_DEFBUTTON1);       // 默认第一个按钮为焦点
    MessageBox(NULL, "sa", "da", MB_DEFBUTTON2);       // 默认第二个按钮为焦点
    MessageBox(NULL, "sa", "da", MB_DEFBUTTON3);       // 默认第三个按钮为焦点
    MessageBox(NULL, "sa", "da", MB_DEFBUTTON4);       // 默认第四个按钮为焦点
    MessageBox(NULL, "sa", "da", MB_DEFMASK);          // 定义默认按钮掩码
    MessageBox(NULL, "sa", "da", MB_HELP);             // 添加帮助按钮
    MessageBox(NULL, "sa", "da", MB_ICONASTERISK);     // 使用星号图标
    MessageBox(NULL, "sa", "da", MB_ICONERROR);        // 使用错误图标
    MessageBox(NULL, "sa", "da", MB_ICONEXCLAMATION);  // 使用感叹号图标
    MessageBox(NULL, "sa", "da", MB_ICONHAND);         // 使用手形图标
    MessageBox(NULL, "sa", "da", MB_ICONINFORMATION);  // 使用信息图标
    MessageBox(NULL, "sa", "da", MB_ICONMASK);         // 定义图标掩码
    MessageBox(NULL, "sa", "da", MB_ICONQUESTION);     // 使用问号图标
    MessageBox(NULL, "sa", "da", MB_ICONSTOP);         // 使用停止图标
    MessageBox(NULL, "sa", "da", MB_ICONWARNING);      // 使用警告图标
    MessageBox(NULL, "sa", "da", MB_MISCMASK);         // 定义杂项掩码
    MessageBox(NULL, "sa", "da", MB_MODEMASK);         // 定义模式掩码
    MessageBox(NULL, "sa", "da", MB_NOFOCUS);          // 消息框不获取焦点
    MessageBox(NULL, "sa", "da", MB_OK);               // 只包含OK按钮的消息框
    MessageBox(NULL, "sa", "da", MB_OKCANCEL);         // 包含OK和Cancel按钮的消息框
    MessageBox(NULL, "sa", "da", MB_RETRYCANCEL);      // 包含Retry和Cancel按钮的消息框
    MessageBox(NULL, "sa", "da", MB_RIGHT);            // 文本右对齐
    MessageBox(NULL, "sa", "da", MB_RTLREADING);       // 从右到左阅读顺序(仅适用于某些语言)
    MessageBox(NULL, "sa", "da", MB_SERVICE_NOTIFICATION); // 服务通知消息框
    MessageBox(NULL, "sa", "da", MB_SERVICE_NOTIFICATION_NT3X); // NT 3.x风格的服务通知消息框
    MessageBox(NULL, "sa", "da", MB_SETFOREGROUND);    // 设置消息框到前景
    MessageBox(NULL, "sa", "da", MB_SYSTEMMODAL);      // 系统模态消息框
    MessageBox(NULL, "sa", "da", MB_TASKMODAL);        // 任务模态消息框
    MessageBox(NULL, "sa", "da", MB_TOPMOST);          // 消息框置顶
    MessageBox(NULL, "sa", "da", MB_TYPEMASK);         // 定义类型掩码
    MessageBox(NULL, "sa", "da", MB_USERICON);         // 使用用户定义的图标
return 0:
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的实现思路: 1. 定义一个全局变量来记录当前弹窗的页数。 ``` int page = 1; ``` 2. 创建一个自定义的窗口类,用于显示弹窗内容。在窗口添加一个按钮,用于触发下一页的更新操作。 ``` class MyPopup { public: MyPopup() { hWnd = CreateWindow(className, "My Popup", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, this); ShowWindow(hWnd, SW_SHOW); } void Show() { MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } private: HWND hWnd; static const char* className; void OnPaint() { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); char buffer[256]; sprintf_s(buffer, "Page %d", page); TextOut(hdc, 20, 20, buffer, strlen(buffer)); EndPaint(hWnd, &ps); } void OnCommand(WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case IDOK: page++; InvalidateRect(hWnd, NULL, TRUE); break; case IDCANCEL: DestroyWindow(hWnd); break; } } static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MyPopup* pPopup; if (message == WM_NCCREATE) { pPopup = static_cast<MyPopup*>(reinterpret_cast<CREATESTRUCT*>(lParam)->lpCreateParams); SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pPopup)); pPopup->hWnd = hWnd; return DefWindowProc(hWnd, message, wParam, lParam); } else { pPopup = reinterpret_cast<MyPopup*>(GetWindowLongPtr(hWnd, GWLP_USERDATA)); } switch (message) { case WM_PAINT: pPopup->OnPaint(); break; case WM_COMMAND: pPopup->OnCommand(wParam, lParam); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } }; const char* MyPopup::className = "MyPopupClass"; ``` 3. 在程序调用自定义的弹窗函数,创建自定义窗口并显示。 ``` void MyMessageBox() { MyPopup popup; popup.Show(); } ``` 4. 重载MessageBox函数,调用自定义的弹窗函数。 ``` int MyMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) { int ret = MessageBox(hWnd, lpText, lpCaption, uType | MB_USERICON); if (ret == IDOK) { MyMessageBox(); } return ret; } ``` 在上述代码,我们使用了Windows API来创建自定义窗口,并在其添加了一个按钮用于触发下一页的更新操作。在按钮被点击时,我们将page变量加1,并调用InvalidateRect函数来刷新窗口内容。然后,我们重载了MessageBox函数,并在其调用自定义的弹窗函数来显示自定义的弹窗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天若有情673

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值