我想在静态控件上填充颜色和控制字体颜色,以下的m_Text是我定义的静态控件的对象
         CDC *pDC=m_Text.GetDC(); CRect rc;
m_Text.GetClientRect(&rc);
//AfxMessageBox("哈哈");    //问题在这里,我不加这个语句,程序执行后不显示我想要的效果,就是说控件区域和字体颜色都没有改变,但是我加了这条语句后,在这个弹出框上点击确定后就显示了控件区域和字体颜色的改变!
CBrush br;
br.CreateSolidBrush(RGB(155,155,155));
pDC->FillRect(&rc,&br); pDC->SetBkColor(RGB(155,155,155));
pDC->SetTextColor(RGB(255,0,0));
pDC->DrawText("大家好!",&rc,NULL);
m_Text.ReleaseDC(pDC);为什么呢?望高手帮忙解答!

解决方案 »

  1.   

    没有刷新重新刷新,加个m_Text.Invalidate()试试
      

  2.   

    不是,我在onpaint()这个函数里写的以上语句!
      

  3.   

    代码写在onpaint中 
    或者
    派生cstatic类中处理
      

  4.   

    onpaint的话 就不要在定义CDC *pDC了
    直接用它提供的CPaintDC dc(this);来画好了
    另外,想在静态控件上填充颜色和控制字体颜色 也可通过响应WM_CTLCOLOR消息来处理
      

  5.   

    强烈建议在 WM_CTLCOLOR 实现。
      

  6.   

    同意在WM_CTLCOLOR 实现。
      

  7.   

    恩~
    一般设置控件的颜色可以使用WM_CTLCOLOR来实现。
    例如:
    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if (nCtlColor == CTLCOLOR_EDIT) {
            pDC->SetBkColor(RGB(255, 255, 0));  // yellow
            return m_hYellowBrush;
        }
        if (nCtlColor == CTLCOLOR_DLG) {
            pDC->SetBkColor(RGB(255, 0, 0));    // red
            return m_hRedBrush;
        }
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
    这个是对对话框里面的控件进行背景颜色的设置。