vc绘图-双缓冲技术

vc绘图-双缓冲技术

ID:14055544

大小:75.00 KB

页数:14页

时间:2018-07-25

vc绘图-双缓冲技术_第1页
vc绘图-双缓冲技术_第2页
vc绘图-双缓冲技术_第3页
vc绘图-双缓冲技术_第4页
vc绘图-双缓冲技术_第5页
资源描述:

《vc绘图-双缓冲技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、***************所有的GDI绘图函数使用的都是逻辑坐标(逻辑范围)****************************系统默认情况下物理范围和逻辑范围是1:1的对应关系***************1.首先定义类成员:  CDC*m_pDC;  CDCMemDC;  CBitmapMemBitmap;  CBitmap*pOldbitmap;  LONGxRange;  //逻辑范围,x方向宽度  LONGyRange;  //逻辑范围,y方向高度  LONGnWidht;  //物理范围,x方向宽度  LONGnHeight;//物理范围,y方向高度2.在类初始化函数

2、中:m_pDC=this->GetDC();                //获取设备上下文句柄CWnd*wnd=GetDlgItem(IDC_SHOWGRAPH);    //获取界面上显示图形的ID控件的句柄wnd->GetWindowRect(&rect);            //获取显示/画图区域大小(物理范围)ScreenToClient(&rect);                //转换为客户区坐标nWidth=rect.Width();                //显示/画图区域x方向物理宽度nHeight=rect.Height();           

3、   //显示/画图区域y方向物理高度3.在自定义函数中,设置视口与窗口的比例关系:m_pDC->SetMapMode(MM_ANISOTROPIC);    //注意MM_ANISOTROPIC和MM_ISOTROPIC的区别m_pDC->SetWindowExt(XRange,-yRange);  //设定窗口尺寸范围,画图使用的逻辑范围,实现放大或是缩小,坐标方向↑和→为正向m_pDC->SetViewportExt(nWidth,nHeight);//设定视口尺寸范围,客户区实际图形显示的区域范围,大小固定m_pDC->SetViewportOrg(rect.left,rect.

4、bottom);//设定画图的逻辑原点坐标(0,0)在物理坐标的(rect.left,rect.bottom)点上4.在自定义函数中,双缓冲技术的使用:MemDC.CreateCompatibleDC(m_pDC);                         //创建内存兼容设备上下文MemBitmap.CreateCompatibleBitmap(m_pDC,xRange,yRange);   //创建内存兼容画布,大小由逻辑范围决定pOldbitmap=MemDC.SelectObject(&MemBitmap);             //将画布选入内存设备上下文MemDC

5、.FillSolidRect(0,0,xRange,yRange,RGB(123,213,132));//对内存中的画布填充背景颜色,否则是默认的黑色//画图操作,如画一条对角直线MemDC.MoveTo(0,0);MemDC.LineTo(xRange*0.9,yRange*0.9);//将内存中的画图区域拷贝到界面的控件区域上去//第1和第2个参数若是0时,则从物理坐标的(rect.left,rect.bottom)点上开始按上述指定的方向贴图m_pDC->BitBlt(0,0,xRange,yRange,&MemDC,0,0,SRCCOPY);5.在类的析构函数中:MemDC.Se

6、lectObject(pOldbitmap);bitmap.DeleteObject();this->ReleaseDC(m_pDC);6.至此,就完成了双缓冲及坐标缩放绘图的功能*********************************************************************************************************************************************用VC做的画图程序,当所画的图形大于屏幕时,在拖动滚动条时屏幕就会出现严重的闪烁,为了解决这一问题,就得使用双缓冲来解决。程序产生严

7、重的闪烁问题是因为画图过程中前后两次的画面反差很大造成的人的视觉的闪烁。因为在VC中每次在调用OnDraw时系统都是先用背景画刷将画布清除再执行画图命令,这样在你每次移动滚动条时每执行一次OnDraw就会有一个空白页,这样和你的最终结果图象之间有一个很大的反差,因而看起来闪烁,而且滚动条滚动越快闪烁越严重。当然,你可以将背景画刷设为NULL,这样可以解决闪烁问题,但是不能将先前的图象擦除,这样整个屏幕就显得很乱。下面将利用双缓冲来解

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

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

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