本实例定义了几个常用常量的 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 数据类型
   
- 
     Tips1: 句柄。句柄是Win应用程序中十分重要的一个概念,在
 
 前一章
 
 中有清楚的说明。
- 
     Tips2:关于UNICODE与ANSI的恩怨情仇,请点击
 
 这里
 
| 类型 | 描述 | 
|---|---|
| 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的函数调用方式 | 
    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”表示指向数据结构的指针。
 
