在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時,可以對編輯框進行操作;當取消勾選時,則不可以對編輯框進行操作。