如何将 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);
}
我有一堆对话框是用 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);
}