欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Windows开发基础知识

程序员文章站 2022-04-26 22:25:16
...

概述

Windows 开发指的是以Windows API(WinAPI)进行在Windows平台上的开发

参考资料

来自微软官网的关于Windows开发文档

微软针对Windows进行开发的开发相关信息

Windows 开发的代码规范约定

在Windows开发经常会遇到一些隐晦难懂的API以及数据类型,已将常见类型写入表中做对应

Windows的字符集

Windows本地支持Unicode字符串使用在UI节点、文件名称上,因为Unicode字符可以兼容所有文字和语言,Windows使用UTF16做代表,每个UTF16的字符都占16位大小,UTF16也称为宽字符,用于区分ANSI字符,在c++中有w_char类型来支持宽字符,而在头文件WinNT.h同样有定义

typedef wchar_t WCHAR;

在随后很多案例中你可以看到在定义宽字符文字、字符串时在其前面放入L来定义

wchar_t a = L'a';
wchar_t *str = L"hello";

Unicode和ANSI的函数

在Windows API中对于处理字符串等相关函数都会提供Unicode版本和ANSI版本的函数,如下案例一样,通常会以AW结尾,对于ANSI和Unicode

  • SetWindowTextA:使用ANSI字符串
  • SetWindowTextW:使用Unicode字符串

除此之外在内部还会有一个宏定义,这个宏定义可以帮助你根据情况调用对于版本的函数,如下所示

#ifdef UNICODE
#define SetWindowText  SetWindowTextW
#else
#define SetWindowText  SetWindowTextA
#endif

在通常情况下我们都会用Unicode字符串,并且也推荐使用Unicode版本的函数来调用,第一是支持的字符集多。第二是Unicode的效率相对ANSI要高

TCHARs

当应用需要支持Windows各个版本的系统时,根据目标平台为ANSI或Unicode字符串编译相同的代码是很有用的,为此Windows SDK提供了以下宏定义去映射Unicode或ANSI子字符串

宏定义 Unicode ANSI
TCHAR wchar_t char
TEXT(“x”) L"x" “x”

什么是Window

Windows就是通常见到的窗口成的框架,我们称为应用窗口或者主窗口,Window包含非客户区域和客户区域

  • 客户区域:用于与客户交互的区域
  • 非客户区域:由操作系统管理的区域

Window Handlers

Windows Handler代表Window对象的引用,这是一个不透明的数据类型(包含代码和数据),它只是一个数字被操作系统用于引用来操作,你可以将Windows上所有窗口看作为Windows窗口假想表内的数据,而引用正是对窗口的一对一映射

屏幕和窗口坐标系

坐标是通过与设备无关的像素为单位来测量的

Windows开发基础知识

Windows程序入口

在所有Windows程序中都会包含一个方法,如下所示,他的名字是WinMain要么是wWinMain,这里它的签名是wWinMain

// Unicode版本
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
// ANSI版本
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)

这里4个参数分别是:

  • hInstance:称为“实例句柄”或“模块句柄”,当可执行文件(EXE)加载到内存中时,操作系统使用这个值来识别它,某些函数也需要实例句柄作为参数来调用
  • hPrevInstance:没有任何意义。它曾用于16位系统,但现在总是为零
  • pCmdLine:包含命令行参数的Unicode字符串
  • nCmdShow:是一个标志,表示主应用程序窗口是最小化、最大化还是正常显示

这个方法的返回值操作系统不会使用,但是你可以自己使用来返回一些特定意义的状态值给你所写的应用程序