我需要在运行时在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);但现在,位置是正确的,但字体与对话框字体不匹配。
发布于 2009-02-19 12:42:29
将控件的字体设置为对话框字体不就足够了吗?也就是说,在重新创建控件后立即
m_Combo.SetFont(GetFont());
https://stackoverflow.com/questions/561441
复制相似问题