【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解

时间:2022-07-28
本文章向大家介绍【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本篇作为Windows API 系列文章的第一篇,将简要的讲解一下什么是Windows API,Windows API能做些什么,并且尽可能讲解一些新出现的专有名词;本系列博文几乎没有难啃的“专业术语”,尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一。

读本系列博文的读者必须具备以下的知识储备:

  • C/C++语言基础语法及了解面向对象概念

以上列出的这一个点是最核心的知识储备,因为本系列博文将会使用C/C++语言编写的程序作为示例演示Windows API 的效果;使用C/C++ 语言编写Windows应用程序我个人认为是最佳的一种方式,在性能和发掘Windows特性上,我个人认为是首选!

在此如果是编程新手,可以听一下这一段建议:当你学习第一门语言后,例如C语言,发现自己并不能做出什么东西,这个时候千万别产生挫败感!并不是你笨,学了C语言就不会做东西,在相同的知识宽度面前大家都一样,这个时候就需要去涉及其它扩展性知识,如果你是想做Windows程序的开发,那么就可能需要了解Windows API,扩宽你的知识宽度,当拥有了能够用做出产品的知识后,你的产品就会水到渠成了!

Windows API是什么?

首先从API开始理解,API全称为 Application Programming Interface ;Application Programming 可译为 应用程序,其中的 interface 为接口的意思。那么中文名即为 应用程序接口。

那么什么是应用程序接口呢?我们举个例子说明一下情况;应用程序接口可以比作为快递的领取,你不需要知道快递从发送到你收到之间发生的过程,你只需要在快递到达的时候去领取即可;此时领取快递的地点就相当于一个接口,你通过这个接口获取你想要的信息或者是资源,这个接口也只会返回信息或者资源,并不会得到额外的东西。这就是一个接口的定义,屏蔽了其中复杂的过程,你是用这个接口,那么就直接获取到相应的信息。

知道了接口的作用,那么Windows API——Windows 应用程序接口就比较容易理解了,Windows是Windows系统,也是一个应用程序,Windows 提供了不同的服务,这些服务通过一些特定的方式进行调用、使用;这些服务可能是 开启一个窗口、打开一个应用程序、通过一个方法设置系统的休眠时间等;这些不同的服务,做成了接口的方式使用,那么Windows API 也就知道是干什么用的了。

知道了Windows API 为调用Windows 服务的接口,那么现在尝试一下使用Windows API 创建几个对话框。 Windows API 可以查看 Windows API 文档;在Windows API 文档中,查找 MessageBox 即可找到 MessageBox 方法的具体使用方法;通过微软官方API文档参数说明得知 MessageBox 的功能简介如下:

“显示一个模式对话框,该对话框包含系统图标,一组按钮以及特定于应用程序的简短消息,例如状态或错误信息。该消息框返回一个整数值,该整数值指示用户单击了哪个按钮。”

从功能简介上得知,对话框可以包含系统图标、特定的短消息、错误消息;消息框返回一个整数值,判断用户点击的按钮,以便于开发者进行下一步操作。

查看语法:

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

参数说明:

hWnd 类型为 HWND (HWND类型为句柄类型,句柄:句柄为你需要操作的对象的指向、或说为指针,它就像一个锅的手柄一样,你通过手柄就可以拿起来这个锅,它的英文为HANDLE;在本节中,我们并不需要指向什么对象,只需要给一个NULL就ok,在此并不会过多解释句柄。)

hWnd 参数的简单说明为:要创建的消息框的所有者窗口的句柄。如果此参数为空,则消息框没有所有者窗口。

通过参数的简单说明,那么我们可以得到信息:消息窗口可以指定一个窗口的所有者,也可以用面向对象的知识点来理解,那就是指定一个对象为父类,父窗口,如果参数为NULL,那么就表示不指定父窗口。

lpText

类型为 LPCTSTR :是一个指向字符串的指针,参考百科说明,还是说的比较好的:LPCTSTR就表示一个指向const对象的指针。

lpText参数的简单说明为:要显示的消息文本,如果字符串由多行组成,则可以在每行之间使用回车和 / 或换行符分隔行。

通过参数的简单说明,那么我们可以得到信息:LPCTSTR 为需要显示的消息文本。

lpCaption 类型:与lpText一致。

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

通过参数的简单说明,那么我们可以得到信息:lpCaption 为需要显示的消息文本。基本使用规则跟 lpText 类似。

uType

类型为:UINT 无符号整型 对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。

其实对于 uType 这个参数信息点可能并不算多,官方在其中有做补充:

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

以上的特定标志组按钮并不是全部,更多请查看微软官方文档 MessageBox说明

在文档中,uType 的参数做出了补充:

通过以上信息,似乎明白了在使用Windows软件中弹出的对话框的图标怎么设置了。

返回值如下 当这个窗口被点击,或者关闭时,将会有一个返回值。 官方解释如下:

如果一个消息框有一个取消按钮,则该函数返回IDCANCEL如果或者ESC键被按下或值取消按钮被选择。如果消息框没有“ 取消”按钮,则按ESC无效。 如果函数失败,则返回值为零。

当函数成功调用,返回如下值:

那么我们现在就写个例子吧,尝试一下一个对话框的生成! 代码如下:

#include <windows.h> 
int main() 
{ 
 	MessageBox (NULL, "Hello, CSDN!2020!", "Hi", MB_ICONSTOP); 
 	return 0 ; 
}

从以上代码中,我们引入了 windows.h 头文件;有些看了文档同学可能知道,在微软文档中,MessageBox 是实现在 winuser.h 头文件中,为什么使用Windows.h 头文件呢?

因为 windows.h 头文件包含了 winuser.h,所以直接使用 winuser.h 就可以了。 在入口函数内,第一行我们指定了父窗体为空NULL,要显示的文字是 “Hello, CSDN!2020!” ,标题是 “Hi”,在组合样式中使用的样式是补充的样式 MB_ICONSTOP,应该为下图示样:

我们编译后运行程序查看效果:

程序按照正确的方式运行了,不过这个叉不是很好,我们换一个 MB_ICONASTERISK:

#include <windows.h> 
int main() 
{ 
 	MessageBox (NULL, "Hello, CSDN!2020!", "Hi", MB_ICONASTERISK); 
 	return 0 ; 
}

结果如下: