“使用VC++在有背景图片的对话框中实现静态文本的透明显示”完整帖中提供了三种方法,但是没有看到它的第3种方法。前两种,仅适合静态文本显示。如果我需要将静态文本在程序中变化的时候,就不行了。
所以 ,我的最终目的是静态文本在程序中可以变化,而且静态文本的背景为透明。即静态文本的背景其实是对话框的背景图片。

解决方案 »

  1.   

    第三种方法就是直接在OnPaint()中将字符串写到对话框窗口上.
    在OnPaint()中:
    pDC->SetBkMode(TRANSPARENT);
    pDC->TextOut(100, 100, sComment);在类中定义:
    CString sComment;在改变字符串的地方:
    sComment = _T("你想说的话;");
    Invalidate();
      

  2.   

    LZ说的是控制的透明显示还是文本的透明显示:
    如是文本:
    SetBkMode(TRANSPARENT);
    TextOut(10,10,YouString);
    如果是控制,如CStatic类
    http://www.moon-soft.com/doc/40209.htm
      

  3.   

    我说的是静态文本空间背景透明。即控件方式去只显示文本,背景仍然是对话框的背景。有一个作用就是,这个控件的文本我需要更新。
    to 裁缝:
    按照你的方法,重载onpaint,so,如果我更新文本内容时,如何做到。谢谢。。
      

  4.   

    文本可以用TextOut啊OnPaint() 中添加代码如下
    {
             CPaintDC dc(this); // device context for painting  dc.SetBkColor(RGB(192,192,192));  //设置背景色
    dc.SetTextColor(RGB(255,0,0));  //设置字体色         dc.TextOut(200,200,m_strDisplay);//m_strDisplay是全局变量,只要对它做改变就可以了,OnPaint()可以在使用Invalidate(false);后自动调用
    }
      

  5.   

    如果对话框用了内存DC,将内存DC传给Static,这个是最好的办法
      BOOL   CColorStatic::OnEraseBkgnd(CDC*   pDC)     
      {   
      CStatic::OnEraseBkgnd(pDC);   
                        CRect   rc;   
                        GetWindowRect(rc);   
                        GetParent()->ScreenToClient(rc);   
                        pDC->Bitblt(0,   0,   rc.Width(),   rc.Height(),   m_pParentMemDC,   rc.top,   rc.left,   SRCCOPY);     
      return   TRUE;   
      }
      

  6.   

    映射WM_CTLCOLOR消息也是一种方法,这样做有时会出现不刷新的情况
    OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor) 
    .....
      if   (nCtlColor==CTLCOLOR_STATIC)   
      {   
      pDC->SetBkMode(TRANSPARENT);   
      
      return   (HBRUSH)::GetStockObject(NULL_BRUSH);   
      }