Динамическое создание / уничтожение CComboBox - PullRequest
2 голосов
/ 18 февраля 2009

Мне нужно переключаться между стилями 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);

Но теперь позиция правильная, но шрифт не соответствует шрифту диалога.

1 Ответ

4 голосов
/ 19 февраля 2009

Не будет ли достаточно просто установить шрифт элемента управления в качестве шрифта диалога? То есть сразу после воссоздания элемента управления

m_Combo.SetFont(GetFont());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...