我将编辑框控件归类为

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时,将调用此子类化过程。但是当按下回车键时我无法获取它。

在上述过程中这有什么问题吗?

最佳答案

否,系统使用WM_GETDLGCODE来确定控件需要按哪个键。默认情况下,编辑框不处理Return(对话框过程将其解释为按下默认按钮),因此不需要将VK_RETURNS发送到它。您需要处理WM_GETDLGCODE消息并返回DLGC_WANTALLKEYS,然后您将获得VK_RETURNS。

MS文档很好地概述了此子分类方案。

关于c++ - 无法为子类化的编辑框控件捕获VK_RETURN键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1284364/

10-11 18:28