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



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

我注意到Ctrl+A不能作为选择所有文本的热键。怎么加呢?

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

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

如果你想在编辑控件中添加Ctrl+A处理,你可以通过子类化来实现。

例如,

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

最新更新