学习:MessageBox API

函数功能:

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

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

API 函数原型:

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

int WINAPI MessageBox(
In_opt HWND hWnd,
In_opt LPCTSTR lpText,
In_opt LPCTSTR lpCaption,
In UINT uType
);

具体说明参考:https://fishc.com.cn/forum.php?mod=viewthread&tid=46730&extra=page%3D1%26filter%3Dtypeid%26typeid%3D420

示例代码:

#include<windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
	MessageBox(NULL, TEXT("This is My First MessageBox"), TEXT("Message"), MB_OK);
	return 0;
}

实现1:一个含有"中止","重试"和"跳过"三个按钮在里面的对话框

我们可以在MessageBox的第四个参数utype中发现 MB_ABORTRETRYIGNORE 有"中止","重试"和"跳过"三个按钮在里面,那么我们也可以实现

对于其中MB_OK | MB_ABORTRETRYIGNORE代码中的|的理解:其实都是进行了宏定义

那么|操作就可以理解为或操作,有一则为一

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
	MessageBox(NULL, TEXT("This is My First MessageBox"), TEXT("Message"), MB_OK | MB_ABORTRETRYIGNORE);
	return 0;
}

对于代码中TEXT的理解:其实是为了解决编码的问题,如果一些字符是单字节,而有些字符又是双字节,就会导致不统一,我们进入TEXT的定义中发现

再到__TEXT中发现进行L粘连quote,如果是中文字符的话就会进行UNICODE编码处理

关于UNICODE的知识参考:https://fishc.com.cn/forum.php?mod=viewthread&tid=124473&highlight=Unicode%2B%B5%C4%BD%E2%BE%C8%B7%BD%B0%B8


实现2:只有点击是按钮,才能结束MessageBox

我们通过发现返回值为IDYES的时候才会是点击是的按钮,那么我们实现可以通过if来判断

#include<windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
	int ret;
	while (true) {
		ret = MessageBox(NULL, TEXT("This is My First MessageBox"), TEXT("Message"), MB_YESNO); //利用变量ret来接收返回值
		if (ret == IDYES) {
			break;
		}
	}
	return 0;
}
原文地址:https://www.cnblogs.com/zpchcbd/p/11890182.html