ComboBox自由切換屬性DropDown和DropList

在ComboBox屬性爲DropDown情況下,自由切換控件可編輯和不可編輯功能。

原理如下:重寫CComboBox,然後新增不可編輯功能即可。方法如下:

1.新增類,CMyComboBox,選擇繼承自CComboBox;

2.在CMyComboBox.cpp,重載ON_WM_CTLCOLOR;

3.在CMyComboBox.h中,增加變量CEdit m_edit ;  bool bDropDown;

4.在重載的OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 添加代碼

HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
    
    // TODO: Change any attributes of the DC here
    if (true==bDropDown)//當需要對編輯框操作是,將其至爲true
    {
        if (m_edit.GetSafeHwnd() == NULL)
            m_edit.SubclassWindow(pWnd->GetSafeHwnd());
        if (nCtlColor == CTLCOLOR_STATIC)
        {
            m_edit.SetReadOnly(FALSE);
        }
        
        return hbr;
    }
    else if (nCtlColor == CTLCOLOR_EDIT)
    {
        if (m_edit.GetSafeHwnd() == NULL)
            m_edit.SubclassWindow(pWnd->GetSafeHwnd());
        m_edit.SetReadOnly();
    }
    else if (nCtlColor == CTLCOLOR_STATIC)
    {
        CBrush m_brush;
        m_brush.CreateSolidBrush(RGB(0,255,255));
        pDC->SetBkColor(RGB(255,255,255));
        return (HBRUSH)m_brush.GetSafeHandle();
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
}

5.使用demo

1)新建MFC對話框工程CMyDemo

2)添加ComboBox控件,並增加成員變量m_MyCom

3)在CMyDemoDlg.h中增加 #include "CMyComboBox.h"

4)將成員變量m_MyCom前的ComboBox更改爲CMyComboBox

5)增加Check box控件IDC_CHECK1

6)雙擊Check box控件,爲其增加響應函數

if (((CButton *)GetDlgItem(IDC_CHECK1))->GetCheck()==1)
    {
        m_MyCom.bDropDown=true;
    }
    else
    {
        m_MyCom.bDropDown=false;
    }

7)當勾選Check box時,可以對編輯框進行操作;當取消勾選時,則不可以對編輯框進行操作。

發佈了25 篇原創文章 · 獲贊 4 · 訪問量 3690
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章