我在窗体内放了一个按钮和一个Statics text。
然后在按钮的单击事件里面写了:
GetDlgItem(IDC_STATICS)->GetDC->SetBkColor(RFB(0,255,0);
GetDlgItem(IDC_STATICS)->GetDC->SetTextColor(RFB(0,255,0);
GetDlgItem(IDC_STATICS)->SetWindowText("haha");运行后,没有任何颜色效果,只是文字变了。
若第三句改成:GetDlgItem(IDC_STATICS)->GetDC->TextOut(........);
又需要输入x,y坐标。。不知如何是好。。所以,请问在两种情况下,分别应该怎么办。谢谢了~。

解决方案 »

  1.   

    http://www.codeguru.com/Cpp/controls/staticctrl/article.php/c2927/
    http://www.codeguru.com/Cpp/controls/staticctrl/article.php/c2909/
      

  2.   

    pomelowu(羽战士) 是说做一个新类吗?。
    如果不那么做呢。。有别的办法吗?。。 pomelowu(羽战士) GetDC后面少了个(),编译可以通过的。。

    能提供简单清晰的方法吗?。。谢谢了。
      

  3.   

    重载WM_CTLCOLOR消息
    HBRUSH CHelpInfoView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor); m_clrBkgnd = RGB( 58, 110, 165 );
    m_clrBkgnd = RGB(255, 255, 255);
    m_brBkgnd.CreateSolidBrush(m_clrBkgnd);

    // TODO: Change any attributes of the DC here
    switch(nCtlColor)
    {
    /* CTLCOLOR_DLG 对话框 
    CTLCOLOR_EDIT 编辑框
    CTLCOLOR_LISTBOX 列表框 
    CTLCOLOR_MSGBOX 消息框
    CTLCOLOR_SCROLLBAR 滑动条
    CTLCOLOR_STATIC 静态文本框、矩形等。
    */
    case CTLCOLOR_STATIC://在此加入你想要改变背景色的控件消息
    pDC->SetTextColor(m_clrText);
    pDC->SetBkColor(m_clrBkgnd);
    hbr = m_brBkgnd;
    break; default:
    break;
    } // TODO: Return a different brush if the default is not desired
    return hbr;
    }
      

  4.   

    你这样的代码能编译通过的?
    GetDlgItem(IDC_STATICS)->GetDC->SetTextColor(RFB(0,255,0);改成:
    GetDlgItem(IDC_STATICS)->GetDC()->SetTextColor(RGB(0,255,0);然后Invalidate();
      

  5.   

    忘说了,上面的代码放到对话框重载的OnCtlColor中去
      

  6.   

    IDC_STATICS = -1
    你要为每一个静态文本框设定一个ID
      

  7.   

    我想改的那个静态文本设了ID啊,函数GetDlgItem(我设的那个ID)好像并没有限定在我想
    改的静态文本上,怎么把所有的静态文本都改了啊?问题到底出在哪儿?
      

  8.   

    一种方法:你可以将 kvw3000(回家念经)的方法稍微修改一下 : case CTLCOLOR_STATIC://在此加入你想要改变背景色的控件消息                CWnd *pStatic = (CWnd*)GetDlgItem(IDC_STATICS1); 
                    if(pStatic == pWnd) //如果是你想修改颜色的Static , 则进入 . . .
                    {
           pDC->SetTextColor(m_clrText);
       pDC->SetBkColor(m_clrBkgnd);
       hbr = m_brBkgnd;
                    } 
    break;这里要注意的是 , 你的这个ID一定要是唯一的 . . .  .另一种方法:  利用DrawText来绘制文本 . . 
      CWnd* pWnd = GetDlgItem(IDC_STATIC1);
      CDC* pDC = pWnd->GetDC() ;  pDC->SetTextColor(RGB(255,0,0));
      pDC->SetBkColor(RGB(255,255,255));
      CRect rt ;
      pWnd->GetClientRect(rt);
      pDC->DrawText("aaa",rt,0);   DrawText能够在指定矩形范围内绘制文本 , 
      你可以设置文本区域为这个绘制区域 , 然后可以设置文本对齐方式 , 来绘制文本  .  .  这样 , 你可以不用考虑textout里那样的x,y坐标值 , 你只要指定一种对齐方式 , (左对齐,
      右对齐 , 中间 等等) , 它就会自动绘制很好的文本 . . .
      

  9.   

    ricky460(阿酷) ( )....
     你说的好全面啊。。呵呵。。谢谢你了。。
    还有没有别的办法?。。
    大家聊聊啊~~。。
      

  10.   

    请问ricky460(阿酷),怎么设置绘制区域?我把你的代码抄了一遍怎么我的程序上好几个地方都写着aaa ,怎样才能将它绘制到我想写的地方去?