1、_T宏、UNICODE和ANSI
windows的API大多有两套函数,比如TextOut,系统中实际的函数是TextOutA()和TextOutW()两个函数。若在编译时使用了_UNICODE宏,则用TextoutW()函数,否则为TextOutA()函数。
同样,字符串也有Unicode串和ANSI串之分。
在字符创之前使用宏_T("***"),若编译时使用了_UNICODE宏,则为UNICODE字符串,否则为ANSI字符串。_T即为_TEXT,可见tchar.h。
_T 告诉编辑器:如果定义了_UNICODE,其中的字符串是按UNICODE编码;否则其中的字符串就按ANSI编码。
_T的用法是:_T("字符串")。
2、typedef和define
2者的定义形式为:
#define NEW( OLD)
typedef OLD NEW;
typedef 表达式(NEW); //用NEW代表一个"表达式()"的类型
为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。
注意以下2种形式意义不全相同:
typedef (int*) pINT;
#define pINT2 int*
效果不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;
3、PeekMessage和GetMessage
两个函数主要有以下两个区别:
1.GetMessage将等到有合适的消息时才返回,而PeekMessage只是撇一下消息队列。
2.GetMessage会将消息从队列中删除,而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。
在Windows的内部,GetMessage和PeekMessage执行着相同的代码。而两者最大的不同之处则体现在没有任何消息返回到应用程序的情况下。在此种情况下,PeekMessage会返回一个空值到应用程序,GetMessage会在此时让应用程序休眠。