[转]引用 VC 对话框设置位图背景并透明控件

本文介绍如何使用OnEraseBkgnd函数为MFC对话框设置位图背景,并通过OnCtlColor函数使静态控件背景透明。此外还讨论了解决字体更改后重绘问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用OnEraseBkgnd函数实现对话框位图背景

BOOL CDisplayBmpBackGroundDlg::OnEraseBkgnd(CDC   *pDC) 

{

 CRect rect;

 GetClientRect(&rect);

 CBitmap m_pBmp;

 BITMAP bm;

 CDC dcMem;

 m_pBmp.LoadBitmap(IDB_BITMAP1);

 m_pBmp.GetBitmap(&bm);//得到位图尺寸

 dcMem.CreateCompatibleDC(pDC);

 CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp);

  pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真

 pDC->StretchBlt(0,0,rect.Width() ,rect.Height(),

  &dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

 dcMem.SelectObject(pOldBitmap);

 return TRUE;

}

 

到这里就可以实现位图了,但STATIC控件背景不透明,显得很难看。

VC 对话框设置位图背景并透明控件 - jaysing - ☆成成☆

 

2、来我们让STATIC控件透明吧

HBRUSH CDisplayBmpBackGroundDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

 if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_BTN || nCtlColor ==  CTLCOLOR_STATIC)

  

 {  

         pDC->SetBkMode(TRANSPARENT);    

 }  

 return   HBRUSH(GetStockObject(HOLLOW_BRUSH));

}

VC 对话框设置位图背景并透明控件 - jaysing - ☆成成☆

到这里其实就可以了,BMP的图片背景实现了,文本框的透明也实现了。

 

3、补充说明:如果程序运行过程中,需要设置文本框的字体的话,会出现显示"字体重叠不刷新"的问题

VC 对话框设置位图背景并透明控件 - jaysing - ☆成成☆

 

4、这就要对该控件或者对话框处理了,要刷出新字体来。

 CWnd* pWnd = GetDlgItem(IDC_STATIC1);

 pWnd->SetWindowText("guohaiyang.blog.163.com");//需要修改的控件标题

 

//这里可以刷整个对话框,但如果较频繁的话,很明显能看出来,就选择刷显示字体的那块区域就可以了

pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);

 

http://blog.163.com/leizhou_32/blog/static/49831386200910251952767/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值