用MFC对话框做无闪烁图片重绘

用MFC对话框做无闪烁图片重绘

ID:38952106

大小:29.00 KB

页数:3页

时间:2019-06-22

用MFC对话框做无闪烁图片重绘_第1页
用MFC对话框做无闪烁图片重绘_第2页
用MFC对话框做无闪烁图片重绘_第3页
资源描述:

《用MFC对话框做无闪烁图片重绘》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用MFC对话框做无闪烁图片重绘用应用程序向导生成一个基于对话框的应用程序把对话框Styles里的Border设置为Resizing,并把Minimizebox跟Maximizebox复选按钮都勾上现在我们为资源导入一张位图然后我们为程序添加四个私有变量private:intheight;intwidth;CBitmapmyBitmap;BITMAPbm;然后用类向导添加WMSIZE消息输入下列代码:width=cx;height=cy;Invalidate();然后在添加WM_PAINT消息在函数里添加以下代码:CDC

2、*pDC=newCDC;CPaintDCdc(this);//CClientDCdc(NULL);pDC->CreateCompatibleDC(&dc);pDC->SelectObject(myBitmap);//将图片伸缩成我们设定的大小。dc.StretchBlt(0,0,width,height,pDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);//如果不准备进行缩放可以用BITBLT。//dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,pDC,0,0,S

3、RCCOPY);deletepDC;然后做最后一步在程序初始化时候导入我们的图片并让对话大小跟图片一样在OnInitDialog函数最里添加如下代码://TODO:AddextrainitializationheremyBitmap.LoadBitmap(IDB_BITMAP1);myBitmap.GetObject(sizeof(BITMAP),&bm);好了我们现在就做了一个可以显示图片的对话框并且对话改变大小的时候图片大小也会改变,不过这个程序有一个缺点,就是重绘的时候有闪烁,性能不怎么好,现在我们按上面的步骤在

4、做一个对话框,导入位图,添加以下变量:public:CSizem_sizeBuffer;CBitmapm_bmpBackBuffer;CBitmap*m_pbmpPattern;在OnInitDialog函数里添加以下代码m_pbmpPattern=CBitmap::FromHandle((HBITMAP)::LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BACKGROUND),IMAGE_BITMAP,0,0,LR_SHARED));重写OnPaint函数i

5、f(IsIconic()){CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.W

6、idth()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;//Drawtheicondc.DrawIcon(x,y,m_hIcon);}else{CPaintDCdc(this);CDCdcBackBuffer;dcBackBuffer.CreateCompatibleDC(&dc);//重新计算区域面积CRectrectClient;GetClientRect(rectClient);if(m_sizeBuffer!=rectClient.Size()){m_sizeBuf

7、fer=rectClient.Size();if(m_bmpBackBuffer.GetSafeHandle()!=NULL)m_bmpBackBuffer.DeleteObject();m_bmpBackBuffer.CreateCompatibleBitmap(&dc,m_sizeBuffer.cx,m_sizeBuffer.cy);}CBitmap*pOldBmp=dcBackBuffer.SelectObject(&m_bmpBackBuffer);//画背景if(NULL==m_pbmpPattern){dc

8、BackBuffer.FillSolidRect(rectClient,RGB(255,0,255));}else{CDCdcPat;dcPat.CreateCompatibleDC(&dcBackBuffer);CBitmap*pbmpOld=dcPat.SelectObject(m_pbmpPattern);BITMAPbit

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。