底色是画成渐变的形式按照网上说的可以设成透明
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(   RGB(0,   255,   0)   );  
return (HBRUSH)::GetStockObject(NULL_BRUSH);但是上面的字需要时时更新 但是更新了就重叠变成 黑方块
再抄网上的invalidaterect还是不行
void CClientdemosqDlg::PrintState(char *pstate)
{
CRect rtlbl;
m_lblstrstate.SetWindowText("");//先填空
m_lblstrstate.SetWindowText(pstate);//再写字
m_lblstrstate.GetClientRect(&rtlbl);
m_lblstrstate.InvalidateRect(&rtlbl);//最后刷新
}

解决方案 »

  1.   

    pDC->SetBkMode(TRANSPARENT); 
    pDC->SetTextColor(  RGB(0,  255,  0)  );  
    return (HBRUSH)::GetStockObject(NULL_BRUSH); 在之前把此处应有的背景图bitblt上去
      

  2.   

    对话框没有自绘?
    InvalidateRect让父对话框调用下试试再不行的话setwindowtext前showwindow(SW_HIDE),之后showwindow(SW_SHOW)
      

  3.   

    楼上的
    1、用showwindow(SW_HIDE),和showwindow(SW_SHOW)可以解决黑方块问题,但是出现有时显示有时不显示。
    2  以下代码出现黑方块
            CRect rtlbl;
    m_lblstrstate.SetWindowText("");
    m_lblstrstate.SetWindowText(pstate);
    m_lblstrstate.GetClientRect(&rtlbl);
            this->InvalidateRect(&rtlbl);3、 以下代码出现对话框闪烁        CRect rtlbl;
    m_lblstrstate.SetWindowText("");
    m_lblstrstate.SetWindowText(pstate);
    m_lblstrstate.GetClientRect(&rtlbl);
            this->Invalidate();
      

  4.   

    这个确实比较郁闷,如果是文字不改变还行,一改变文字就变成重叠的了
    我后来弄了一个跟背景差不多的刷子,没想到别的办法就这么凑合了。
    // 事前创建一个刷子,与背景色相同
    HBRUSH m_hbkbrs;
    m_hbkbrs = CreateSolibrush(RGB(243,223,254));pDC->SetBkMode(TRANSPARENT); 
    pDC->SetTextColor(  RGB(0,  255,  0)  );  
    return m_hbkbrs;
      

  5.   

    因为透明了,每次绘制文字的时候就不会绘制背景,所以造成文字重叠。应该刷新背景对话框:
    m_lblstrstate.SetWindowText(pstate);//再写字 
    CRect rtlbl; 
    m_lblstrstate.GetWindowRect(&rtlbl); 
    ScreenToClient(&rtlbl);
    InvalidateRect(&rtlbl);//最后刷新对话框背景