使用CStatic动态生成的静态控件,怎么更改颜色啊。我想要文字底色和对话框背景色一样(背景色已经被我改了,响应OnPaint自己画的)。

解决方案 »

  1.   

    从CStatic派生一个新类,并响应WM_DRAWITEM消息,在里面绘制CStatic的底色
      

  2.   

    派生子类在onpaint()
    setbkcolor
      

  3.   

    如果你的的对话框 不是用图片作背景的话,我看还是把,静态框话为透明比较好。头文件  CBrush m_HollowBrush;初始化
      VERIFY(m_HollowBrush.CreateStockObject(HOLLOW_BRUSH));HBRUSH CMYDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    /* switch(nCtlColor) 
    {
    case CTLCOLOR_STATIC:
    TCHAR lpszClassName[255];
    GetClassName(pWnd->m_hWnd, lpszClassName, 255);
    if(_tcscmp(lpszClassName, TRACKBAR_CLASS) == 0)
    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    pDC->SetBkMode(TRANSPARENT);
    return HBRUSH(m_HollowBrush);
    default:
         break;
    }*/
    return hbr;
    }如果 要改文字颜色的话,好像只有自画了如果你已经自画了静态框 
    只要在我想你应该是用 CDC:: pDC->TextOut 这样的函数写的吧,只要写的时候设置
    一下 pDC->SetBkMode(0);就可以使文字背景和静态框背影一一样了
      

  4.   

    派生一个新类,在ONPANIT()里,调用FillRect就可以了!
      

  5.   

    不明白,VERIFY(m_HollowBrush.CreateStockObject(HOLLOW_BRUSH));什么作用啊?
    OnCtlControl响应哪个消息呢?
      

  6.   

    WM_CTLCOLOR
    你利用一个CDC 获得其区域,然后直接填颜色就可以了好象是 pDC->FillSolidRect(&rect)吧
      

  7.   

    HBRUSH CMYDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    switch(nCtlColor)
    {
      case CTLCOLOR_EDIT:      //Edit control
      pDC->SetBkColor(m_clrEdit);
               pDC->SetTextColor(m_clrText);
               return m_BrushEdit; //自己定义的CBrush } return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
      

  8.   

    HBRUSH CMYDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    switch(nCtlColor)
    {
      case CTLCOLOR_STATIC:      //静态控件
      pDC->SetBkColor(m_clrStatic);
               pDC->SetTextColor(m_clrText);
               return m_BrushStatic; //自己定义的CBrush } return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    }
      

  9.   

    可以了,响应WM_CTLCOLOR消息,用pDC->SetBkColor(RGB(...));