- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC动态曲线绘制
◇实验方法:
用Visual C++实现动态曲线的绘制有4种方法。(1)使用消隐。(2)使用重绘。其中重绘按照原理的不同又分为3种。
1.消隐。其实消隐的方法很简单,主要使用CDC类的成员函数SetROP2 。该函数原型为int SetROP2( int nDrawMode )。参数nDrawMode为新的绘制方式。该函数用来设置当前绘制方式,绘制方式说明画笔和被填充对象的内部如何与屏幕表面已有的颜色组合。我们选用R2_XORPEN绘制方式——画笔颜色和屏幕颜色的组合,但不同时在两者之中,最终像素=画笔XOR屏幕像素。要实现动态曲线只需在这种绘制方式下在原有曲线的位置上再绘一次,以消隐掉原有曲线,再绘制新的曲线,如此重复,就可形成动态曲线。
2.重绘。在重绘中都要使用到这样一个函数:CDC类成员函数BitBlt 。原型为BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )。该函数将一个位图从源设备描述表拷贝到CDC的设备描述表中。
(1)原理1:设置一个后台设备环境。所有的绘图工作都在后台完成,然后通过BitBlt 函数拷贝到当前设备环境。这种方法要求后台每次都全部重绘,包括坐标、字符说明、曲线等。
(2)应用举例:
在OnTimer 函数中每隔一定时间进行重绘。
void CDrawView::OnTimer(UINT nIDEvent)
{
?????? // TODO: Add your message handler code here and/or call default
?????? DrawPicture();????? // 画图函数
}
void CDrawView::DrawPicture()
{
??? pBackDC-PatBlt(0,0,winx, winy, PATCOPY);
?????? //画坐标轴及刻度
?????? DrawCoordinate(pBackDC ,BLACKPEN, MainWindowLeft,MainWindowBottom - MAINHEIGHT, MainWindowLeft + MAINWIDTH, MainWindowBottom);
?????? //标出x坐标刻度值
?????? WriteCoordinateX(pBackDC, BLACKPEN, MainWindowLeft,MainWindowLeft + MAINWIDTH, MainWindowBottom);
?????? //标出y坐标刻度值
?????? WriteCoordinateY(pBackDC,BLACKPEN,MainWindowLeft,MainWindowBottom );
?????? //输出实际宽度值
?????? WriteMessage(pBackDC,MainWindowLeft,MainWindowBottom,MAINHEIGHT );
??? if ( pBackDC != NULL )
?????? {
//画曲线图
?????? DrawGraph(pBackDC,REDPEN,MainWindowLeft+MAINWIDTH,MainWindowBottom);?????????????
CDC *pDC = GetDC();
????????????? if (pDC != NULL)
????????????? {
//调用OnDraw()函数,将曲线图显示在屏幕中
???????????????????? OnDraw(pDC); ???
???????????????????? ReleaseDC(pDC);
????????????? }
?????? }
}
void CDrawView::OnDraw(CDC* pDC)
{
?????? CDrawDoc* pDoc = GetDocument();
?????? ASSERT_VALID(pDoc);
?????? // TODO: add draw code for native data here
?????? if (pDC != NULL)
????????????? pDC-BitBlt(0,0,winx, winy, pBackDC, 0, 0, SRCCOPY);
}
(3)原理2:设置一个后台设备环境(如图2),其大小与当前设备环境相同(如图1)。但主要绘图工作都在当前设备环境进行。例如设当前设备环境大小为200×100,曲线点之间的间距offset=5,左上角顶点在屏幕中的坐标为(200,1
文档评论(0)