如何让dropdown样式的ComboBox控件达到dropList的效果 因为觉得droplist的外观像个按钮太难看,所以选择用dropdown样式。网上搜索的有个方法是获取组合框编辑子窗口指针,然后调用SetReadOnly。但是这有个后遗症,窗口会变成灰色背景。要求就是让组合框控件不能编辑,但是又不改变其本来的外观。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/zhoujielunzhimi/article/details/7903986这是我写的自绘ComboBox的代码(WTL环境)。你可以在OnPaint中贴图。 用:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)改变 Edit 的背景颜色,注意 ReadOnly edit 是 CTLCOLOR_STATIC !代码: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;} 本帖最后由 VisualEleven 于 2012-10-20 12:33:34 编辑 综合了LS两位的提示,终于解决。HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_EDIT) { if (m_edit.GetSafeHwnd() == NULL) m_edit.SubclassWindow(pWnd->GetSafeHwnd()); m_edit.SetReadOnly(); } else if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkColor(RGB(255,255,255)); return (HBRUSH)m_brush.GetSafeHandle(); } return hbr;} 转动的问题。求解。大虾请进。算法。急。求大神帮忙。要不死定了。 散分:项目暂时告一段落,老板发劳务费了 visual C++2008 vista 64位对windows api /sdk有影响吗?对MFC呢? 刚开始学习MFC,不知道看什么书好。。。望高手指点,最好能有电子版的下载地址~~~ 关于线程的一个问题,急啊!!!! dll高手和api高手请进! 高手,请进来看看这个问题>>>>>>>>>>>>>>>>>>>>>>>>>2 关于mfc数据保存按钮 调查一下使用VC++的程序员有多少 关于使用全局变量extern的问题,快要崩溃了!请各位师兄师姐们多多指点啊! CFrameWnd//的OnCreate函数里代码什么意思?
这是我写的自绘ComboBox的代码(WTL环境)。
你可以在OnPaint中贴图。
改变 Edit 的背景颜色,注意 ReadOnly edit 是 CTLCOLOR_STATIC !
代码:
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;
}
HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_EDIT)
{ if (m_edit.GetSafeHwnd() == NULL)
m_edit.SubclassWindow(pWnd->GetSafeHwnd());
m_edit.SetReadOnly();
}
else if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkColor(RGB(255,255,255));
return (HBRUSH)m_brush.GetSafeHandle();
}
return hbr;
}