Win32 APIWin32 API入门


备注

WinAPI(也称为Win32;官方称为Microsoft Windows API)是Microsoft用C编写的应用程序编程接口,允许访问Windows功能。 WinAPI的主要组件是:

  • WinBase:内核函数,CreateFile,CreateProcess等
  • WinUser:GUI函数,CreateWindow,RegisterClass等
  • WinGDI:图形函数,Ellipse,SelectObject等
  • 常用控件:标准控件,列表视图,滑块等

也可以看看:

版本

API的版本与操作系统版本相关联。 MSDN文档指定API中每个函数支持的最低操作系统。

你好,世界

Microsoft Windows应用程序通常编写为控制台应用程序或窗口化应用程序(还有其他类型,如服务和插件)。程序员的不同之处在于程序员提供的应用程序源的主入口点的界面不同。

当C或C ++应用程序启动时, 可执行加载程序使用的可执行入口点是编译器提供的运行时。可执行加载程序读入可执行文件,对所需的映像执行任何修复,然后调用可执行入口点,对于C或C ++程序,该入口点是编译器提供的运行时。

加载程序调用的可执行入口点不是应用程序员提供的主入口点,而是编译器和创建可执行文件的链接器提供的运行时。运行时为应用程序设置环境,然后调用程序员提供的主入口点。

Windows控制台应用程序可能具有几个略微不同的接口,用于程序员提供的主入口点。它们之间的区别在于主入口点是传统的int main (int argc, char *argv[]) 还是它是Windows特定版本的int _tmain(int argc, _TCHAR* argv[]) ,它提供了广泛的应用程序参数中的字符。如果使用Visual Studio生成Windows Win32控制台应用程序项目,则生成的源将是Windows特定版本。

Windows窗口(GUI)应用程序具有用于程序员提供的主入口点的不同接口。程序员提供的这个主要入口点具有更复杂的界面,因为Runtime设置了GUI环境并提供了附加信息以及应用程序参数。

此示例说明Windows窗口(GUI)主入口点界面。要探索此主题,您应该:

  • 带编译器的IDE(最好是Visual Studio)
  • C知识

使用IDE创建一个空的Win32窗口(GUI,而不是控制台)项目。必须为窗口应用程序(而不是控制台应用程序)设置项目设置,以便链接器与正确的运行时链接。创建一个main.c 文件,将其添加到项目中,然后键入以下代码:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    return MessageBox(NULL, "hello, world", "caption", 0);
}
 

这是我们的Win32“Hello,world”计划。第一步是包含Windows头文件。所有Windows的主标题是windows.h ,但还有其他的。

WinMain 与用于控制台应用程序的标准int main() 不同。接口中使用了更多参数,更重要的是,窗口应用程序的主要入口点使用与标准C / C ++不同的调用约定。

限定符APIENTRY 指示调用约定,它是在堆栈上推送参数的顺序 。默认情况下,调用约定是__cdecl 指示的标准C约定。但是,Microsoft使用不同类型的调用约定,即PASCAL约定,用于由__stdcall 限定符指示的Windows API函数。 APIENTRYwindows.h 包含的一个头文件中__stdcall 的已定义名称(另请参阅什么是__stdcall? )。

WinMain 的下一个参数如下:

我们还没有使用任何这些论点。

WinMain() 内部是对MessageBox() 的调用,它显示一个带有消息的简单对话框,一个消息框。第一个参数是所有者窗口的句柄。由于我们还没有自己的窗口,因此传递NULL 。第二个参数是正文。第三个参数是标题,第四个参数包含标志。传递0时,将显示默认消息框。下图剖析了消息框对话框。

在此处输入图像描述

好的链接:

仅限32位系统。其他架构具有不同的调用约定。