【问题标题】:set transparent border to CComboBox control为 CComboBox 控件设置透明边框
【发布时间】:2021-07-11 04:32:54
【问题描述】:

我正在尝试设置CComboBox 控件的透明边框。 对于像CEdit 这样的其他控件,可以使用控件属性来执行此操作,但我无法为CComboBox 找到任何解决方案。我想要如图所示的结果。

【问题讨论】:

标签: winapi mfc window win32gui


【解决方案1】:

我找到了一小段代码,希望对你有帮助:

// YourComboBox.h : header file
class CYourComboBox : public CComboBox
{
public:
    CEdit      m_edit;
    CListBox   m_listbox;

protected:
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    afx_msg void OnDestroy();
    ...
};

// YourComboBox.cpp : implementation file
HBRUSH CYourComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if (nCtlColor == CTLCOLOR_EDIT)
    {
        //Edit control
        if (m_edit.GetSafeHwnd() == NULL)
            m_edit.SubclassWindow(pWnd->GetSafeHwnd());
    }
    if (nCtlColor == CTLCOLOR_LISTBOX)
    {
        //ListBox control
        if (m_listbox.GetSafeHwnd() == NULL)
            m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
    }

    RemoveEditBorder();

    HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
    return hbr;
}

void CYourComboBox::OnDestroy()
{
    if (m_edit.GetSafeHwnd() != NULL)
        m_edit.UnsubclassWindow();
    if (m_listbox.GetSafeHwnd() != NULL)
        m_listbox.UnsubclassWindow();

    CComboBox::OnDestroy();
}

void CYourComboBox::RemoveEditBorder()
{
    m_edit.ModifyStyle(WS_BORDER, 0);
}

【讨论】:

  • 以下字段的用途是什么? CEdit m_edit; CListBox m_listbox;
  • 是变量成员,对应编辑和CComboBox列表。同意,你可以随心所欲,例如,你不需要m_listbox
  • 对不起,这可行,但它有一些崩溃
  • 哪里崩溃了?
  • 你有任何调试信息吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2012-01-24
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多