无法为子类编辑框控件捕获VK_RETURN键

时间:2009-08-16 14:00:45

标签: c++ winapi subclass

我将类似

的编辑框控件子类化
lpfnOldWndProc = (FARPROC)SetWindowLong(hEdit,GWL_WNDPROC, (DWORD)SubClassFunc);




LRESULT FAR PASCAL SubClassFunc(   HWND hWnd,
                                UINT Message,
                                WPARAM wParam,
                                LPARAM lParam)
{

    switch(Message)
    {

    case WM_CHAR:
        //Process this message to avoid message beeps.
        if ((wParam == VK_RETURN) || (wParam == VK_TAB))
        {
            //Do Something
            return 0;
        }

        break;
    case WM_KEYDOWN:
        if ((wParam == VK_RETURN) || (wParam == VK_TAB)) {
            //Do Something
            return 0;
        }

        break ;

    default:
        break;
    }

    return CallWindowProc((WNDPROC)lpfnOldWndProc, hWnd, Message, wParam, lParam);

}

现在,当我在editbox中输入char时,将调用此子类程序。但是当按下回车键时我无法得到它。

上述程序是否有问题。

1 个答案:

答案 0 :(得分:6)

不,系统使用WM_GETDLGCODE来确定控件感兴趣的按键。默认情况下,编辑框不处理Return(对话框程序将其解释为按下默认按钮),因此不需要VK_RETURNS发送给它。你需要处理WM_GETDLGCODE消息并返回DLGC_WANTALLKEYS然后你应该得到你的VK_RETURNS。

MS文档非常清楚地概述了这种子分类方案。