我把一个子CStatic做了透明:
BRUSH CUpdateUIDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO:  Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(0);
pDC->SetTextColor(RGB(128,128,128));
hbr = (HBRUSH)::GetStockObject(NULL_BRUSH);
}
// TODO:  Return a different brush if the default is not desired
return hbr;
}然后我在下载文件更新文件进度.然后要更新CStatic的text.如果不用RedrawWindow时对窗口进行重绘.字体就会冲突,可刷新过快时有闪烁.
void UpdateStatic(char* buff)
{
RECT   m_rect;
::GetWindowRect(GetDlgItem(IDC_STATIC1)->GetSafeHwnd(),&m_rect);
ScreenToClient(&m_rect); 
GetDlgItem(IDC_STATIC1)->SetWindowText(buff);
(GetDlgItem(IDC_STATIC1)->GetParent())->RedrawWindow(&m_rect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
    
}大家有没有好的办法?

解决方案 »

  1.   

    有几个方法。1是从CStatic派生一个类下来,处理它的WM_ERASEBKGND消息,返回TRUE,表示不用重绘背景
    2是把父窗口的WS_CLIPCHILDREN风格加上
      

  2.   

    兄台,你的方法我觉得应该不行哦.不重绘的话static上的字就会重叠啊
      

  3.   

    这个问题可以这样解决,你要复制它父窗本的内容在内存DC中,然后在其中写字,再画到你的CStatic中.透明滚动CStatic就是这样实现的.
      

  4.   

    写一个继承CStaic类的类,更新时只改文字
      

  5.   

    1,在OnPaint 里画图,
    2,是从CStatic派生一个类下来,处理它的WM_ERASEBKGND消息,返回TRUE,表示不用重绘背景
    3,用内存DC
      

  6.   

    http://m2.tech.topzj.com/thread-7145-1-1.html
    把控件背景变为透明