代码之家  ›  专栏  ›  技术社区  ›  Nick

动态创建/销毁CComboBox

  •  2
  • Nick  · 技术社区  · 17 年前

    我需要在运行时在CBS_下拉列表和CBS_下拉列表样式之间切换。看起来唯一的方法是重新创建控件。

    因此,我有以下代码:

    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 回复  |  直到 17 年前
        1
  •  4
  •   DavidK    17 年前

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

    m_Combo.SetFont(GetFont());

    推荐文章