《MFC初探》之变量类型

来源:互联网 发布:广电网络三合一机顶盒 编辑:程序博客网 时间:2024/06/07 06:47

刚接触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”;//不会报错*/
0 0
原创粉丝点击