我即将用下拉类型组合框替换标准的编辑控件。基本上,这个组合框就像编辑控件一样。
到目前为止,一切都很好,但有一个显著的区别:
这描述了单击组合框或编辑控件时所发生的情况,在这些控件中,红色箭头指向的位置都没有焦点:

是否有办法使组合框的行为像编辑控件?
发布于 2020-03-19 06:41:50
防止选择整个文本的解决方案之一是通过子类a组合框并在鼠标第一次单击鼠标左键时将焦点设置到它的编辑控件上。守则如下:
子类过程:
LRESULT CALLBACK EditSubClassProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
UINT_PTR uIdSubclass,
DWORD_PTR dwRefData
)
{
switch (uMsg)
{
case WM_DESTROY:
{
RemoveWindowSubclass(hWnd, EditSubClassProc, 0);
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
case WM_LBUTTONDOWN:
{
if (GetFocus() != hWnd)
{
SetFocus(hWnd);
}
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
default:
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
}找到组合框的编辑控件窗口并安装子类回调:
// Get the edit window handle to combo box.
HWND comboEditHdl = NULL;
COMBOBOXINFO info = { 0 };
info.cbSize = sizeof(COMBOBOXINFO);
if (!GetComboBoxInfo(hwndCombo1, &info))
return 0;
comboEditHdl = info.hwndItem;
if (comboEditHdl)
{
SetWindowSubclass(comboEditHdl, EditSubClassProc, 0, NULL);
}https://stackoverflow.com/questions/60389510
复制相似问题