我在OnPaint中已经成功在按钮上贴图,但是编辑区域的图却被贴在了原来的白色背景下,就是被盖住了,已经用SetBkMode设置了背景透明,但是没有效果,请大侠帮忙,下面是部分代码
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
CRect m_Rect;
GetClientRect(&m_Rect); BITMAP bm_1;
m_Bkimage.GetBitmap(&bm_1);
m_pBkbmCurrent = &m_Bkimage;
CDC dcMem_1;
dcMem_1.CreateCompatibleDC(&dc);
CBitmap* pOldBitmap_1 = dcMem_1.SelectObject(m_pBkbmCurrent);

dc.BitBlt(1,1,bm_1.bmWidth,bm_1.bmHeight,&dcMem_1,0,0,SRCCOPY);

dc.SetTextColor(RGB(128,0,0)); dc.SetBkMode(TRANSPARENT);         小弟着急啊~!

解决方案 »

  1.   

    HBRUSH   CYourDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)     
      {   
      HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,pWnd,nCtlColor);   
      //一个COMBO有两层窗口,先将外边的窗口透明   
      if(pWnd   ->GetDlgCtrlID()   ==   IDC_YOURCOMBO)   
      {   
      hbr   =   (HBRUSH)GetStockObject(NULL_BRUSH);   
      pDC   ->SetBkMode(TRANSPARENT);   
      }   
      //再将里面的透明   
      pWnd   =   pWnd   ->GetParent();   
        
      if(pWnd)   
      {   
      if(pWnd   ->GetDlgCtrlID()   ==   IDC_YOURCOMBO)   
      {   
      hbr   =   (HBRUSH)GetStockObject(NULL_BRUSH);   
      pDC   ->SetBkMode(TRANSPARENT);   
      }   
      }   
      return   hbr;   
      }   http://topic.csdn.net/t/20030306/16/1499687.html
      

  2.   

    你想让谁设置成透明的啊?
    你这段代码是什么类的?对话框的吗?combobox控件在该对话框上?
      

  3.   

    你这个画的是窗口的背景吧,你要重画ComboBox的背景
      

  4.   

    已经解决,通过GetWindow获得了子窗口Edit的句柄,然后showwindow将edit隐藏,后面贴的图就显示出来了,三天时间征集更好的答案,暂不结贴
      

  5.   

    回复2楼的:这段代码的在我重载自combobox类的CMyCombobox类的onpaint里,不是对话框类
      

  6.   

    回复3楼:我这段代码已经重绘了combobox的背景,但是由于combobox里面还有一个windows本身的edit控件,用spy++就可以看见,所以重绘的背景图被挡住了
      

  7.   

    你要将combobox设置成透明,并不需要派生一个CMyCombobox类。
    只需要在对话框中重载OnCtlColor函数就可以了。
    使用2楼的代码
      

  8.   

    对不起,我昨天说的解决方法不行,将edit隐藏掉会导致无法编辑
    另外我现在派生combobox类是为了代码复用,现在公司产品在做美工方面的工作,很多产品中都会使用这个类,目的是在其他产品中直接声明这个类的对象就能实现效果
      

  9.   

    一楼的方法可以,但是我希望能在我继承的类内部实现,不知道怎么做,我已经重载了onpaint,所以CtlColor就不走了,但是在类自身的OnCtlColor里可以实现吗?怎么实现?