mfc - 动态创建/销毁 CComboBox

标签 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);

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

最佳答案

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

m_Combo.SetFont(GetFont());

关于mfc - 动态创建/销毁 CComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561441/

相关文章:

c++ - CreateCompatibleDC 的奇怪错误

c++ - 隐藏多个 CMFCEditBrowseCtrl 的文件浏览按钮

c++ - exit(0) 是否会在 MFC 中造成任何问题?

javascript - 更改文本框时如何将 Javascript 事件处理程序绑定(bind)到 Ajax Control Toolkit 组合框

来自 MySQL 的 PHP 组合框

java - 如何用 HashMap 键填充组合框?

WPF ComboBox 通过绑定(bind)大型集合而出现性能问题

c++ - 在 CRichEditCtrl 上使用表情符号时内存泄漏

mfc - 使用 CMake 制作包含 MFC 的项目

c# - 如何子类化 WPF ComboBox 以添加额外的按钮