登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

图像处理 视频分析 机器视觉 模式识别

方向比努力更重要

 
 
 

日志

 
 
关于我

河北软件开发项目,电子警察卡口项目,公安天网项目,媒体流处理,数字图像处理。媒体服务器 RTSP、图像处理、车牌识别……DCT变换,H.264压缩

VC对话框使用OnEraseBkgnd函数位图背景并透明  

2010-02-22 11:24:47|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


 

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;
}

好多新手都不知道OnEraseBkgnd这个函数在对话框里是怎么添加的,有手工自己写和系统添加两种方式,具体使用方法见《VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)》

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

VC对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说EraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" alt="VC对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" src="http://img.blog.163.com/photo/wKsLvxhk8LOxlZGn-sJWjQ==/607704474719296434.jpg">

 

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对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说EraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" alt="VC对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" src="http://img.blog.163.com/photo/FZAnSYt2PVlWqotX75hgRw==/3137883040370737818.jpg">

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

 

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

VC对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说EraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" alt="VC对话框使用OnEraseBkgnd函数位图背景并透明 - fengqing888 - 聪明人在说话前总是考虑很久然后什么也不说" src="http://img.blog.163.com/photo/a9prgegr_-PIl7C487bVuw==/5146206999202125309.jpg">

 

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

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

 

//这里可以刷整个对话框,但如果较频繁的话,很明显能看出来,就选择刷显示字体的那块区域就可以了
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);

 

好了,没有问题了,剩下随便你玩吧,这个解决方法不像网上说的,非要借用人家的自己写的函数,现在完全用VC提供的就可以了,免得加这个那个的头文件

 

  评论这张
 
阅读(3900)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018