Windows窗口消息循环中TranslateAcclerator的理解

来源:互联网 发布:骚男的衣服淘宝店 编辑:程序博客网 时间:2024/06/03 17:07

VisualStudio工程中默认的Windows窗口取消息循环的写法如下:

while(GetMessage(&msg, NULL, 0, 0)){if (!TranslateAcclerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispathMessage(&msg); }}




这里TranslateAcclerator执行失败才调用TranslateMessage与DispathMessage,我的理解是TranslateAcclerator在处理加速键时直接将处理后的消息发到窗口过程,如果调用成功(返回非零值),则不需要再调用DispathMessage将消息发到窗口过程。正如百度百科中有写
若TransLateAccelerator返回非零值且消息已被翻译,应用程序就不能调用TranslateMessage函数对消息再做处理”。
因此TranslateAcclerator调用失败,即返回零值则表示没有加速键消息被处理,或处理失败,此时才需要调用TranslateMessage进行消息处理和DispathMessage将消息发到窗口过程。

0 0