怎么让dropdown样式的ComboBox控件达到dropList的效果
如何让dropdown样式的ComboBox控件达到dropList的效果
因为觉得droplist的外观像个按钮太难看,所以选择用dropdown样式。
网上搜索的有个方法是获取组合框编辑子窗口指针,然后调用SetReadOnly。但是这有个后遗症,窗口会变成灰色背景。
要求就是让组合框控件不能编辑,但是又不改变其本来的外观。
------解决方案--------------------
用:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
改变 Edit 的背景颜色,注意 ReadOnly edit 是 CTLCOLOR_STATIC !
代码:
因为觉得droplist的外观像个按钮太难看,所以选择用dropdown样式。
网上搜索的有个方法是获取组合框编辑子窗口指针,然后调用SetReadOnly。但是这有个后遗症,窗口会变成灰色背景。
要求就是让组合框控件不能编辑,但是又不改变其本来的外观。
------解决方案--------------------
用:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
改变 Edit 的背景颜色,注意 ReadOnly edit 是 CTLCOLOR_STATIC !
代码:
- C/C++ code
HBRUSH CDrawEditDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if(((CTLCOLOR_EDIT==nCtlColor) || (CTLCOLOR_STATIC==nCtlColor)) && (*pWnd == m_SelEdit)) {// for ReadOnly edit pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(0xFF);//red return (HBRUSH)m_pbrEd->m_hObject;// } return hbr; }
------解决方案--------------------
重写CComboBox,添加处理WM_CTLCOLOREDIT消息,子类化CComboBox的Edit编辑框控件
http://support.microsoft.com/kb/174667/zh-tw