2009-02-18 173 views
2

我需要在運行時在CBS_DROPDOWN和CBS_DROPDOWNLIST樣式之間切換。看起來唯一的方法是重新創建控件。動態創建/銷燬CComboBox

所以我有以下代碼:

CRect rect; 
m_Combo.GetWindowRect(&rect); 
m_Combo.DestroyWindow(); 
m_Combo.Create(CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE, rect, this, IDC_MYCOMBO); 

但所發生的一切是組合中消失。我錯過了什麼?

編輯:

使用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); 

但現在,位置是正確的,但字體與對話框字體不匹配。

回答

3

將控件字體設置爲對話框字體不就足夠了嗎?也就是說,在重新創建後立即控制

m_Combo.SetFont(GetFont());