【问题标题】:Navigate in Windows Dialog with arrow keys使用箭头键在 Windows 对话框中导航
【发布时间】:2015-07-02 18:20:43
【问题描述】:

我正在使用普通的 Windows API。 我想使用箭头键 VK_UP、VK_DOWN 在对话框的文本框之间导航。 VK_LEFT,VK_RIGHT。 为了获得 WM_CHAR,我对文本框进行了子类化,并且我获得了每个击键,包括退格、删除等,但没有箭头键! 我究竟做错了什么? 感谢您的建议!

    //subclassing
SetWindowSubclass(GetDlgItem(hDlg, IDC_TEXTBOX1),TextBoxProc, IDC_TEXTBOX1,param);

LRESULT CALLBACK
TextBoxProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam,
             UINT_PTR Id, DWORD_PTR param)
{
    switch (msg)
    {
       case WM_CHAR:
            char c= (char)wParam;
etc
}

【问题讨论】:

    标签: windows api dialog arrow-keys


    【解决方案1】:

    应该是WM_KEYDOWN 而不是WM_CHAR

    LRESULT CALLBACK TextBoxProc(
        HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR, DWORD_PTR)
    {
        switch (msg)
        {
        case WM_KEYDOWN:
        {
            if (wParam == VK_DOWN)
            {
                OutputDebugString(L"VK_DOWN\n");
                return TRUE;// or break!
            }
            break;
        }
        default:break;
        }
    
        return DefSubclassProc(hWnd, msg, wParam, lParam);
    }
    

    【讨论】:

    • 我没有收到任何 WM_KEYDOWN。除了箭头键、Tab 和 Enter 之外,我只获得 WM_CHAR 键击。
    • 它适用于上述示例。 WM_CHAR 不给你虚拟键,你需要WM_KEYDOWN。可能发生了什么事TranslateMessage,请发布最低代码。
    • 对不起!真傻!当然它正在工作,我得到 WM_KEYDOWN 箭头键!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多