首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建/销毁CComboBox

动态创建/销毁CComboBox
EN

Stack Overflow用户
提问于 2009-02-18 15:13:58
回答 1查看 3.6K关注 0票数 2

我需要在运行时在CBS_DROPDOWN和CBS_DROPDOWNLIST样式之间切换。看起来唯一的方法就是重新创建控件。

所以我有以下代码:

代码语言:javascript
复制
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:

好的,我是在屏幕坐标中而不是对话框坐标中。

代码语言:javascript
复制
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);

但现在,位置是正确的,但字体与对话框字体不匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-19 12:42:29

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

m_Combo.SetFont(GetFont());

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/561441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档