《MFC初探》之变量类型

刚接触MFC编程就出现了让我头大的一件事—-这些变量我咋都不认识。若你也有这种感觉,那这篇博客将会给你一些启发~

  1. 在MFC中定义的基本变量

    1. 首先,所有的变量都被从小写定义成了大写。如:
        typedef int                     BOOL;//TRUE FALSE
        typedef unsigned char           BYTE;
        typedef float                   FLOAT;
        typedef int                     INT;
        typedef char                    CHAR;
        typedef short                   SHORT;
        typedef long                    LONG;
        typedef CHAR* PCHAR,  LPSTR; //可写的字符指针变量
        #ifndef VOID
        #define VOID void

    还有字的定义:

        typedef unsigned long       DWORD;//双字
        typedef unsigned short      WORD;//单字
    1. 所有的无符号变量都加上U来区分。如:
        typedef unsigned int        UINT;
    1. 所有的指针类型变量都加上P来区分。如:
        typedef FLOAT               *PFLOAT;
        typedef BOOL near           *PBOOL;
        typedef BOOL far            *LPBOOL;
        typedef BYTE near           *PBYTE;
        typedef BYTE far            *LPBYTE;
        typedef int near            *PINT;
        typedef int far             *LPINT;
        typedef WORD near           *PWORD;
        typedef WORD far            *LPWORD;
        typedef long far            *LPLONG;
        typedef DWORD near          *PDWORD;
        typedef DWORD far           *LPDWORD;
        typedef void far            *LPVOID;
        typedef CONST void far      *LPCVOID;
    //near和far是c语言相对古老的的用法,用于声明变量在内存中的远近(以前16位的dos操作系统,最大有64K的内存,紧缺的很~)。
    1. 所有的常量指针都使用C。如:
        typedef CONST void*         LPCVOID;
        typedef CONST CHAR *LPCSTR, *PCSTR;//只读的字符指针变量
    1. 结构体类型。主要有三个POINT、SIZE、RECT

          typedef struct tagPOINT
          {
              LONG  x;
              LONG  y;
          } POINT, *PPOINT, *LPPOINT;//结构体别名
      
      
          typedef struct tagSIZE
          {
              LONG        cx;
              LONG        cy;
          } SIZE, *PSIZE, *LPSIZE;
      
          typedef struct tagRECT
          {
              LONG    left;
              LONG    top;
              LONG    right;
              LONG    bottom;
          } RECT, *PRECT, *LPRECT;
      <p>
      3. 最神奇的**句柄类型**。
      句柄是一种故意隐藏了内容的结构体指针。看一下HWND的声明:
      </p> … DECLARE_HANDLE (HWND); … #define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name <p>
      
          可以看到HWND就是结构体的指针,而结构体的内容是unused,(拒绝使用~)。
      
          - HWND   窗口句柄
          - HINSTANCE  进程实例句柄
          - HCURSOR  光标句柄
          - HICON  图标句柄
          - HMENU  菜单句柄
          - HFONT  字体句柄
          - HFILE  文件句柄
          -
      4. 最复杂的**字符串指针类型**
              首先,谈精简版的历史。很早以前,各国文字都有自己的编码方式,而且每个国家字符的字节也不一样(多字节字符)。后来,拥有了统一的编码方式,统一了编码--Unicode。
      
          vs中创建项目时,默认是Unicode编码的。可以使用**wchar_t**来声明Unicode编码的字符串,而且字符串声明时在前面加上**L**。**TCHAR**是一个怪胎,他是char和wchar_t的自适应版。
      </p> const char * p = “aaa”; //内存中,每个a占有一个字节 const char * pc = “中国”;//内存中,每个汉字占有两个字节 const wchar_t * pU = L”aa”;//内存中,每个a占有两个字节 const wchar_t * pcU = L”中国”;//内存中,每个汉字占有一个字节 const TCHAR * s = L”aa”;//这个TCHAR声明时,必须声明成Unicode编码的串 /* //修改vs的编码方式为’多字节字符集’后 const TCHAR *s =L”aa”;//这就会报错,因为这时候TCHAR是char类型 const TCHAR *s =”aa”;//不会报错 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值