如何在WS_CHILD中获取WM_KEYDOWN的virtkey值?

时间:2009-12-03 19:15:53

标签: c winapi

我想知道当子窗口(如“编辑”或“按钮”)具有焦点时按下虚拟键的值。
怎么做?

3 个答案:

答案 0 :(得分:1)

一种方法是使用

WNDPROC g_OldProc;

LRESULT CALLBACK MyEditWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    if ( uMsg == WM_KEYDOWN )
    {
         // Handle key down.
    }
    return g_OldProc( hwnd, uMsg, wParam, lParam );
}

然后在某个合适的时刻

g_OldProc = (WNDPROC)GetWindowLongPtr( hEdit, GWLP_WNDPROC );
SetWindowLongPtr( hEdit, GWLP_WNDPROC, (LONG_PTR)MyEditWindowProc );

这将用您自己的窗口过程替换hEdit控件的窗口过程,而窗口过程又调用原始窗口过程。

答案 1 :(得分:0)

您可以在消息循环级别捕获它们(在调用DispatchMessage之前)。讨厌,但会工作。

答案 2 :(得分:0)

您可以在GetKeyState处理程序中使用WM_SETFOCUS Win32 API。