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

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将消息发到窗口过程。

发布了40 篇原创文章 · 获赞 51 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zh8706/article/details/52270564
今日推荐