Winapi 将透明边框设置为CmboBox控件

Winapi 将透明边框设置为CmboBox控件,winapi,mfc,window,win32gui,Winapi,Mfc,Window,Win32gui,我正在尝试设置cmbobox控件的透明边框。 对于其他控件,如CEdit,可以使用控件属性执行此操作,但我无法找到cmbobox的任何解决方案。我希望结果如图所示 我找到了一段代码,希望它能帮助您: // YourComboBox.h : header file class CYourComboBox : public CComboBox { public: CEdit m_edit; CListBox m_listbox; protected: afx_

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


我找到了一段代码,希望它能帮助您:

// 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_编辑;CListBox m_listbox;它是对应于编辑和
cmbobox
列表的变量成员。同意,您可以按照自己的意愿简单地修改它,例如,在您的情况下不需要
m_listbox
;我在这里面临着某种崩溃。