- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
? ********************所有的GDI绘图函数使用的都是逻辑坐标(逻辑范围)**************************************系统默认情况下 物理范围和逻辑范围 是1:1 的对应关系*******************1. 首先定义类成员:
?? CDC *m_pDC;?? CDC MemDC;?? CBitmap MemBitmap;?? CBitmap *pOldbitmap;
?? LONG xRange;?? // 逻辑范围,x方向宽度?? LONG yRange;?? // 逻辑范围,y方向高度?? LONG nWidht;?? // 物理范围,x方向宽度?? LONG nHeight; // 物理范围,y方向高度
2. 在类初始化函数中:
m_pDC = this-GetDC();???????????????? // 获取设备上下文句柄
CWnd *wnd = GetDlgItem(IDC_SHOWGRAPH);???? // 获取界面上显示图形的ID控件的句柄wnd-GetWindowRect(rect);???????????? // 获取显示/画图区域大小(物理范围)ScreenToClient(rect);???????????????? // 转换为客户区坐标
nWidth = rect.Width();???????????????? // 显示/画图区域x方向物理宽度nHeight = rect.Height();?????????????? // 显示/画图区域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.bottom); //设定画图的逻辑原点坐标(0,0)在物理坐标的(rect.left,rect.bottom)点上
4. 在自定义函数中,双缓冲技术的使用:
MemDC.CreateCompatibleDC(m_pDC);????????????????????????? // 创建内存兼容设备上下文MemBitmap.CreateCompatibleBitmap(m_pDC,xRange,yRange);??? // 创建内存兼容画布,大小由逻辑范围决定pOldbitmap = MemDC.SelectObject(MemBitmap);????????????? // 将画布选入内存设备上下文
MemDC.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.SelectObject(pOldbitmap);bitmap.DeleteObject();
this-ReleaseDC(m_pDC);
6. 至此,就完成了双缓冲及坐标缩放绘图的功能
*********************************************************************************************************************************************
用VC做的画图程序,当所画的图形大于屏幕时,在拖动滚动条时屏幕就会出现严重的闪烁,为了解决这一问题,就得使用双缓冲来解决。程序产生严重的闪烁问题是因为画图过程中前后两次的画面反差很大造成的人的视觉的闪烁。因为在VC中每次在调用OnDraw时系统都是先用背景画刷将画布清除再执行画图命令,这样在你每次移动滚动条时每执行一
您可能关注的文档
- 十一五项目建筑节能关键技术结题汇报.pdf
- 石灰稳定土的施工与病害防治.doc
- 石墨烯相关与研究高被引文献.doc
- 石苏洋TS9农药学螺虫乙酯新型杀虫剂.ppt
- 石油大学热工学第三章理想气体.ppt
- 时序逻辑电路verilog_hdl建模.ppt
- 时域调制变换原理.pdf
- 实测质量控制措施.doc
- 实践技能题库题+心律失常笔记.doc
- 实施策略及方式实施策略及方式实施策略及方式.pdf
- 2024年中国离子镀膜炉市场调查研究报告.docx
- 2010-2023历年福建省建瓯市徐墩中学八年级第一次月考历史试卷(带解析).docx
- 2010-2023历年福建省厦门市第六中学高二下学期期中试题生物卷.docx
- 2010-2023历年福建省三明市第一中学高一上第二次月考地理试卷(带解析).docx
- 2024年中国硬塑拎手袋市场调查研究报告.docx
- 2024年中国粗蒽市场调查研究报告.docx
- 2024年中国汽车水泵配件市场调查研究报告.docx
- 2024年中国丝口不锈钢闸阀市场调查研究报告.docx
- 2024年中国广东凉茶饮料市场调查研究报告.docx
- 2010-2023历年福建省惠安县初中学业质量检查化学试卷(带解析).docx
文档评论(0)