我在对话框窗口显示了一张图片,同时放置一个Edit控件,写了一个类CTranslateEdit,继承CEdit类,为了使控件Edit透明,我在类里写了下面代码
HBRUSH CTranslateEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode( TRANSPARENT );
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}
对话框初始化时候,让edit控件显示若干个字,结果运行显示对话框时,对话框虽然透明,显示对话框背景图片,但字却没有显现,点击对话框时,字显示,但Edit控件却不透明,无法显示对话框中图片如何实现透明的EDIT控件,显示字的同时也能透明的显示对话框的背景图片

解决方案 »

  1.   

    没有必要重载CEdit,直接在父窗口的OnCtlColor中就可以设置了,不过就是此时edit的ctlcolor不是ctledit,而是ctlstatic,所以需要获取类名称来判断
      

  2.   

    既然是只读的,楼主不如用static控件,我用edit也是不好使,才改用static的
    http://wangzilue.mblogger.cn/posts/19321.aspx
      

  3.   


      HBRUSH CInfoAlert::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
      HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);  // TODO:  在此更改 DC 的任何属性
      if( pWnd->GetDlgCtrlID() == Edit 控件id )  {
        CFont font;
        font.CreatePointFont( 120, LPCTSTR( "Impact" ) );
        pDC->SelectObject( &font );
        pDC->SetTextColor( RGB( 255,245,250 ) );    pDC->SetBkMode( TRANSPARENT );
        CBrush brush;
        brush.CreateStockObject( NULL_BRUSH );
        return brush;
      }
      return hbr;
    }
      

  4.   


    HBRUSH CInfoAlert::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
         HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(pWnd->GetDlgCtrlID()==IDC_MYDATA_PDNUM)
    {
    pDC->SetBkMode(TRANSPARENT);
    hbr = CreateSolidBrush(RGB(255,255,255));
    }
           return  hbr;
    }