本篇作为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 ;
}
结果如下: