dronemodel 发表于 2019-8-25 14:09:55

消息机制--TranslateMessage函数

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函数负责消息给窗体处理
{:10_245:}.

dronemodel 发表于 2019-12-4 10:12:12

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

抱歉刚看到,开学后没再继续学winsdk...
页: [1]
查看完整版本: 消息机制--TranslateMessage函数