Je dois basculer entre les styles CBS_DROPDOWN et CBS_DROPDOWNLIST lors de l'exécution. Il semble que la seule façon de le faire est de recréer le contrôle.Création/destruction dynamiques CComboBox
J'ai le code suivant:
CRect rect;
m_Combo.GetWindowRect(&rect);
m_Combo.DestroyWindow();
m_Combo.Create(CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE, rect, this, IDC_MYCOMBO);
Mais tout ce qui arrive est le combo disparaît. Qu'est-ce que je rate?
EDIT:
L'utilisation ModifyStyle
n'est pas une option parce que ce style ne peut pas être modifié lors de l'exécution. Le contrôle doit être recréé.
EDIT 2:
Ok, donc j'étais en coordonnées écran au lieu de coordonnées de dialogue.
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);
Mais maintenant, la position est correcte mais la police ne correspond pas à la police de la boîte de dialogue.