_In_opt_ LPCTSTR lpCaption

时间:2022-03-18 07:55:21

  自学《Windows措施设计》(第五版 珍藏版),内容为学习条记。

1 根本

  Windows是抢占式、多任务、多线程图形操纵系统。Windows具有一个图形用户界面(Graphical User Interface, GUI),有时亦称为“虚界面”或“图形界面”。所有的GUI都用位图(bitmap)视频显示器显示图形。图形能够提高屏幕资源的操作率,供给一个以视觉通报信息的便当环境,并可使用 WYSIWYG(所见即所得)来显示为打印文件而筹备的图形及格局化文本。

  Windows环境中运行的措施可以共享存储在所谓动态链接库(Dynamic-Link Libraries, DLL)文件中的例程。Windows供给了在运行时把措施和动态链接库中的例程链接起来的机制。其实Windows自己根基上就是一套动态链接措施库。

  Windows是一个图形界面,Windows措施可以在视频显示器或打印机上丰裕操作图形和格局化文本。图形界面不只仅看上去更酷、更引人注目,而且能够在更高条理上与用户交流信息。

  针对Windows环境编写的措施用不着直接访谒屏幕或打印机之类的图形显示硬件。Windows本身带有一种图形编程语言,称作图形设备接口(Graphical Device Interface, GDI),用来便利地显示图形和格局化文本。Windows把显示硬件虚拟化。这样只要配有合适的Windows设备驱动措施,针对Windows环境编写的措施就可以在任何显卡或打印机上运行。应用措施自己并不需要知道系统到底配备了什么类型的设备。

  Windows事情道理的中心思想就是“动态链接”观点。Windows自身带有一大套函数,应用措施就是通过挪用这些函数来实现它的用户界面和在屏幕上显示文本与图形的。这些函数都是在动态链接库里实现的。这些文件的名称都带有后缀.DLL,,或有时带有后缀.EXE。Win10系统中,这些文件凡是放在C:\Windows\System32子目录下。

  在Windows措施中,挪用Windows函数与挪用C语言的库函数(如Strlen),没什么两样。最主要的区别就是C语言库函数的机器代码会直接链接到你的措施代码中,而Windows函数则是放在你的措施之外的DLL里。

  当Windows措施运行时,它通过一个叫做“动态连接”(dynamic linking)的进程与Windows接口。每个Windows的EXE文件包罗它所要用的各个动态链接库以及库中的函数的引用地点(reference)。当一个Windows措施被装入内存之后,措施中的函数挪用都被解析成DLL函数入口的指针,同时这些被挪用的函数也被装入内存。

  当链接Windows措施以生成执行文件时,必然得链接你的编程环境所供给的特殊的“导入库”(import library)。这些导入库包罗所有Windows函数挪用要碰到的动态链接库的名字及引用信息。链接措施操作这些信息构建EXE文件中的表格,当装入措施的时候,Windows要靠这些表格来解析Windows函数挪用。

2 配置Visual Studio 2017

  让Visual Studio 2017带上Windows API文档,即获取MSDN,具体参考

3 第一个Windows措施

/*---------------------------------------------------------- HelloMsg.C -- Displays "Hello, Win10!" in a message box ----------------------------------------------------------*/ #include<Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox(NULL, TEXT("Hello, Win10!"), TEXT("HelloMsg"), 0); return 0; }

3.1 头文件

  WINDOWS.H是一个最重要的包罗文件,它囊括了若干其他Windows文件,此中的某些头文件又包罗此外一些头文件。下列几个是最要也是最根基的头文件:

WINDEF.H 根基数据类型界说

WINNT.H 撑持Unicode的类型界说

WINBASE.H 内核函数

WINUSER.H 用户界面函数

WINGDI.H 图形设备接口函数

3.2 措施入口

  正像main是C措施的入口一样,Windows措施的入口是WinMain。将光标移到WinMain处,按F1打开辅佐。

  WinMain entry point--The user-provided entry point for a graphical Windows-based application.

  看看语法:

int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );

  CALLBACK宏和WINAPI素质都是一样的,在WINDEF.H中界说如下:

#define CALLBACK __stdcall #define WINAPI __stdcall

  这是一种函数挪用约定,表白如何生成在仓库中安排函数挪用参数的机器代码。绝大大都Windows函数挪用都界说成WINAPI。

  _In_宏报告我们这是个输入参数,同时还有_Out_,暗示输出参数。这对宏并不参预编译和计算(空宏),但对API使用者起到提示感化。

  参数类型的界说细节先不要细究,感兴趣可以Alt+F12浏览。