0

正規のメッセージ ループを実行していないので、メッセージ プロシージャ ハンドラ内で TranslateMessage (または同等のもの) を呼び出す方法はありますか?

基本的にWM_CHARメッセージが必要で、TranslateMessage を呼び出せない限り、それらを取得することはできません。現在、メッセージ プロシージャはセットアップされていますが、メッセージ ループはありません。

// Static window function called by Windows for message processing. Implementation 
// delegates message processing to MemberWndProc.
LRESULT CALLBACK FxPlayerTiny::WindowsMsgStatic(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{

      msg = PeekMessage(&msg, HWnd, WM_KEYFIRST, WM_KEYLAST, PM_NOREMOVE);

      if (msg type is key down){

            TranslateMessage(&msg);
            //DispatchMessage(&msg); -- needed?

      }
      else process msg normally
}

私のメッセージ プロシージャ ハンドラは、メッセージのエントリの最初のポイントであり、次の方法でセットアップされます。

WNDCLASSEX  wc;
wc.lpfnWndProc    = WindowsMsgStatic;
....
RegisterClassEx(&wc);
4

1 に答える 1

1

ある時点で、キューに入れられたメッセージを取得するには、GetMessageまたはのような関数を呼び出す必要がありますPeekMessage。これらの関数MSGはオブジェクトを生成し、これらのMSGオブジェクトを および に渡す必要がTranslateMessageありDispatchMessageます。

TranslateMessage質問の元のバージョンのコードでは、電話をかけようとしていてDispatchMessage遅すぎます。ウィンドウプロシージャ内でそれらを呼び出します。オブジェクトを最初に受け取った時点で呼び出す必要がありMSGます。つまり、orの呼び出しの直後にTranslateMessageand を呼び出します。DispatchMessagePeekMessageGetMessage

于 2013-03-28T20:08:42.190 に答える