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

来源:互联网 发布:视频截取gif软件 编辑:程序博客网 时间:2024/05/20 06:30

本文转载于:http://blog.163.com/guohaiyang/blog/static/3213403720081021126424/

 

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

好多新手都不知道OnEraseBkgnd这个函数在对话框里是怎么添加的,有手工自己写和系统添加两种方式

 

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

 

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

HBRUSH CXXXDlg::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));
}

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

 

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

 

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

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

 

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

 

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