我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”
如果原来的内容是“12”,却可是改成“13”,这是为什么?
在线等待,一定给分的!!!!!!!!!

解决方案 »

  1.   

    在OnCtlColor中调用
    pWnd->Invalidate();
    pWnd->UpdateWindow();
      

  2.   

    代码如下:HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
          HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

          // TODO: Change any attributes of the DC here int ctlId;
          int ctlId;
          ctlId = pWnd->GetDlgCtrlID();

          if(ctlId == IDC_STATIC_FRAMERATE){
              pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
     pDC->SetBkColor(RGB(18,91,162));
     return HBRUSH(GetStockObject(HOLLOW_BRUSH));
          }

          // TODO: Return a different brush if the default is not desired
          return hbr;
    }void CMyDlg::OnTimer(UINT nIDEvent)
    {
          GetDlgItem(IDC_STATIC_FRAMERATE)->SetWindowText(strFrameRate);//strFrameRate是个字符串变量
    }如何修改?敬请指教,谢谢!!
      

  3.   

    ukyoking(东方不败) 
      我试了您的方法,但是更新后的文本在无文字显示的地方底色成了白色,而不是我设置的颜色,您还有别的办法吗?
      谢谢!!
      

  4.   

    我也遇到过同样的问题
    解决方法有两上
    1.重载CStatic,当然这要麻烦不少2.把Static换成Edit,同样也可以显示信息
      而EDIT在改了颜色后可以刷新
      

  5.   

    当你调用SetWindowText改变static的内容时,系统要先用你选定的brush去把以前的内容擦掉,然后再绘制新的内容。由于你给static设置了一个HOLLOW_BRUSH,也就是一个中空的刷子,结果原来的内容根本就刷不掉,造成的结果就是如果你新设置的标题比原来的长,就能看到效果;如果比原来短,那么以前的内容就有一部分被留下来;像你说的就是一种极端的情况,新的标题是老标题的子串,结果你感觉标题根本就没有改变。 
        我给你改了一下:HBRUSH CDLGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
          HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
          int ctlId;
          ctlId = pWnd->GetDlgCtrlID();
          if(ctlId == IDC_STATIC_FRAMERATE)
      {
                        pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
      pDC->SetBkMode(TRANSPARENT);     透明的字符背景
      return HBRUSH(CreateSolidBrush(RGB(18,91,162)));
          }
          return hbr;
    }
      

  6.   

    就是 webber84(***闭关修炼中***) 说的原因
      

  7.   

    不过也很好解决
        if(ctlId == IDC_STATIC1){
              pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
    pDC->SetBkColor(RGB(18,91,162));
    CRect rc;
    pWnd->GetClientRect(&rc);
    pDC->FillSolidRect(&rc,RGB(18,91,162));
     return HBRUSH(GetStockObject(HOLLOW_BRUSH));
          }
    这样就可以了