二:常用 Windows 数据类型(DWORD/LPSTR/CHAR/INT/HWND)

  • Post author:
  • Post category:其他


本实例定义了几个常用常量的 Windows 数据类型,包括 DWORD,LPSTR ,CHAR和HWND,并演示

了如何使用它们进行了复制、比较大小等操作。

#include<Windows.h>
#include<stdio.h>

int WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow){

    //定义字符串
    LPSTR szString = "我要学习";
    //字符数组
    CHAR lpString[120];
    //DWORD类型数据
    DWORD dwMax = 0xFFFFFFFF;
    DWORD dwOne = 0x1;
    //INT类型数据
    INT iMax = 0xFFFFFFFF;
    INT iOne = 0x1;
    //显示字符串
    MessageBoxA(NULL, szString, "LPSTR", MB_OK);

    //将字符串复制到数组中
    CopyMemory(lpString, szString, lstrlen(szString) + 1);
    MessageBox(NULL, lpString, "CHAR[]", MB_OK);

    //比较DWORD
    if (dwMax > dwOne){
        MessageBox(NULL, "dwMax大于dwOne", "DWORD", MB_OK);
    }
    if (iMax < iOne){
        MessageBox(NULL, "iMax小于iOne", "INT", MB_OK);
    }
    return 0;
}

在这个程序中,使用了 4 种 Windows 数据类型,分别是 LPSTR、CHAR、DWORD 和 INT。

LPSTR 类型的数据是字符串,也就是字符指针,CHAR 是字符,DWORD 是 32 位的无符号

整数,INT 是 32 位有符号整数。

程序运行后会弹出 4 个对话框。 这说明








d




w


M




a


x


>


d




w


O


n


e











是成立的。








i


M




a


x


<


i


O


n


e











也是成立的。dwMax 与 iMax 的数值是一样的,dwOne 与 iOne 的数值也是一样的。但是比较结果不同,是因为二者的数据类型不一样。

Windows API 函数、数据结构等都是采用 Windows 数据类型。比如 Windows API 函数的入口参数、返回值等都是 Windows 数据类型。因此学习 Windows API 程序设计必须要了解Windows 数据类型。

事实上,这些 Windows 数据类型都是从标准 C 的数据类型经过类型重定义而来。比如,INT的定义如

typedef int INT

,DWORD的定义如:

typedef unsigned long DWORD

,CHAR的定义如:

typedef char CHAR

。看到这里,有C语言基础的朋友就或许能明白为什么dwMax 与 iMax 的数值是一样的,dwOne 与 iOne 的数值也是一样的了。因为这里iMax实际的值是不是

0xFFFFFFFF

而是-1。而DWORD因为是长整型,所以没问题。

最常见的 Windows 数据类型

类型 描述
BOOL 布尔型变量
BYTE 字节类型(8位)
CHAR 8比特字节(ANSI)
CONST 常量,相当于const
DWORD 32字节无符号整型数据
DWORD32 32字节无符号整型数据
DWORD64 64字节无符号整型数据
HANDLE 对象句柄,最基本的句柄类型
HINSTANCE 程序实例句柄
HICON 图标的句柄
HWND 窗口句柄
LPCSTR Windows(ANSI)字符串常量
LPCTSTR UNICODE字符串常量,定义了UNICODE宏
LPCWSTR UNICODE字符串常量,未定义宏
LPSTR Windows(ANSI)字符串变量
LPWSTR UNICODE字符串变量
WINAPI Windows API的函数调用方式
Tips1: 句柄。句柄是Win应用程序中十分重要的一个概念,在

前一章

中有清楚的说明。
Tips2:关于UNICODE与ANSI的恩怨情仇,请点击

这里

Windows 数据类型名命名的规律

Windows 数据类型的命名都很有规律。基本数据类型包括 BYTE、CHAR、WORD、SHORT、DOWRD、INT 等。指针类型的命令方式一般是在其指向的数据类型前加“LP”或“P”,比如指向 DWORD的指针类型为“LPDWORD”和“PDWORD”。

各种句柄类型的命令方式一般都是在对象名前加“H”

。Windows 系统中有很多对象,所有表示一个对象的数据类型都是句柄,每一种对象都对应着一种句柄类型,比如与位图 ( BITMAP)对应的句柄类型为“HBITMAP”, 与菜单(MENU)对应的句柄类型为“HMENU”,与窗口(WINDOW)对应的句柄类型为“HWND” 无符号类型一般是以“U”开头,比如“INT”是符号类型,“UINT”是无符号类型, “LONG”是符号类型“ULONG”是无符号类型等。

Windows数据类型与标准C数据类型的关系

查看 Windows 数据类型的定义可以看到, 所有的 Windows 数据类型都是由 C 数据类型经过类型重定义得到的。如 DWORD 实质上就是 unsigned long 数据类型,32 位的无符号整型。而在 Windows 程序设计中经常用到的 HANDLE 类型实质上是无类型指针 void。所有的 Windows 数据类型都是通过这种方式在 SDK 的头文件中进行定义的, 它们都是来源于标准 C 的数据类型。实际上 VC 编译器是一个完整的 C 编译器,此外并没有过多的扩展。

Windows 数据类型也不是 VC 的内建类型,而是从标准 C 类型重定义得到

Windows数据类型与Windows API


Windows API 函数的参数、返回值或一些重要的常量使用的数据类型都是 Windows 数据类型

。MessageBox 函数的返回值是 int 型的,是标准 C 数据类型,但是所有的参数都使用了Windows 数据类型。如 HWND 是一种 Windows 数据类型,用于表示窗口的句柄;LPCTSTR 也是Windows 数据类型,表示字符串常量;UINT 也是 Windows 数据类型,为无符号整型。

Windows中的数据结构

Windows 中包含很多种数据结构类型,在不同类型的 API 中会使用到不同的数据结构,数据结构的数量众多,这些数据结构通常会作为一些 API 的参数输入。Windows API 中的数据结构定义具有一定的特点,一般情况下,Windows 系统中使用全大写来命名结构体、共用体,并使用“_”来分隔单词,在结构名加“LP”或“P”表示指向数据结构的指针。



版权声明:本文为baidu_17313961原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。