2007年5月24日

MDIアプリでアクセラレータが受けられない

コードを張るテストを兼ねて、最近ハマったネタを。
HWND hWndMain, hWndClient; // メインウィンドウとMDIクライアント
MSG msg;
HACCEL hAccelTable;

/* snip */

while( GetMessage(&msg, NULL, 0, 0) ){
  if( TranslateMDISysAccel( hWndClient, &msg ) != FALSE ){
    continue;
  }
  if( TranslateAccelerator( hWndMain, hAccelTable, &msg) == FALSE ){
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  }
}

上述は動くことを確認したコードなんですが、ウィザードが吐くTranslateAcceleratorの第一引数はmsg.hwndです。
msgの内容はGetMessageによって変わるので、msg.hwndがhWndMainである保障はありません。
通常、アクセラレータを受け取るのはメニューを持った親ウィンドウだけなので、つまづかないんですが・・・ハマってしまいましたorz

0 件のコメント: