我没有运行规范的消息循环,所以有没有办法在我的消息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);
答案 0 :(得分:1)
在某些时候,为了获得排队的消息,您必须调用GetMessage
或PeekMessage
之类的函数。这些函数会产生MSG
个对象,而您必须传递给MSG
和TranslateMessage
的{{1}}个对象。
在问题原始版本的代码中,您试图过早致电DispatchMessage
和TranslateMessage
。你在窗口proc中调用它们。您应该在第一次收到DispatchMessage
对象时调用它们。换句话说,在致电MSG
或TranslateMessage
后直接致电DispatchMessage
和PeekMessage
。