2

我子类化了一个编辑框控件,例如

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);

}

现在,当我在编辑框中输入 char 时,会调用这个子类过程。但是当按下回车键时我无法得到它。

这是不是在上面的过程中有什么问题。

4

1 回答 1

6

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

MS 文档很好地概述了这种子分类场景。

于 2009-08-16T14:53:54.120 回答