鱼C论坛

 找回密码
 立即注册
查看: 2448|回复: 2

[已解决]消息机制--TranslateMessage函数

[复制链接]
发表于 2019-8-25 14:09:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
while(GetMessage(&msg,NULL,0,0))
{
        TranslateMessage(&msg);
        DispatchMessage(&msg);
}

刚学到消息机制,

为什么要把虚拟键消息转换为字符消息?
TranslateMessage函数不会对msg内容做出修改,
说明接下来要传递给DispatchMessage函数的msg是转换之前的,
下一次循环调用GetMessage时才会得到转换后的字符消息,
那么DispatchMessage怎么处理第一次的虚拟键消息呢

最佳答案
2019-9-22 08:16:52
刚看到,我的理解是这样(忽略细节,很多东西逆向才可以看):
1. GetMessge负责循环接收消息Msg结构体,Msg包含了各类型如控件,窗口各类消息,如高级控件一般WM_COMMAND,按钮响应等
2. TranslateMessage虚拟键消息转换为字符消息,然后被扔到到调用线程的消息队列里,下次循环调用GetMessage或PeekMessage在读取
3. 下一次调用GetMessage函数时敲击键盘上的某个字符键时,将产生WM_KEYDOWN和WM_KEYUP消息,函数TranslateMessage将他俩转换成WM_CHAR。
4. DispatchMessage是将消息给WindowProc函数窗口处理
5. 片面来说:TranslateMessage负责键盘消息转化,DispatchMessage函数负责消息给窗体处理
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 08:16:52 | 显示全部楼层    本楼为最佳答案   
刚看到,我的理解是这样(忽略细节,很多东西逆向才可以看):
1. GetMessge负责循环接收消息Msg结构体,Msg包含了各类型如控件,窗口各类消息,如高级控件一般WM_COMMAND,按钮响应等
2. TranslateMessage虚拟键消息转换为字符消息,然后被扔到到调用线程的消息队列里,下次循环调用GetMessage或PeekMessage在读取
3. 下一次调用GetMessage函数时敲击键盘上的某个字符键时,将产生WM_KEYDOWN和WM_KEYUP消息,函数TranslateMessage将他俩转换成WM_CHAR。
4. DispatchMessage是将消息给WindowProc函数窗口处理
5. 片面来说:TranslateMessage负责键盘消息转化,DispatchMessage函数负责消息给窗体处理
.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-4 10:12:12 | 显示全部楼层
理想小青年 发表于 2019-9-22 08:16
刚看到,我的理解是这样(忽略细节,很多东西逆向才可以看):
1. GetMessge负责循环接收消息Msg结构体,M ...

抱歉刚看到,开学后没再继续学winsdk...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表