2009-02-18 7 views
2

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.

Répondre

3

Ne suffira-t-il pas de définir la police du contrôle sur la police de dialogue? C'est-à-dire, immédiatement après avoir recréé le contrôle

m_Combo.SetFont(GetFont());