[转]引用 VC 对话框设置位图背景并透明控件
2010-01-29 18:55
465 查看
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控件背景不透明,显得很难看。
![](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));
}
![](http://img.blog.163.com/photo/FZAnSYt2PVlWqotX75hgRw==/3137883040370737818.jpg)
到这里其实就可以了,BMP的图片背景实现了,文本框的透明也实现了。
3、补充说明:如果程序运行过程中,需要设置文本框的字体的话,会出现显示"字体重叠不刷新"的问题
![](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);
http://blog.163.com/leizhou_32/blog/static/49831386200910251952767/
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控件背景不透明,显得很难看。
![](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));
}
![](http://img.blog.163.com/photo/FZAnSYt2PVlWqotX75hgRw==/3137883040370737818.jpg)
到这里其实就可以了,BMP的图片背景实现了,文本框的透明也实现了。
3、补充说明:如果程序运行过程中,需要设置文本框的字体的话,会出现显示"字体重叠不刷新"的问题
![](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);
http://blog.163.com/leizhou_32/blog/static/49831386200910251952767/
相关文章推荐
- VC中设置了对话框背景图片的情况下不能正确显示radio控件透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC设置STATIC控件背景透明
- MFC学习之 对话框设置背景颜色及控件透明的方法
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC中设置STATIC控件背景,比如透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- 实现对话框在位图作为背景时的控件透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- 设置对话框的图片背景,控件的字体及透明等,字体重叠等
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC static控件背景如何设置成透明
- VC设置CEdit控件背景透明、文字背景也透明
- vc设置对话框的背景透明
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- VC对话框使用OnEraseBkgnd函数位图背景并透明
- VC使用位图作为对话框或者控件背景
- 关于设置对话框的背景颜色,和设置控件的字体颜色或背景颜色VC++
- VC对话框如何添加WM_ERASEBKGND消息(OnEraseBkgnd函数)及对话框使用位图背景并透明
- 实现对话框在位图作为背景时的控件透明