在MFC中,默认的静态文本框的背景颜色是灰色的。现在我用以下的代码将其背景颜色设置为透明之后,虽然之前的灰色没了,但是却多了一个白色的矩形框,好像背景颜色变成了白色,而不是透明的。
    对于可编辑文本框,在没有将其Disable属性设置为True之后,对应的编辑框背景颜色也变为灰色,能不能将这样的灰色背景也给变成透明?如果可以,该怎么实现?
    http://115.com/file/e6rstl5p#
    刚随便建了一个新工程,上述几种情况都体现出来了,现在我把源码给上传到115网盘,以上网址就是该源码的链接。    现在急需解决的问题是,如何让静态文本框的背景颜色变透明,即与对话框的背景颜色融为一体!
HBRUSH CBitmapTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
{     
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);      if( nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_STATIC )  //静态文本颜色,并且指定控件ID号       
{            
pDC->SetTextColor(RGB(255,0,0));          
//pDC->SetBkColor(RGB(191,219,255));     //静态控件的背景颜色设置,红字蓝底。          
pDC->SetBkMode(TRANSPARENT);    //静态文本框背景设置为透明
hbr=(HBRUSH)m_brush;       
}      if(nCtlColor==CTLCOLOR_EDIT)    //文本编辑框颜色     
{           
pDC->SetTextColor(RGB(0,0,255));          
//pDC->SetBkColor(RGB(191,219,255));     //静态控件的背景颜色设置         
pDC->SetBkMode(TRANSPARENT);   
hbr=(HBRUSH)m_brush;       
}  return hbr;  
}  

解决方案 »

  1.   

    又找了点材料看,有人说,在这句话后面返回背景画刷,而不要返回默认的画刷,就可以将静态文本框的背景和对话框的背景融为一体。
    我觉得该方法可行,但是有个问题,对话框背景,我是直接重载OnPaint()函数,如何获取对话框的背景画刷呢?以前都是做嵌入式,刚开始学MFC,很多东西不懂,求助!!pDC->SetBkMode(TRANSPARENT);    //静态文本框背景设置为透明
    //在此处返回背景画刷。该如何获得背景画刷呢?
      

  2.   

    pDC->SetBkMode(TRANSPARENT); 
    BkBrush=CreateSolidBrush(RGB(232,232,232));
    return BkBrush;
      

  3.   

    返回一个空画刷
    CreateStockObject(NULL_BRUSH)
      

  4.   

    返回一个空画刷return GetStockObject(NULL_BRUSH);
      

  5.   


    试过返回空画刷,这个对静态文本框很好用,但是对于EDIT,效果就很不理想了,尤其是将Disable设置为True的EDIT控件,就算返回了空画刷,EDIT控件的背景还是白色。
    RADIO控件返回空画刷后,变成了灰色。
      

  6.   

    搞定了,首先你先把编辑框的border属性设置为false你得到对话框的背景RGB值
    if (pWnd->GetDlgCtrlID()==IDC_EDIT1)
    {
    pDC->SetBkMode(TRANSPARENT);
    HBRUSH brush;
    brush=CreateSolidBrush(RGB(240,240,240));//对话框的RGB值
    return brush;
    }效果上是实现了,还有更好的方法吗?
      

  7.   


    按这文章中的方法去做,很多控件的背景透明问题都解决了。唯一的不足就是EDIT控件,当在EDIT控件中编辑时,会出现重叠。