刚将原来的工程改成由原来的多字节改成Unicode的方式,发现如上图的控件,是VS2010的Combo-box控件,比如我想要将该控件改成绿色,以前我在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)函数里面,
            pDC->SetBkColor(bkColor);
            pDC->SetTextColor(textColor);
这样子应该是可以实现的,但是改成Unicode之后,尝试了很多方式都没成功,改变的只有选择下拉时候部分的颜色,选中之后显示框的颜色并没有改变。请问有人遇到过相似的问题吗,我该怎么操作才可以改变颜色呢。

解决方案 »

  1.   

    这OnPaint里面创建个画笔 
    HPEN hPen,hOldPen; //画笔
    hPen = CreatePen(PS_SOLID, 2, RGB(255,0,0));//生成红色色画笔 画笔宽度5个像素
    hOldPen = (HPEN)SelectObject(hdc, hPen);//把画笔引入设备场境 SelectObject(hdc, hOldPen);
    DeleteObject(hPen);:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    if(pWnd->GetDlgCtrlID() == IDC_控件) //更改按钮颜色
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetBkColor(RGB(0, 0, 0));
    pDC->SetTextColor(RGB(255, 255, 255));
    return m_brush;  //自己创建的画刷
    }
      

  2.   

    “OnPaint里面创建个画笔”是指重绘一个子的combobox控件,然后再该控件下面添加OnPaint函数添加你的代码吗?
      

  3.   

    “OnPaint里面创建个画笔”是指重绘一个子的combobox控件,然后再该控件下面添加OnPaint函数添加你的代码吗?没有成功呢
      

  4.   

    估计是启用了MANIFEST 所以导致系统风格的资源接管了标准的控件风格, 自绘吧
      

  5.   

    子类化,然后自己再重绘HBRUSH CMyComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if (nCtlColor == CTLCOLOR_LISTBOX)
            pDC->SetBkColor(RGB(255, 0, 0));    return CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
    }
      

  6.   

    创建画笔这种占资源的东西,不要在onpaint里反复创建和释放,应该放在
    Oncreate函数里创建。