在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时,可以对编辑框进行操作;当取消勾选时,则不可以对编辑框进行操作。
来源:CSDN
作者:Hat_man_
链接:https://blog.csdn.net/Hat_man_/article/details/103898693