Одним из решений, позволяющих предотвратить выделение всего текста, является использование подкласса поля со списком и установка фокуса на его элемент управления для редактирования, когда левая кнопка мыши нажимает на него в первый раз. Код, как показано ниже:
Процедура подкласса:
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);
}