专栏首页编程Windows数据类型

Windows数据类型

Windows使用或定了很多新的数据类型,前面几节中我们已经领略到了。它们虽然多,但是都有规律可循,很多都是对C/C++中数据类型的简单加工,而且很容易“见名知意”。要想学习Windows编程,必须要了解常用的数据类型。

如果你对C语言或者C++的数据类型比较熟悉的话,那么对于一些基础的内容这个过程就是慢慢熟悉的过程。

这些数据类型在windows.h头文件中定义:

typedefintINT;/* 整形 */

typedefunsignedintUINT;/* 无符号整形 */

typedefunsignedint*PUINT;/* 无符号整形指针 */

typedefintBOOL;/* 布尔类型 */

typedefunsignedcharBYTE;/* 字节 */

typedefunsignedshortWORD;/* WORD (无符号短整型) */

typedefunsignedlongDWORD;/* DOUBLE WORD (无符号长整形)*/

typedeffloatFLOAT;/* 浮点型 */

typedefFLOAT*PFLOAT;/* 指向float类型指针 */

typedefBOOLnear*PBOOL;/* 指向布尔类型指针 */

typedefBOOLfar*LPBOOL;

typedefBYTEnear*PBYTE;/* 指向字节类型指针 */

typedefBYTEfar*LPBYTE;

typedefintnear*PINT;/* 整形指针 */

typedefintfar*LPINT;

typedefWORDnear*PWORD;/* 指向WORD类型的指针 */

typedefWORDfar*LPWORD;

typedeflongfar*LPLONG;/* 指向长整形的指针 */

typedefDWORDnear*PDWORD;/* 指向DWORD类型的指针 */

typedefDWORDfar*LPDWORD;

typedefvoidfar*LPVOID;/* 指向void类型的指针 */

typedefCONSTvoidfar*LPCVOID;/* 指向void类型的常指针 */

简单说下,大部分类型都没有什么离奇的地方,可能很多读者会对那个 far 和 near 觉得有疑问,实际上 F12 查看定义会发现他们就定义上方:

#definefar

#definenear

看到这里你是否还是有疑问?其实,这个 far 和 near 只是用来标识变量的新旧的(预处理阶段 far 和 near 会被替换成空字符串)。 例如PINT和LPINT实际上都是int *,只不过一个是老式写法,一个是新式写法,这都是为了兼容问题。

简单的看下这些数据类型,就可以总结出:但凡是以 “P” 开头的都是指针(pointer)类型("LP"是老式写法)。撇开这些不谈,那么实际上这些 Windows API 常用的一些数据结构跟我们原本所学的 C/C++ 变量差别就是一个typedef而已,基础好的熟悉一下就行了。不过,也不要想得这么简单,Windows 编程还有一些比较复杂的类型比如 HWND、HANDLE 等。

在碰到不熟悉的类型时请熟练的使用 “右键转到定义” 或者 F12。大家不用太过害怕这些复杂的类型名称,Windows 数据类型并不是内建的数据类型类型,而都是从C类型重定义得到的。

Windows 数据类型名命名的规律

无符号类型:一般是以“U”开头,比如“INT”对应的“UINT”。

指针类型:其指向的数据类型前加“LP”或“P”,比如指向 DWORD 的指针类型为“LPDWORD”和“PDWORD”。

句柄类型:以“H”开头。比如,HWND 是window(WND简写)也就是窗口的句柄,菜单(MENU)类型对应的句柄类型为 “HMENU” 等等。

本文来自企鹅号 - C编程软件开发学习媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++ 动态捕获整型数列

    假设有这样一个要求,输入两列数字,第一行是数组中数字的个数,第二行数数组中的数字,中间以空格隔开,我们可以写出这样的一段代码: int num; ...

    chaibubble
  • Python3 一些与C++不一样的运算符

    Python逻辑运算符 逻辑“与”运算符 and 逻辑表达式 a and b 如果变量a,b中有一个是Flase,那么a and b为Flase ...

    chaibubble
  • C/C++ 预处理器

    预处理是在 程序编译之前进行的一步操作。 翻译程序 这个操作是 预处理之前 的操作,在 预处理 之前,编译器会对源代码会进行一些翻译操作: 将源代码中出现的字符...

    ke1th
  • C++ 类的继承与派生

    继承性是面向对象程序设计最重要的特性之一,使软件有了可重用性,C++提供的类的继承机制。 继承与派生的概念 一个新类从已有的类那里获得已有的特性,这种现象称为类...

    chaibubble
  • c++临时变量

    C++临时变量 “有时候,在求表达式的期间,编译器必须创建临时变量(temporary object)。像其它任何对象一样,它们需要存储空间,并且必须能够构造和...

    ke1th
  • C++ 构造函数总结

    C++提供了构造函数来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,构造函数不需要用户来调用它,而是建立对象时自动执行。 构造函数的名...

    chaibubble
  • C++ 指针常量与常量指针

    吐槽一下: 指针常量与常量指针的翻译就好比机器学习中Regularization翻译成正则化一样,讲真,正则化这个说法确实要比规则化显得高端些,但是到了理解...

    chaibubble
  • c++复杂声明

    void (*funcPtr)(); 上面声明了一个指向函数的指针,当碰到这样一个比较复杂的声明时,最好的方法是从 中间开始和向外扩展: 从中间开始:即 从变量...

    ke1th
  • C++ 静态数据成员与静态成员函数

    在类中的数据成员或成员函数定义或声明前以static关键词开头,即构成静态数据成员与静态成员函数。 静态数据成员 1.静态数据成员的实现 class Time ...

    chaibubble
  • C++ 一个例子说明.c_str()函数

    先举个例子说明一下: atoi()是C语言中的字符串转换成整型数的一个函数,在例子的代码里面会用到,其函数原型为: int atoi(const char *n...

    chaibubble

扫码关注云+社区

领取腾讯云代金券