我扩展了一个CStatic标签类,在OnPaint()中写
CString str; 
GetWindowText(str);  dc.SetBkMode(TRANSPARENT);
dc.TextOut(0,0,str);
让背景透明,但是SetWindowText()时背景又恢复过来了,我试过很多方法,但都未成功,当我SetWindowText()时好像没有调用OnPaint(),请问怎么让背景重画?

解决方案 »

  1.   

    这个方法试过,不行此外我做了一个扩展对话框类,在OnEraseBkgnd()里画了背景,在CStatic::SetWindowText()之前调用过CDialog::MoveWindow()和CDialog::ShowWindow()是不是跟这个也有关系?
      

  2.   

    HBRUSH CChatDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CODDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (CTLCOLOR_STATIC == nCtlColor)
             {
                   pDC->SetBkMode(TRANSPARENT);
                   return NULL_BRUSH;
             }
             return hbr;

      

  3.   

    能不能在我定义的CStatic扩展类中写这个重画阿?
      

  4.   

    自己解决了问题,在codeproject上找到了答案,好像是有一个名叫TransStaticSample的。谢谢了