在Unity(C#)中快速调用Win32风格的MessageBox

2021/02/24 Unity 共 1156 字,约 4 分钟

在程序中,有时需要对用户的操作进行二次确认,或进行警告和提示。在本篇中,记录了一种比较简单的方案。


参考文献

Win32API之MessageBox

介绍

MessageBox 是Windows系统库 user32.dll 的一个导出函数,用于显示一个提示消息对话框,其原型定义如下 :

int MessageBox(

HWND hWnd, // handle to owner window

LPCTSTR lpText, // text in message box

LPCTSTR lpCaption, // message box title

UINT uType // message box style

);

该函数有四个参数,第一个是消息框所有者窗口句柄,可以是NULL,第二个是消息框的文本内容,第三个是消息框标题,第四个参数是消息框样式(按钮和图标)。

CWnd类对MessageBox进行了封装,对其第一个参数传递了CWnd类的成员变量 m_hWnd,因此,调用CWnd类的成员函数MessageBox时,不能使用第一个参数,并且,最后两个参数也有默认值。

消息框样式根据输入数字的不同,对应关系如下:

0、确定按钮; _MB_OK=@0x0

1、确定、取消按钮; _MB_OKCANCEL=@0x1

2、终止、重试、忽略按钮;_MB_ABORTRETRYIGNORE=@0x2

3、是、否、取消按钮;_MB_YESNOCANCEL=@0x3

4、是、否按钮;_MB_YESNO=@0x4

5、重试取消钮;_MB_RETRYCANCEL=@0x5

6、终止、重试、继续 0x00000006(需声明API才能使用)

函数返回值也是int,对应关系如下:

1=确定钮; IDOK

2=取消钮; IDCANCEL

3=终止钮; IDABORT

4=重试钮; IDRETRY

5=忽略钮;IDIGNORE

6=是钮;IDYES

7=否钮;IDNO

实战

新建Messagebox.cs

using System;
using System.Runtime.InteropServices;

public class Messagebox
{
    [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern int MessageBox(IntPtr handle, String message, String title, int type);
}

调用示例

Messagebox.MessageBox(IntPtr.Zero, "内容", "标题",  0);

或类似

if(Messagebox.MessageBox(IntPtr.Zero, "内容", "标题",  1) == 2)//按了取消
{
	return;
}
// do sth
温馨提示:如果显示NETWORK ERROR,请使用https://keenster.cn方式打开本站

Search

    Table of Contents