C++课设:简单画图程序
c语言课程设计流程图

c语言课程设计流程图一、教学目标本课程旨在通过C语言的学习,让学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生编程思维和实际编程能力,为学生进一步学习计算机科学和软件工程打下基础。
具体目标如下:1.理解C语言的基本语法和规则。
2.掌握基本数据类型、运算符和控制结构。
3.了解函数的定义和调用。
4.能够使用C语言编写简单的程序。
5.能够调试和运行C语言程序。
6.能够阅读和理解C语言程序。
情感态度价值观目标:1.培养学生对计算机科学的兴趣和热情。
2.培养学生解决问题的能力和创新思维。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识。
具体安排如下:1.第一章:C语言概述,介绍C语言的基本概念、特点和应用。
2.第二章:数据类型和运算符,介绍基本数据类型、运算符及其使用。
3.第三章:控制结构,介绍条件语句、循环语句等控制结构的使用。
4.第四章:函数,介绍函数的定义、声明和调用,以及常用的库函数。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解,让学生掌握C语言的基本知识和概念。
2.讨论法:通过小组讨论,培养学生的合作能力和解决问题的能力。
3.案例分析法:通过分析典型案例,让学生理解C语言的应用和编程思维。
4.实验法:通过编写和调试C语言程序,提高学生的实际编程能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)2.参考书:《C Primer Plus》(Deitel)3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境(如Code::Blocks、Visual Studio等)通过以上教学资源的使用,我们将丰富学生的学习体验,提高学生的学习效果。
五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用多种评估方式,包括平时表现、作业、考试等。
C语言实用程序设计100例流程图

C谈话真用步调100例之阳早格格创做第一篇前提取普及真例1利用库函数编写基础隐现步调真例2变量属性真例3运算符取典型真例4闭于步调结构真例5隐现函数直线图真例6二分法选代的应用真例7多变的坐圆体真例8一维整型数组应用(1)真例9一维整型数组应用(2)真例10一维整型数组应用(3)真例11一维整型数组应用(4)真例12二维数组应用(1)——隐现杨辉三角真例13二维数组应用(2)——魔圆阵真例14字符数组应用(1)——逻辑推断真例15字符数组应用(2)——数据模拟真例16二维数组应用——字符比较真例17利用指针举止数据处理真例18指针取字符串真例19利用指针处理二维数组真例20一级指针真例21利用指针传播参数值真例22结构体的应用真例23链表的应用(1)真例24链表的应用(2)真例25链表的应用(3)真例26同用体的应用真例27罗列典型应用真例28位运算购例29义件加稀真例30文献的按记录随机读写第二篇图形取多媒介真例31改变笔墨背景致真例32及本颜色树坐真例33创造表格真例34创造百般的椭圆真例35劣好的透视图形真例36错位窗心真例37能移动的矩形真例38多变的弥补矩形真例39黄乌相间的矩形取圆真例40六叶图案真例41特殊图案真例42国际象棋棋盘真例43创造楼梯真例44使用线典型函数树坐多个汉字真例45乌色群面真例46饼图购例47产品合线图真例48直圆图真例49变大变色的拒形取国真例50多变的弥补多边形真例51流星球真例52小球动向碰碰购倒53多,直线真例54多变的圆取环真例55柔好的球体真例56疏通的小车真例57统计动画消得次数真例58运止的时钟真例59直降飞机真例60演绎“死命游戏”真例61猜猜瞅购例62艺术浑屏购倒63创造火焰真例64动向画造256条分歧颜色的直线真例65黑绿蓝三本色渐变第三篇概括小步调真例66二个矩阵相乘真例67艺术钟真例68家庭财务管造小步调真例69用系统时间真止随机数真例70闪动的多彩圆真例71查看系统有无鼠标真例72圆形光盘取矩形真例73动向渐变图案真例74往返二天间的小车真例75飘扬的黑旗真例76隐现蓝天黑云图形真例77百叶窗第四篇估计机等第考查上机试题(二级)第五篇估计机等第考查上机试题(三级)部分过程图真例1真例2真例3真例5真例6真例7递归函数真例8真例9真例真例真例真例13真例真例真例真例真例printf("%5d",a[i]) a[i]!=0是 可printf("\n") i++真例19真例真例21真例真例真例真例真例真例真例进造变换隐现真86真例878889真例91真例93 真例94定义整型数组变量a[N1][N2],max,min,i,j,row1,row2,column1,column2, (*ap)[4]ap=a row1=row2=column1=column2=0for( i=0; i<N1;i++)for( j=0; j<N1;j++)任性输进字符串搁到二维数组中max=min=a[0][0]for( i=0; i<N1;i++)for( j=0; j<N1;j++)max< *(*(ap+i)+j)T Fmax= *(*(ap+i)+j) ; row1=i;column1=j;min> *(*(ap+i)+j)T Fmin> *(*(ap+i)+j) ;row2=j;column2=j挨印最大值战最小值及它们天圆的止取列真例95真例96真例真例97(2)真例98真例99。
c语言程序设计流程图详解

c语言程序设计流程图详解介绍常见的流程图符号及流程图的例子。
本章例1 - 1的算法的流程图如图1 - 2所示。
本章例1 - 2的算法的流程图如图1 - 3所示。
在流程图中,判断框左边的流程线表示判断条件为真时的流程,右边的流程线表示条件为假时的流程,有时就在其左、右流程线的上方分别标注“真”、“假"或“T”、“F”或“Y”、“N”注“真”、“假”或“T”、“F”或“Y”、“N”另外还规定,流程线是从下往上或从右向左时,必须带箭头,除此以外,都不画箭头,流程线的走向总是从上向下或从左向右。
2。
算法的结构化描述早期的非结构化语言中都有go to语句,它允许程序从一个地方直接跳转到另一个地方去。
执行这样做的好处是程序设计十分方便灵活,减少了人工复杂度,但其缺点也是十分突出的,一大堆跳转语句使得程序的流程十分复杂紊乱,难以看懂也难以验证程序的正确性,如果有错,排起错来更是十分困难。
这种转来转去的流程图所表达的混乱与复杂,正是软件危机中程序人员处境的一个生动写照。
而结构化程序设计,就是要把这团乱麻理清。
经过研究,人们发现,任何复杂的算法,都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成,因此,我们构造一个算法的时候,也仅以这三种基本结构作为“建筑单元”,遵守三种基本结构的规范,基本结构之间可以并列、可以相互包含,但不允许交叉,不允许从一个结构直接转到另一个结构的内部去。
正因为整个算法都是由三种基本结构组成的,就像用模块构建的一样,所以结构清晰,易于正确性验证,易于纠错,这种方法,就是结构化方法。
遵循这种方法的程序设计,就是结构化程序设计.相应地,只要规定好三种基本结构的流程图的画法,就可以画出任何算法的流程图.(1) 顺序结构顺序结构是简单的线性结构,各框按顺序执行.其流程图的基本形态如图1 - 4所示,语句的执行顺序为:A→B→C。
(2)选择(分支)结构这种结构是对某个给定条件进行判断,条件为真或假时分别执行不同的框的内容.其基本形状有两种,如图1-5 a)、b)所示.图1—5 a)的执行序列为:当条件为真时执行A,否则执行B;图1 — 5 b)的执行序列为:当条件为真时执行A,否则什么也不做.(3) 循环结构循环结构有两种基本形态: while型循环和do — while型循环。
第3章 最简单的C程序设计[详版课资]
![第3章 最简单的C程序设计[详版课资]](https://img.taocdn.com/s3/m/44edddb04afe04a1b071defb.png)
说明
➢ 两个整数相除的结果为整数
如5/3的结果值为1,舍去小数部分
如果除数或被除数中有一个为负值,舍入方向 不固定。例如,-5/3,有的系统中得到的结 果为-1,在有的系统中则得到结果为-2
VC++采取“向零取整”的方法
如5/3=1,-5/3=-1,取整后向零靠拢
➢ % 运算符要求参加运算的运算对象(即操作数) 为整数,结果也是整数。如8%3,结果为2
p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(”%f\n%f\n%f\n”,p1, p2, p3);
return 0;
}
课堂优质
8
3.2 数据的表现形式及其运算
3.2.1 常量和变量
3.2.2 数据类型
3.2.3 整型数据
3.2.4 字符型数据
3.2.5 浮点型数据
课堂优质
11
3.2.1 常量和变量
3.常变量:const int a=3; 4.标识符:一个对象的名字大小写字母是不同的字符 ➢ C语言规定标识符只能由字母、数字和下划线3
种字符组成,且第一个字符必须为字母或下划线 ➢ 合法的标识符:如sum,average, _total,
Class, day, BASIC, li_ling ➢ 不合法的标识符:M.D.John,¥123,#33
(2) 如果int型与float或double型数据进行运算, 先把int型和float型数据转换为double型,然 后进行运算,结果是double型
(3)字符型数据与整型数据进行运算,就是把字符的 ASCII代码与整型数据进行运算
课堂优质
30
3.2.7 运算符和表达式
C语言图形编程入门指南

C语言图形编程入门指南C语言作为一种广泛应用于软件开发领域的编程语言,具有高效、灵活和可移植的特点。
而图形编程则是C语言中一个重要的应用领域,它可以帮助开发者创建各种各样的图形界面和交互式应用程序。
本文将为读者提供一份C语言图形编程入门指南,帮助初学者快速入门并掌握基本的图形编程技巧。
一、图形编程的基本原理图形编程主要涉及两个方面:图形绘制和用户交互。
图形绘制是指在屏幕上绘制各种图形元素,如点、线、矩形和圆等。
用户交互则是指通过鼠标、键盘等输入设备与程序进行交互,实现用户的操作和反馈。
在C语言中,图形编程主要依赖于图形库的支持。
常见的图形库有BGI (Borland Graphics Interface)和OpenGL等。
BGI是一种基于DOS操作系统的图形库,而OpenGL则是一种跨平台的图形库,支持多种操作系统和硬件平台。
二、BGI图形编程入门BGI图形编程是C语言中最常用的图形编程方法之一。
它提供了一系列的函数和命令,可以实现图形绘制和用户交互。
下面是一个简单的BGI图形编程示例:```c#include <graphics.h>int main(){int gd = DETECT, gm;initgraph(&gd, &gm, "");circle(200, 200, 100);closegraph();return 0;}```上述代码使用了BGI图形库中的`initgraph`函数来初始化图形环境,`circle`函数用于绘制一个圆,`getch`函数用于等待用户按下任意键,`closegraph`函数用于关闭图形环境。
通过这段代码,我们可以在屏幕上绘制一个半径为100的圆,并等待用户的操作。
三、OpenGL图形编程入门OpenGL是一种跨平台的图形库,它提供了丰富的函数和命令,可以实现高效的图形渲染和复杂的图形效果。
下面是一个简单的OpenGL图形编程示例:```c#include <GL/glut.h>void display(){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5);glVertex2f(0.5, -0.5);glVertex2f(0.5, 0.5);glVertex2f(-0.5, 0.5);glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutCreateWindow("OpenGL Example");glutDisplayFunc(display);glutMainLoop();return 0;}```上述代码使用了OpenGL图形库中的`glutInit`函数来初始化图形环境,`glutCreateWindow`函数用于创建一个窗口,`glutDisplayFunc`函数用于指定绘制函数,`glutMainLoop`函数用于进入消息循环。
c++简单画图程序

目录1. 基本功能描述 (1)2. 设计思路 (1)3. 软件设计 (4)设计步骤 (4)界面设计 (6)关键功能的实现 (7)4. 结论与心得体会 (8)5. 思考题 (8)6. 附录 (10)调试报告 (10)测试结果 (10)关键源代码 (10)简单画图程序1. 基本功能描述简单画图程序实现了常见图形的绘制、图形属性的设置和图形数据的暂存等功能。
该程序的具体功能模块包括以下几项:1) 图形绘制模块。
该模块实现直线段、椭圆、矩形等图形的绘制功能。
在鼠标移动的过程中能实时显示当前绘制的图形。
2) 图形属性设置模块。
该模块实现绘图线条的线宽,线色,图形填充色等属性设置功能。
3) 图形数据暂存模块。
该模块实现直线段、椭圆、矩形等图形数据暂存功能,涉及图形的坐标、线宽、线色、填充色等数据。
2. 设计思路1) 对需要用到的变量进行初始化。
2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
4) 选择图形或其它属性,可进行下一次绘制。
5) 程序的流程图如下:图1 程序流程图3. 软件设计设计步骤1) 创建单文档创建一个MFC AppWizard[exe]工程,命名为“LiYuJing”,如图1所示,并创建单文档,如图2所示。
创建成功后,系统自动生成相应的类,如图3所示。
图2 创建工程图3 创建单文档图4 生成类2) 编辑菜单添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。
【教案】第四课 程序设计基础 编写一个简单的C语言程序

第四课程序设计基础活动主题2 编写一个简单的C语言程序教学内容分析本课是走进程序世界的第2课,是程序设计知识的基础。
主题2以Dev-C++为例介绍了C语言的集成编译环境,描述了C语言的基本逻辑结构和基础语法,并展示了一个完整的输入、编辑、保存、编译、运行的程序设计过程。
对于开展C语言程序设计来说,了解一个基本的集成编译环境,不但有用,而且必要。
教材完整地展现了C语言从输入源代码到编译到产生运行结果的全过程,这一操作技能是学习后续程序设计课程所必备的。
通过本课的学习,学生不但了解C语言的基本逻辑结构和基础语法,同时还认识了C 语言从源代码到生成可执行文件的全过程,这使得学生在学习具体的C语言程序设计时,能够对整个计算机软件工作的原理有一个全局性的认识,使之不仅见树,而且见林。
这对于接下去深入学习了解编程语言的工作流程有大帮助,同时还有利于帮助学生建立起计算思维。
教学对象分析在小学阶段,学生曾经学习过 Seratch编程,所以对于集成编译环境的概念应该不会特别陌生,但是C语言的交互方式与之前的 Scratch有本质的差别,教师在教学中要注意这点。
由于是第一次接触需要大量使用英文字符的编程,所以在教学中尽量用有趣的案例开展教学,让学生再“玩中学”“做中学”,让学生再有趣的交互体验中感受程序设计的魅力,激发起学生的学习热情和专研精神。
在第一次运行源代码的时候,学生可能会遇到一些困难,比如出现各种类型的编译错误,由于提示信息是英文的,部分学生阅读会比较吃力。
教师要有耐心引导学生注意仔细观察辨识提示信息,找到错误的根源。
这一过程虽然困难,但也是引导学生不畏困难,培养科学探究精神的时机。
教学目标1.了解Dev-C++编译运行C语言源代码的方法2.2.了解C语言的输入方式,能够识别C语言的基本语法元素3.掌握Dev-C++的启动和体验编写简单C语言程序教学重点和难点1.教学重点。
(1)程序及程序的执行过程(2)C语言的基本结构和语法(3)体验编写简单C语言程序的过程2.教学难点。
c++课程设计(简易绘图程序)

目录1、需求与功能分析 (1)2、系统总体框架 (2)3、模块设计与分析 (3)3.1画图模块 (3)3.2贴图模块 (3)3.3窗口模块 (4)3.4菜单模块 (4)3.5工具栏与状态栏模块 (4)4、类的设计与分析 (4)4.1、CAboutDlg类 (4)4.2、CChildFrame类 (4)4.3、CDib类 (4)4.4、CDrawingDoc类 (5)4.5、CDrawingView类 (6)4.6、CMainFrame类 (7)4.7、CSettingDlg类 (7)5、特色算法分析 (8)5.1 CDib类中的显示bmp位图 (8)5.2 CDrawingView类中的画图部分 (10)6、功能测试 (13)7、存在的不足与对策 (16)8、程序源代码 (17)9、使用手册 (17)10、参考文献 (20)1、需求与功能分析为了检验一个学期以来自己学习c++这门课程能够学到多少知识,加上原来就对图像处理就比较感兴趣,曾经更有想过要做一个可以合成红蓝3D图片的一款软件,就是那种需要带上红蓝眼镜才可以看到3D效果的那种图片,自己也有用photoshop做过这样的图片,但是photoshop需要调很多东西才能合成这样的图片,而且还要用相机送两个不同的角度拍两张照片作为源图片去合成红蓝3D图片,虽然我知道原理并不难,但是当我选择了”简易绘图程序”这个课程设计的题目之后,才发现每实现一个功能都需要花很多的精力,而且实现那些功能之后还会发现各种各校的bug,需要细心去寻找解决的办法。
如今课程设计也要上交,一样还有很多我想实现的功能都还没实现,最终也没有实现我想要实现的功能---合成红蓝3D图片。
只做了一些简单的绘图功能。
功能分析,目前这个软件的主要功能有如下:1、画直线:通过OnLine()函数实现。
2、画矩形:通过OnRectangle()函数实现。
3、画椭圆:通过OnEllipse()函数实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单画图程序1.基本功能描述本次课程设计的任务是利用计算机和VC开发环境编写一个简单画图程序,该程序的设计指标(即主要功能)有:①用鼠标拖动绘制圆、椭圆、矩形,线等基本图形;②能控制画笔的线宽和颜色;③能对图形进行颜色填充;④在鼠标移动的过程中能实时显示当前绘制的图形。
除了以上几点功能,我有另外添加了工具栏、铅笔、橡皮等功能来使程序更方便地让用户使用,简化了人机交互的过程。
2.设计思路首先是界面的问题,既然课设的题目是简单画图,那在建立工程的时候就要选择文档结构而不是以前做的基于对话框。
可选择单文档结构或多文档结构,但想到画图界面一般只有一个,从简洁的角度考虑,选择单文档结构。
而且用户界面在设计的时候要尽可能简单美观,一目了然,对相应功能有图标提示,使用户方便使用。
然后便是画图功能的具体实现。
分析课设要求,可以发现功能一要求的的椭圆、矩形、直线可以分别通过Ellipse();、Rectangle();、MoveTo();、LineTo();这四个函数来实现。
功能二控制画笔线宽和颜色可以给二者分别关联参数,通过改变线宽参数值来控制线宽,通过调用通用对话框改变颜色参数值来控制颜色。
功能三对图形进行颜色填充虽以前未接触过,但查阅资料后发现可以调用ExtFloodFill();并合理设定参数值来实现。
功能四的实时显示功能可以通过调用MouseMove();函数来实现。
这些功能需要建立菜单资源来表示各个功能选项,并建立相应的消息响应函数来进行实现。
另外,画图程序主要是通过鼠标来进行操作,所以要对鼠标消息的响应及处理函数多下功夫来思考和编写。
至于额外添加的功能,工具栏通过添加工具栏资源和关联相应菜单中画图功能ID实现;铅笔、橡皮的功能则是利用MouseMove();函数,在其中做了一些改动来实现。
图1 程序流程图MouseMove 函数鼠标左键弹起响应函数m_ptOldOrigin=point;2.1.程序流程图:开始 变量初始化(m_nDrawType ,m_clr 等)铅笔橡皮点直线椭圆线宽线型设置颜色选择填充响应函数 m_Pen(m_Eraser)=TRUE并将其他橡皮(铅笔)、填充等所关联变量置为FALSE.响应函数 m_nDrawType =1/2/3/4;对应点、直线、矩形、椭圆矩形响应函数 创建相应对话框IDOK==1?更改变量m_clr (m_nLineWidth ,m_nLineStyle)参数值响应函数 m_Fill=TRUE 并将其他橡皮、铅笔等所关联变量置为FALSE.鼠标左键按下 响应函数m_ptNewOrigin=point; 进行填充铅笔功能橡皮功能画点画直线画矩形画椭圆结束判断各参数值以确定功能3.软件设计3.1.设计步骤1)打开VS2010,选择新建项目,选中MFC应用程序,标题为CWN_Graphic;2)选择单文档结构,其他为默认值,点击完成。
3.2 .界面设计3.2.1.添加菜单1)选择资源视图,鼠标右键,添加,资源;2)在资源视图中打开添加的菜单资源,将各个功能的名称添加进去并合理安排,并设置好相应的ID,如图2:图2编辑菜单及相应ID3.2.2 .添加工具栏1)在资源视图下右键选择添加资源,ToolBar;2)打开新建的工具栏,在上面添加各个小按钮,按钮图像自行画出;3)将每个按钮的ID与菜单项一一对应起来,如图3:图3工具栏样式及ID3.3.关键功能实现1)打开类向导;2)为各个菜单项添加消息函数,如图4:图4 添加消息函数相关ID、关联变量及响应函数如表1:表1相关功能ID 及所关联变量名称ID 关联变量响应函数点IDM_DOT m_nDrawType = 1 OnDot()直线IDM_LINE m_nDrawType = 2 OnLine()矩形IDM_RECTANGLE m_nDrawType = 3 OnRectangle()椭圆IDM_ELLIPSE m_nDrawType = 4 OnEllipse()画笔IDM_PEN m_Pen = TRUE OnPen()填充IDM_FILL m_Fill = TRUE OnFill()橡皮(小)IDM_ERASER1 - OnEraser1()橡皮(中)IDM_ERASER2 - OnEraser2()橡皮(大)IDM_ERASER3 - OnEraser3()线宽+线型IDM_LINE_WIDTH - OnLineWidth()颜色IDM_Color - OnColor()3)按照所需在CWN_GraphicView.h中添加变量并在CWN_GraphicView.cpp中对变量初始化:UINT m_nDrawType = 0;//绘画类型初始为0CPoint m_ptOldOrigin = 0;//坐标点初始为(0,0)CPoint m_ptNewOrigin = 0;UINT m_nLineWidth = 0;//线宽初始为0UINT m_EraserWidth = 1;//橡皮初始大小为1INT m_nLineStyle = 0;//线宽初始为0BOOL m_Pen = FALSE;//画笔功能未被选中BOOL m_Eraser = FALSE;//橡皮功能未被选中BOOL m_LButtonDown = FALSE;//鼠标左键未按下BOOL m_Fill = FALSE;//填充功能未被选中COLORREF m_clr = RGB(0,0,0);//颜色初始值为黑色4)在各响应函数中添加相应代码,例如:/**********左键按下************//*该函数实现了再鼠标左键按下时确定按下点的坐标、将左键被按下置为1和判断是否填充选项被选中,若选中则进行填充,未选中则无操作*/void CCWN_GraphicView::OnLButtonDown(UINT nFlags , CPoint point){m_ptNewOrigin=point; //将当前点坐标传给变量m_ptOldOrigin=point;m_LButtonDown=TRUE; //左键按下赋值1if(m_Fill==TRUE) //填充功能{CClientDC dc(this);HBRUSH hBrush=CreateSolidBrush(m_clr); //选择画刷dc.SelectObject(hBrush);dc.ExtFloodFill (m_ptNewOrigin.x,m_ptNewOrigin.y,RGB(0,0,0),0);//该函数将使用当前刷子填充显示表面区域}CView::OnLButtonDown(nFlags,point);}/***********左键松开************//*该函数通过在鼠标左键松开时,将松开点坐标传给PC,并由之前选择的绘画类型来判断要进行的绘画操作*/void CCWN_GraphicView::OnLButtonUp(UINT nFlags , CPoint point){m_LButtonDown=FALSE; //左键松开赋值0CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr); //创建画笔画刷dc.SelectObject (&pen); //选择画笔CBrush*pBrush=CBrush::FromHandle ((HBRUSH)GetStockObject(NULL_BRUSH));dc.SelectObject (pBrush); //选择画刷m_ptNewOrigin=point; //左键松开的坐标点送给m_ptNewOriginswitch(m_nDrawType){case 1:/*******画点*******/dc.SetPixel(point,m_clr);break;case 2:/*******画线*********/dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);break;case 3:/**********画矩形**********/dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin));break;case 4:/*********画椭圆**********/dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin));break;}CView::OnLButtonUp (nFlags,point);}/*************线型+线宽设置*********//*该函数在线型线宽功能被选择时,会生成一个线型线宽设置对话框(之前在资源中添加和编辑的对话框资源),并将用户操作后的线型线宽值传给PC*/void CCWN_GraphicView::OnLineWidth(){// TODO: 在此添加命令处理程序代码CSettingDlg line_dlg;line_dlg.m_nLineWidth = m_nLineWidth ; //将先前设置的线宽回传给对话框line_dlg.m_nLineStyle = m_nLineStyle; //将先前设置的线型回传给对话框if(IDOK==line_dlg.DoModal ()){m_nLineWidth=line_dlg.m_nLineWidth ;m_nLineStyle = line_dlg.m_nLineStyle ;}}/*************动态显示函数******************//*该函数单独写出,配合OnMouseMove();函数可实现动态显示的功能*/void CCWN_GraphicView::Draw(){CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);dc.SelectStockObject(NULL_BRUSH);int drawmode=dc.SetROP2(R2_NOTXORPEN);/*R2_NOTXORPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜色进行“或”操作,从而得到像素最终显示的颜色。
*/switch(m_nDrawType){case 2:dc.MoveTo(m_ptOldOrigin);dc.LineTo(m_ptNewOrigin);break;case 3:dc.Rectangle(CRect(m_ptOldOrigin,m_ptNewOrigin));break;case 4:dc.Ellipse(CRect(m_ptOldOrigin,m_ptNewOrigin));break;}dc.SetROP2(drawmode);dc.SelectObject(oldPen);}/*************MOUSE MOVE***************//*此函数与前面的动态显示函数(Draw();)进行配合便可实现在鼠标移动时的实时显示功能,思路是在绘图时,先用屏幕背景色覆盖掉鼠标移动前的画面,然后用选定的画笔颜色重新绘制下一次鼠标移动的画面*/void CCWN_GraphicView::OnMouseMove(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);if(m_LButtonDown!=FALSE){Draw();m_ptNewOrigin=point;Draw();if(m_Pen==TRUE) //铅笔功能{m_nDrawType=0; //画图类型改为初始值,以免多重画图dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);//修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;}if(m_Eraser==TRUE) //橡皮功能{m_nDrawType=0;CPen pen(m_nLineStyle,m_EraserWidth,RGB(255,255,255));dc.SelectObject(&pen);dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);//修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;}}dc.SelectObject(oldPen);CView::OnMouseMove(nFlags, point);}/************选择铅笔**************//*该函数在选择铅笔功能后,将铅笔功能置为真,其他有干扰的功能置为假*/void CCWN_GraphicView::OnPen(){// TODO: 在此添加命令处理程序代码m_Pen = TRUE; //画笔被选中m_Fill = FALSE; //取消填充功能m_Eraser = FALSE; //取消橡皮功能}4.结论与心得体会本次课程设计虽说是“简单”画图程序的设计,但真要是自己做起来,感觉一点也不简单。