VC对话框使用OnEraseBkgnd函数位图背景并透明
来源:互联网 发布:ai cs3软件下载 编辑:程序博客网 时间:2024/05/16 08:35
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控件背景不透明,显得很难看。
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));
}
到这里其实就可以了,BMP的图片背景实现了,文本框的透明也实现了。
3、补充说明:如果程序运行过程中,需要设置文本框的字体的话,会出现显示"字体重叠不刷新"的问题
4、这就要对该控件或者对话框处理了,要刷出新字体来。
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
pWnd->SetWindowText("guohaiyang.blog.163.com");//需要修改的控件标题
//这里可以刷整个对话框,但如果较频繁的话,很明显能看出来,就选择刷显示字体的那块区域就可以了
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);
好了,没有问题了,剩下随便你玩吧,这个解决方法不像网上说的,非要借用人家的自己写的函数,现在完全用VC提供的就可以了,免得加这个那个的头文件
补充下,自己实验发现
pWnd ->GetParent()->InvalidateRect(CRect(0,0,100,50),TRUE);
并不能完全解决刷新问题
最终使用
this->RedrawWindow();
来实现
虽然会出现控件的明显闪屏现象,但不影响使用
如果有更好的方法请赐教~
http://guohaiyang.blog.163.com/blog/static/3213403720081021126424/
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- [转]引用 VC 对话框设置位图背景并透明控件
- MFC基于对话框如何添加位图并使位图背景透明(TransparentBlt函数)
- VC 对话框背景透明
- VC 位图背景透明显示
- vc实现透明位图,透明背景
- vc实现透明位图,透明背景
- VC使用位图作为对话框或者控件背景
- 为VC++应用程序对话框添加透明位图
- 为VC++应用程序对话框添加透明位图
- 为VC++应用程序对话框添加透明位图
- Perl中的正则表达式(转摘)
- Publishing failed with multiple errors
- 用P3P header解决iframe跨域访问cookie/session
- The source code is different from the original version.
- OM:Manual Transaction in work flow
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- 数据库表 创建 修改
- 写入数据到MP3文件中
- VC++创建个性的对话框之MFC篇
- BUG:Visual Studio 6.0 中出现错误消息“Setup Was Unable to Create a DCOM User Account”
- #error WINDOWS.H already included. MFC apps must not #include
- 1980年小康的基本标准
- adobeairinstaller.exe的参数
- ExtJS22 初始体验(1)