我可以在消息回调中调用TranslateMessage吗?

时间:2013-03-28 19:52:33

标签: winapi visual-c++ message-queue

我没有运行规范的消息循环,所以有没有办法在我的消息proc处理程序中调用TranslateMessage(或它的等价物)?

基本上我需要WM_CHAR消息,除非我可以调用TranslateMessage,否则我不会得到那些消息。目前我有消息proc设置,但没有消息循环。

// 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
}

我的消息proc处理程序是消息的第一个输入点,按以下方式设置:

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

1 个答案:

答案 0 :(得分:1)

在某些时候,为了获得排队的消息,您必须调用GetMessagePeekMessage之类的函数。这些函数会产生MSG个对象,而您必须传递给MSGTranslateMessage的{​​{1}}个对象。

在问题原始版本的代码中,您试图过早致电DispatchMessageTranslateMessage。你在窗口proc中调用它们。您应该在第一次收到DispatchMessage对象时调用它们。换句话说,在致电MSGTranslateMessage后直接致电DispatchMessagePeekMessage