何问起C++教程 - Windows编程 - Win32编程
C++使用Windows API弹出对话框
接下来使用Visual Studio 2022来创建Windows桌面应用。新建项目时选择的类型为:Windows桌面向导。如下图:

到后面,应用程序类型 选择桌面应用程序.exe
其他选项勾选“空项目”:

然后右键点击项目,在弹出菜单选择“添加”-“新建项”,在弹出对话框中选择C++文件(.cpp)
文件名称可修改为hovertree.cpp(或者HovertreeMsgBox.cpp),如下图:

新建完成后,复制以下代码并粘贴,保存和运行。
#include <Windows.h>			//头文件


//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{

//弹出一个消息提示框,变量 n 用来接受用户的选择
int n = MessageBox(NULL, L"欢迎光临何问起", L"温馨提示", MB_YESNOCANCEL | MB_ICONEXCLAMATION);

if (n == IDYES) //用户选择“是”
{
MessageBox(NULL, L"你点了“是”", L"Hovertree提示", MB_OK);
}
else if (n == IDNO) //用户选择“否”
{
MessageBox(NULL, L"你点了“否”", L"Hovertree提示", MB_OK);
}
else if (n == IDCANCEL) //用户选择“取消”
{
MessageBox(NULL, L"你点了“取消”", L"Hovertree提示", MB_OK);
}

return 0;
}
运行效果如下图:

MessageBox 函数 (winuser.h)
显示一个模式对话框,其中包含系统图标、一组按钮和一条简短的应用程序特定消息,例如状态或错误信息。 消息框返回一个整数值,该值指示用户单击的按钮。
语法:
int MessageBox(
[in, optional] HWND hWnd,
[in, optional] LPCTSTR lpText,
[in, optional] LPCTSTR lpCaption,
[in] UINT uType
);

参数

[in, optional] hWnd

类型:HWND

要创建的消息框的所有者窗口的句柄。 如果此参数为 NULL,则消息框没有所有者窗口。

[in, optional] lpText

类型: LPCTSTR

要显示的消息。 如果字符串包含多个行,则可以使用回车符和/或换行符分隔每行之间的行。

[in, optional] lpCaption

类型: LPCTSTR

对话框标题。 如果此参数为 NULL,则默认标题为 Error。

[in] uType

类型: UINT

对话框的内容和行为。 此参数可以是以下标志组中的标志的组合。

若要指示消息框中显示的按钮,请指定以下值之一。
Value 含义

MB_ABORTRETRYIGNORE
0x00000002L

消息框包含三个推送按钮: 中止、 重试和 忽略。

MB_CANCELTRYCONTINUE
0x00000006L

消息框包含三个按下按钮: “取消”、“ 重试”、“ 继续”。 使用此消息框类型,而不是MB_ABORTRETRYIGNORE。

MB_HELP
0x00004000L

向消息框添加 “帮助 ”按钮。 当用户单击 “帮助 ”按钮或按 F1 时,系统会向所有者发送 WM_HELP 消息。

MB_OK
0x00000000L

消息框包含一个按钮: 确定。 这是默认值。

MB_OKCANCEL
0x00000001L

消息框包含两个推送按钮: “确定 ”和 “取消”。

MB_RETRYCANCEL
0x00000005L

消息框包含两个按下按钮: 重试 和 取消。

MB_YESNO
0x00000004L

消息框包含两个按下按钮: 是 和 否。

MB_YESNOCANCEL
0x00000003L

消息框包含三个按钮: 是、 否和 取消。


若要在消息框中显示图标,请指定以下值之一。
Value 含义

MB_ICONEXCLAMATION
0x00000030L

消息框中会显示一个感叹号图标。

MB_ICONWARNING
0x00000030L

消息框中会显示一个感叹号图标。

MB_ICONINFORMATION
0x00000040L

图标由圆圈中的小写字母 i 组成,显示在消息框中。

MB_ICONASTERISK
0x00000040L

图标由圆圈中的小写字母 i 组成,显示在消息框中。

MB_ICONQUESTION
0x00000020L

消息框中会显示一个问号图标。 不再建议使用问号消息图标,因为这种图标无法清楚地表示特定类型的消息,并且作为问题的消息表述可应用于任何消息类型。 此外,用户可能会将问号消息符号与帮助信息混淆。 因此,不要在消息框中使用问号消息符号。 系统继续支持它包含的内容,只为满足反向兼容性。

MB_ICONSTOP
0x00000010L

消息框中会显示一个停止符号图标。

MB_ICONERROR
0x00000010L

消息框中会显示一个停止符号图标。

MB_ICONHAND
0x00000010L

消息框中会显示一个停止符号图标。


若要指示默认按钮,请指定以下值之一。
Value 含义

MB_DEFBUTTON1
0x00000000L

第一个按钮是默认按钮。

除非指定了MB_DEFBUTTON2、MB_DEFBUTTON3或MB_DEFBUTTON4,否则MB_DEFBUTTON1是默认值。

MB_DEFBUTTON2
0x00000100L

第二个按钮是默认按钮。

MB_DEFBUTTON3
0x00000200L

第三个按钮是默认按钮。

MB_DEFBUTTON4
0x00000300L

第四个按钮是默认按钮。


若要指示对话框的形式,请指定以下值之一。
Value 含义

MB_APPLMODAL
0x00000000L

在 hWnd 参数标识的窗口中继续工作之前,用户必须响应消息框。 但是,用户可以移动到其他线程的窗口,并在这些窗口中工作。

根据应用程序中的窗口层次结构,用户可能能够移动到线程中的其他窗口。 消息框父级的所有子窗口都将自动禁用,但弹出窗口不是。

如果未指定MB_SYSTEMMODAL或MB_TASKMODAL,则MB_APPLMODAL为默认值。

MB_SYSTEMMODAL
0x00001000L

与MB_APPLMODAL相同,消息框具有 WS_EX_TOPMOST 样式。 使用系统模式消息框通知用户严重、潜在的破坏性错误,例如, (立即引起注意,) 内存不足。 此标志不会影响用户与 与 hWnd 关联的窗口以外的窗口交互的能力。

MB_TASKMODAL
0x00002000L

与 MB_APPLMODAL 相同,如果 hWnd 参数为 NULL,则禁用属于当前线程的所有顶级窗口。 当调用应用程序或库没有可用的窗口句柄时,请使用此标志,但仍需要防止输入到调用线程中的其他窗口,而不会挂起其他线程。


若要指定其他选项,请使用以下一个或多个值。
Value 含义

MB_DEFAULT_DESKTOP_ONLY
0x00020000L

与交互式窗口工作站的桌面相同。 有关详细信息,请参阅 窗口工作站。

如果当前输入桌面不是默认桌面,则在用户切换到默认桌面之前, MessageBox 不会返回。

MB_RIGHT
0x00080000L

文本是右对齐的。

MB_RTLREADING
0x00100000L

在希伯来语和阿拉伯语系统上使用从右到左阅读顺序显示消息和标题文本。

MB_SETFOREGROUND
0x00010000L

消息框将成为前台窗口。 在内部,系统调用消息框的 SetForegroundWindow 函数。

MB_TOPMOST
0x00040000L

消息框是使用 WS_EX_TOPMOST 窗口样式创建的。

MB_SERVICE_NOTIFICATION
0x00200000L

调用方是通知用户某个事件的服务。 该函数在当前活动桌面上显示一个消息框,即使没有用户登录到计算机也是如此。

终端服务: 如果调用线程具有模拟令牌,该函数会将消息框定向到模拟令牌中指定的会话。

如果设置了此标志, 则 hWnd 参数必须为 NULL。 这样,消息框可以出现在桌面上,而不是与 hWnd 对应的桌面。

有关使用此标志的安全注意事项的信息,请参阅 Interactive Services。 具体而言,请注意,此标志可以在锁定的桌面上生成交互式内容,因此应仅用于一组非常有限的方案,例如资源耗尽。
返回值

类型: int

如果消息框有 “取消 ”按钮,则函数返回 IDCANCEL 值(如果按下 ESC 键或选中 “取消 ”按钮)。 如果消息框没有 “取消 ”按钮,则按 ESC 将不起作用 -除非存在MB_OK按钮。 如果显示MB_OK按钮,并且用户按 ESC,则返回值为 IDOK。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

如果函数成功,则返回值为以下菜单项值之一。
返回代码/值 说明

IDABORT
3

已选择 “中止 ”按钮。

IDCANCEL
2

已选择“ 取消 ”按钮。

IDCONTINUE
11

已选择 “继续 ”按钮。

IDIGNORE
5

已选择 “忽略 ”按钮。

IDNO
7

已选择 “无 ”按钮。

IDOK
1

已选择 “确定 ”按钮。

IDRETRY
4

已选择 “重试 ”按钮。

IDTRYAGAIN
10

已选择 “重试 ”按钮。

IDYES
6

已选择 “是 ”按钮。
收藏 列表

评论: