MDI应用程序的主要消息循环与非MDI应用程序处理加速键相似。不同之处在于MDI消息循环在检查应用程序定义的加速键之前或在分派消息之前调用TranslateMDISysAccel函数。
以下示例显示了典型MDI应用程序的消息循环。
while(GetMessage(& msg,(HWND)NULL,0,0))
{
if(!TranslateMDISysAccel(hwndMDIClient,& msg)& &
!TranslateAccelerator(hwndFrame,hAccel,& msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
TranslateMDISysAccel功能将WM_KEYDOWN消息转换为WM_SYSCOMMAND消息,并将其发送到活动的MDI子窗口。如果消息不是MDI加速器消息,该函数返回FALSE,在这种情况下,应用程序使用TranslateAccelerator函数来确定是否按下了任何应用程序定义的加速键。如果没有,循环将消息发送到适当的窗口过程。