积极答复者
VC++问题 高手能答下吗?

问题
-
初学VC++一天 遇到几个白痴问题, 见笑了。
1.书上说在消息循环中TranslateMessage 是用来进行消息转换的,那么转换前是什么样子,转了又是什么样子,它到底存在有什么意义?
2.DispatchMessage 好像是用来投递消息的 为什么 VC++不自动处理? 自己写有什么好处?
3.VC里面怎么那么多诡异的声明? 比如WinMain前的 WINAPI (去掉一样能运行)
4. WinMain中的 LPSTR 换成 PSTR 为什么依然能运行
5.CreateWindow中 LPWindowName (指向一个指定窗口名的空结束的字符串指针。 ) 既然是指针 为啥一个文本 如(“XX”) 就能赋值?
6.消息循环是死循环,为啥不出现程序卡死?
7.#define 是用来定义常量的吗?
8.VC++里的逻辑(与)是不是可以理解成更形象的(且)
9.UpdateWindow 可有可无 是不是因为 消息循环中有个窗口重画?
10. 本人小学文化,英语很糟糕,MSDN看起很恼火,不过我会努力地, 这里希望 高手能给点建议, 经验什么的。。 暂时就这些, 。!!! GO GO GO
答案
-
1. 这个主要是转换按键消息用的,比如他会把Shift + 'a' -> 转换成WM_CHAR中的字母'A'
2. 你要想自动处理,那么可以用MFC,他已经封装好了
3. 那些声明都是有特殊作用的,具体MSDN上有详细说明
4. LPSTR和PSTR的定义都是 char*
5. 一个文本就是一个常数指针
6. Windows程序本来就是处理消息进行的,消息卡死了程序才会卡死
7. 可以用来定义常量,但并不是专门拿来定义常量
8. 不能,与是一种数学逻辑运算
9. 消息循环中没有固定的,但是当触发某些条件时就会有
0xBAADF00D- 已标记为答案 Nancy Shao 2010年6月23日 6:16
全部回复
-
选择性的回复一些,比如问题3,这是历史遗留问题,微软的工程师想自己定义一套规则,当然部分原因是便于移植,可是依旧很多人不明白,不就是无符号整数么?不就是unsigned int么?为什么非得typedef一个UINT,很多人觉得方便可是很多人觉得实在没有任何必要。
至于问题5,你学过C++吧?比如fun(char *p),那么可以调用fun("abc");么?道理一样
#define的用法,我的建议和C++创始人一样,那就是除了使用#ifdef #define #else之类的外,never使用#define定义一些常量和“函数”宏,比如
#define fun(x) x*x 何必呢?为什么不用inline呢?
bylh -
1. 这个主要是转换按键消息用的,比如他会把Shift + 'a' -> 转换成WM_CHAR中的字母'A'
2. 你要想自动处理,那么可以用MFC,他已经封装好了
3. 那些声明都是有特殊作用的,具体MSDN上有详细说明
4. LPSTR和PSTR的定义都是 char*
5. 一个文本就是一个常数指针
6. Windows程序本来就是处理消息进行的,消息卡死了程序才会卡死
7. 可以用来定义常量,但并不是专门拿来定义常量
8. 不能,与是一种数学逻辑运算
9. 消息循环中没有固定的,但是当触发某些条件时就会有
0xBAADF00D- 已标记为答案 Nancy Shao 2010年6月23日 6:16