在对话框中设置背景的三种方法.docx_第1页
在对话框中设置背景的三种方法.docx_第2页
在对话框中设置背景的三种方法.docx_第3页
在对话框中设置背景的三种方法.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在对话框中设置背景的三种方法方法一:在OnPaint中StretchBlt具体是:注释掉CDialog:OnPaint()或放到结尾(原因何在呢?),并加入贴图代码voidCqqqqqDlg:OnPaint()if(IsIconic()CPaintDCdc(this);/devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc(),0);/CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;/Drawtheicondc.DrawIcon(x,y,m_hIcon);else/CDialog:OnPaint();/注释此句,如果不注释的话,就放到结尾,原因何在呢?/贴背景图片CPaintDCdc(this);CBitmapbmpBk;bmpBk.LoadBitmapW(IDB_BITMAP_tempbk);/m_bmpBK.LoadBitmapW(IDB_BMPBK);BITMAPbmpSize;bmpBk.GetBitmap(&bmpSize);/获取背景图片尺寸CRectrect;GetClientRect(&rect);/获取客户区尺寸CDCdcMem;dcMem.CreateCompatibleDC(&dc);dcMem.SelectObject(&bmpBk);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bmpSize.bmWidth,bmpSize.bmHeight,SRCCOPY);/将背景图片拉伸或者压缩copy至客户区/贴背景图片执行效果截图如下:方法二:在OnEraseBkgnd中StretchBlt具体是:注释掉return CDialog:OnEraseBkgnd(pDC);直接返回true(为什么不能返回这个要返回true呢?),代码如下:BOOLCqqqqqDlg:OnEraseBkgnd(CDC*pDC)/TODO:Addyourmessagehandlercodehereand/orcalldefault/贴背景图片CBitmapbmpBk;bmpBk.LoadBitmapW(IDB_BITMAP_tempbk);/m_bmpBK.LoadBitmapW(IDB_BMPBK);BITMAPbmpSize;bmpBk.GetBitmap(&bmpSize);/获取背景图片尺寸CRectrect;GetClientRect(&rect);/获取客户区尺寸CDCdcMem;dcMem.CreateCompatibleDC(pDC);dcMem.SelectObject(&bmpBk);pDC-StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bmpSize.bmWidth,bmpSize.bmHeight,SRCCOPY);/将背景图片拉伸或者压缩copy至客户区/贴背景图片returntrue;/returnCDialog:OnEraseBkgnd(pDC);效果与方法一相同,图片就不贴了,参见上图。而且这里还有一个很有意思的现象,若在OnEraseBkgnd贴图, 在OnPaint()函数中不调用基类的OnPaint,即注释掉CDialog:OnPaint(),则将界面隐藏后再显示出来则控件全没了,只有对话框以及背景。如下图:原因见在OnPaint中必须调用一次BeginPaint和EndPaint,且也只能调用一次。方法三:在OnCtlColor中返回带有背景位图的画刷具体是:1、在头文件中定一个背景刷public:CBrushm_brushBk;2、在OnInitDialog中加入以下句/TODO:AddextrainitializationhereCBitmapbmp;bmp.LoadBitmap(IDB_BITMAP_tempbk);m_brushBk.CreatePatternBrush(&bmp);/m_brushBk.CreateSolidBrush(RGB(0,255,0);/用纯色作为背景bmp.DeleteObject();3、在OnCtlColor函数中返回背景画刷HBRUSHCXXXXXDlg:OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)HBRUSHhbr=CDialog:OnCtlColor(pDC,pWnd,nCtlColor);/TODO:ChangeanyattributesoftheDChere/TODO:Returnadifferentbrushifthedefaultisnotdesiredif(pWnd=this)/this代表当前对话框窗口returnm_brushBk;returnhbr;效果如下图所示:注意这个函数里面的if判断,这个pWnd参数很关键。澳门新濠天地官网66我们看看,如果没有这个if判断,直接返回m_brushBk;会是什么结果呢,代码如下:HBRUSHCqqqqqDlg:OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)HBRUSHhbr=CDialog:OnCtlColor(pDC,pWnd,nCtlColor);/TODO:ChangeanyattributesoftheDChere/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论