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);
但现在,位置是正确的,但字体与对话框字体不匹配。