如何将 Control-A 作为热键添加到对话框中的所有 EDITTEXT 控件?

How do I add Control-A as a Hotkey to all EDITTEXT controls in a dialog box?

我有一堆对话框是用 DialogBox() 从资源文件中的定义创建的。对话框有一堆用 EDITTEXT 语句(和其他一些语句)创建的控件。

我注意到 Ctrl+A 不能用作选择所有文本的热键。如何添加?

"Select All" 出现在弹出的上下文菜单中,如果用鼠标选择则可以正常工作。

编辑控件本身不支持 Ctrl+A(即使它们的上下文菜单中有此命令)。

如果您想将 Ctrl+A 处理添加到编辑控件,您可以通过 sub-classing 来完成。

例如,

LRESULT CALLBACK CtrlASubProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
    if (uMsg == WM_DESTROY)
        RemoveWindowSubclass(hWnd, CtrlASubProc, uIdSubclass);
    else if (uMsg == WM_GETDLGCODE && wParam == 'A')
    {
        if (GetKeyState(VK_CONTROL) < 0)
            return DLGC_WANTALLKEYS | DLGC_WANTMESSAGE;
    }
    else if (uMsg == WM_CHAR && wParam == 1) // ctrl-A
    {
        SendMessage(hWnd, EM_SETSEL, 0, -1);
        return 0;
    }
    return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}


void AddCtrlAHandlingToEditControl(HWND hwndEdit)
{
    SetWindowSubclass(hwndEdit, CtrlASubProc, 0, 0);
}