我做了一个基于对话框的程序,用了一幅BMP图作为窗体的背景,上面放置了几个STATIC静态文本框,我用了以下办法使文本框的文字背景透明,也确实做到了这一点HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor == CTLCOLOR_STATIC) 
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明
return HBRUSH(GetStockObject(HOLLOW_BRUSH));

}
return hbr;
}可是,当我试图改变文本内容时,却发现前后的内容重叠在一起了,如何解决呢?
另外我发现如果发生内容重叠后,将窗体最小化,再还原,文本就自动正常显示了,
请问高手这是怎么回事儿?对我的问题解决有无可以借鉴的地方?急盼回答,切切!!!!!!!!谢过了先!

解决方案 »

  1.   

    改变后用InvalidateRect将static所在区域无效。 试试。
      

  2.   

    已经试过了, 方法可行。如果不想麻烦,就用Invalidate(FALSE);无效整个区域。
    void CStaticBMPDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CStatic* pSt = (CStatic*)GetDlgItem( IDC_STATIC_ST);
    pSt->SetWindowText( ";adjfl;afl;a");
    RECT rect;
    pSt->GetWindowRect(&rect);
    ScreenToClient(&rect);
    InvalidateRect( &rect,FALSE );
    //Invalidate(FALSE);
    }