因为觉得droplist的外观像个按钮太难看,所以选择用dropdown样式。
网上搜索的有个方法是获取组合框编辑子窗口指针,然后调用SetReadOnly。但是这有个后遗症,窗口会变成灰色背景。要求就是让组合框控件不能编辑,但是又不改变其本来的外观。

解决方案 »

  1.   

    http://blog.csdn.net/zhoujielunzhimi/article/details/7903986
    这是我写的自绘ComboBox的代码(WTL环境)。
    你可以在OnPaint中贴图。
      

  2.   

    用: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;
    }
      

  3.   

    本帖最后由 VisualEleven 于 2012-10-20 12:33:34 编辑
      

  4.   

    综合了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;
    }