鸵鸟1号 发表于 2014-10-6 10:32:55

初学Windows程序设计的一些困惑



先看了一点win32汇编(罗云斌的琢石成器),感觉也算是懂了,可是转过头看Windows程序第五版这本经典的书,里面的一些东西接受不了。
首先就是主函数的那四个参数了,我是这样理解的不知道对不对,"由编译器对这四个参数进行赋值,我这样理解的话,第一个和第二个参数我就可以自圆其说了,最后一个参数iCmdShow在ShowWindow的第二个参数直接就这样写我也勉强可以理解(这样的话编译器对iCmdShow的初始化应该就是默认是正常显示了吧)"可是主函数的第三个参数szCmdLine我还是不知道它具体是怎么在哪用的,琢石成器这本书里也没有提到过啊(希望高手可以详细讲一下,书上讲的我也看了好多遍了)。

另外还有一个是消息机制的问题,在Windows程序设计第五版这本书里,对GetMessage的讲解是该调用将一个指向名称为msg的MSG结构变量的指针传给Windows。Windows用从消息队列中得到的下一条消息来填充消息结构的各个字段。
这样我理解的话是GetMessage这个函数在一次循环中做了两件事,向中转站一样,这样消息并没有经过TranslateMessage的翻译啊,(难道是上面的一句传给Windows不是让Windows调用回调函数)



在琢石成器这本书里我是这样理解的,Windows调用回调函数所用的消息应该是经过TranslateMessage翻译之后的消息

感觉这两本书对消息这一块讲解的不一样,而我更倾向于我理解的琢石成器里的讲解

不知道我的理解出了多少问题,求高手解答,我现在等级太低没办法悬赏互助,不是我小气哈

漩涡鸣人 发表于 2014-10-6 11:55:33

本帖最后由 漩涡鸣人 于 2014-10-6 12:16 编辑

一:szCmdLine就是命令行参数哦,用cmd启动程序的时候,参数就会放在这里面,这是为了兼容命令行启动程序
二:GetMessage只是取得消息队列的源消息而已(有可能已经经过翻译也有可能没有),可以确定消息循环有没有终止。
TranslateMessage的功能是把虚拟键消息进行转换(如果消息未被转换过,转换之后重新发回被接收;如果已被转换过,就返回非零值,不进行转换),一个未被转换的消息一般会经过两次TranslateMessage,该函数不修改参数中的结构体变量
接着才是对消息的分发,也就是发给窗口过程回调函数

yzsqz001 发表于 2014-10-30 22:21:11

{:1_1:}

大个的糖果 发表于 2014-11-1 05:37:53

页: [1]
查看完整版本: 初学Windows程序设计的一些困惑