vc|mfc的cdc类及如何使用画笔绘制各种图形(vc应用mfc画图的详细步骤)-尊龙游戏旗舰厅官网

cdc对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。

它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。

可以通过cdc对象的成员函数进行所有的绘图。

其对象层次结构如下:

vc|mfc的cdc类及如何使用画笔绘制各种图形(vc应用mfc画图的详细步骤)

类名 说明
cpaintdc 窗口用户区的设备描述环境,在ondraw()函数中来处理wm_paint消息
cclientdc 窗口客户区的设备描述环境,但应用在wm_paint消息之外的消息处理函数中
cwindowdc 在整个窗口内(不只是用户区)绘图的设备描述环境
cmetafiledc 图元文件的设备描述环境,在创建可以回放的图像时使用

专门用于在应用程序窗口客户区绘图的cpaintdc,是所有cdc子类中最常用的一个类。为了防止程序设计人员误把绘图代码写到其他位置,mfc规定,cpaintdc对象只在cview类的ondraw( )函数中有效。并且为了方便和引起程序员注意,mfc appwizard在自动为用户生成的cveiw派生类代码中就生成了如下框架代码:

ondraw(cdc *pdc)

{……..}

其中,函数的参数pdc就是指向cpaintdc对象的指针。

系统每次创建应用程序窗口及窗口需要刷新时就会产生wm_paint消息,系统接收到这个消息就会自动调用ondraw( )函数。应用程序也可以调用相关函数来激活ondraw( ),所以程序中所有对窗口客户区进行绘图的代码都应该写在这个函数中。

cdc类有很多成员函数,包括绘制点、直线、矩形、椭圆、多边形、文本以及位图等的成员函数。

以下是一个小实例:

// ch9demo3view.cpp

void cch9demo3view::ondraw(cdc* pdc)

{

cch9demo3doc* pdoc = getdocument();

assert_valid(pdoc);

// todo: add draw code for native data here

cpen pen[5];

//创建实线画笔

pen[0].createpen(ps_solid, 5, rgb(255, 0, 0));

//创建虚线画笔

pen[1].createpen(ps_dash, 1, rgb(0, 255, 0));

//创建点线画笔

pen[2].createpen(ps_dot, 1, rgb(0, 0, 255));

//创建点划线画笔

pen[3].createpen(ps_dashdot, 1, rgb(0, 255, 255));

// 创建双点划线画笔

pen[4].createpen(ps_dashdotdot, 1, rgb(255, 0, 255));

// 保存指向设备上下文原有画笔的指针

cpen *poldpen;

//以实线画笔绘制矩形

poldpen=pdc->selectobject(&pen[0]);

pdc->rectangle(10, 10, 110, 110);

pdc->textout(10, 115, \”rectangle绘制矩形\”);

//使用虚线画笔和函数polyline输出多段折线

pdc->selectobject(&pen[1]);//载入画笔

pdc->rectangle(180, 10, 330, 110);//绘制矩形

cpoint pts[]={cpoint(190, 20), cpoint(200, 60), cpoint(270, 40), cpoint(210, 80),

cpoint(250, 100), cpoint(300, 30), cpoint(310, 80)};

pdc->polyline(pts, 7);//绘制多端折线

pdc->textout(180, 115, \”polyline绘制多段折线\”);

// 使用pie和arc输出饼图和弧形

pdc->selectobject(&pen[2]);//载入点线画笔

pdc->ellipse(10, 140, 160, 240);

pdc->selectobject(&pen[3]);//载入点划线画笔

pdc->pie(20, 150, 150, 230, 160, 160, 10, 160);

pdc->selectobject(&pen[4]);//载入双点划线画笔

pdc->arc(20, 150, 150, 230, 10, 220, 160, 220);

pdc->textout(10, 245, \”不同画笔绘制椭圆、弧形和饼图\”);

//恢复设备上下文的原有画笔

pdc->selectobject(poldpen);

//删除所创建的画笔资源

for (int i=0; i<5; i )

pen[i].deleteobject();

}

vc|mfc的cdc类及如何使用画笔绘制各种图形(vc应用mfc画图的详细步骤)

绘制弧形需要4个坐标点,函数原型如下:

arc(int x1,int x2, int x3, int x4, int x5, int x6, int x7, int x8)

4个坐标点如下图所示:

vc|mfc的cdc类及如何使用画笔绘制各种图形(vc应用mfc画图的详细步骤)

pie()函数的参数与上述arc()函数相同。

-end-

尊龙游戏旗舰厅官网的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年4月29日 上午8:44
下一篇 2024年4月29日 上午8:56

相关推荐

  • 小伙伴们,今天来说说华为软件的实力。 为啥说这个话题呢,因为华为曾连续18年霸榜中国百强软件的首位了。 根据中国电子信息行业联合会发布的《2022年软件和信息技术服务竞争力前百家企…

    科研百科 2023年5月14日
    429
  • 合同管理流程是确保合同执行过程中的关键步骤。以下是一个完整合同管理流程的概述: 1. 合同签订:合同签订前,双方需要明确合同的条款和条件,确保双方都理解和同意。合同应该包括合同的摘…

    科研百科 2024年8月20日
    41
  • 浅谈项目管理系统与oa系统的区别(浅谈项目管理系统与oa系统的区别与联系)

    随着计算机技术、网络技术和通信技术的发展和应用,企业信息化已成为品牌实现可持续化发展和提高市场竞争力的重要保障。大家比较熟悉的信息化软件包括企业记账报账的专业财务软件、制造业用来管…

    科研百科 2023年11月23日
    109
  • 软件测试报告是软件测试人员针对产品执行性能测试、功能测试、系统测试等一系列操作生成的测试报告文档。一份清楚记录、分析精确的测试报告文档能帮助测试人员了解测试进度、记录产品的缺陷问题…

    科研百科 2022年10月26日
    277
  • 《开源精选》是我们分享github、gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个智慧物业综合管理平台——microcommunity…

    2022年6月20日
    465
  • 软件功能 1、快速绘制铝合金门窗立面图,并可以打印窗型图,提供给终端客户作订单确认。 2、支持建立系列、颜色、玻璃、配件等预设资料用于下单调用。 3、支持建立标准窗型库,方便直接调…

    科研百科 2024年8月7日
    68
  • 做施工进度的软件 随着现代建筑行业的不断发展,施工进度管理已经成为了一个十分重要的问题。通过使用专门的施工进度软件,我们可以更加高效地管理施工进度,确保工程按时按质完成。 施工进度…

    科研百科 2024年8月12日
    27
  • 科研项目合理报账规则是什么? 科研项目合理的报账规则是保证科研项目正常进行和经费使用的前提条件。合理的报账规则能够帮助科研项目管理人员更好地管理科研项目经费,保证科研项目的顺利进行…

    科研百科 2024年4月11日
    112
  • 经验总结|一张图让你清晰酒店项目开发建设的工作流程 “鉴江马”汇总整理的酒店项目开发建设工作流程图 有不少朋友向“鉴江马”私信咨询酒店项目开发建设的工作流程,有些朋友的留言已及时回…

    2022年6月18日
    381
  • 细胞全流程质量管理系统 细胞全流程质量管理系统是一种用于细胞培养和繁殖的质量管理系统,它涵盖了从细胞采集到细胞培养和繁殖的所有环节,包括细胞获取、处理、运输、培养和检测等。 细胞全…

    科研百科 6天前
    0
网站地图