在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;
}
对于可编辑文本框,在没有将其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;
}
我觉得该方法可行,但是有个问题,对话框背景,我是直接重载OnPaint()函数,如何获取对话框的背景画刷呢?以前都是做嵌入式,刚开始学MFC,很多东西不懂,求助!!pDC->SetBkMode(TRANSPARENT); //静态文本框背景设置为透明
//在此处返回背景画刷。该如何获得背景画刷呢?
BkBrush=CreateSolidBrush(RGB(232,232,232));
return BkBrush;
CreateStockObject(NULL_BRUSH)
试过返回空画刷,这个对静态文本框很好用,但是对于EDIT,效果就很不理想了,尤其是将Disable设置为True的EDIT控件,就算返回了空画刷,EDIT控件的背景还是白色。
RADIO控件返回空画刷后,变成了灰色。
if (pWnd->GetDlgCtrlID()==IDC_EDIT1)
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH brush;
brush=CreateSolidBrush(RGB(240,240,240));//对话框的RGB值
return brush;
}效果上是实现了,还有更好的方法吗?
按这文章中的方法去做,很多控件的背景透明问题都解决了。唯一的不足就是EDIT控件,当在EDIT控件中编辑时,会出现重叠。