动态创建/销毁CComboBox

时间:2009-02-18 15:13:58

标签: mfc combobox

我需要在运行时在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);

但所有发生的事情都是组合消失了。我错过了什么?

编辑:

使用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 个答案:

答案 0 :(得分:4)

将控件的字体设置为对话框字体是否足够?也就是说,在重新创建控件后立即

m_Combo.SetFont(GetFont());