Мне нужно переключаться между стилями CBS_DROPDOWN и CBS_DROPDOWNLIST во время выполнения. Похоже, что единственный способ сделать это - воссоздать элемент управления.
Итак, у меня есть следующий код:
CRect rect;
m_Combo.GetWindowRect(&rect);
m_Combo.DestroyWindow();
m_Combo.Create(CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE, rect, this, IDC_MYCOMBO);
Но все, что происходит, это исчезновение комбо. Чего мне не хватает?
EDIT:
Использование ModifyStyle
не вариант, поскольку этот стиль нельзя изменить во время выполнения. Элемент управления должен быть воссоздан.
РЕДАКТИРОВАТЬ 2:
Хорошо, я был в координатах экрана, а не в диалоговых координатах.
CRect rect;
m_Combo.GetWindowRect(&rect);
ScreenToClient(&rect); // SUPER IMPORTANT :)
m_Combo.DestroyWindow();
m_Combo.Create(CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE, rect, this, IDC_MYCOMBO);
Но теперь позиция правильная, но шрифт не соответствует шрифту диалога.