ComboBox自由切换属性DropDown和DropList

余生长醉 提交于 2020-01-16 08:10:43

在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时,可以对编辑框进行操作;当取消勾选时,则不可以对编辑框进行操作。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!