C++画图
完整版)CAD制图入门教程
完整版)CAD制图入门教程CAD制图入门教程在研究CAD制图前,了解工作界面是提高绘图效率的基础。
CAD的显示界面与Windows的其他应用软件相似,整个绘图窗口由以下几部分组成:1.标题栏和菜单栏:屏幕的顶部是标题栏,如果刚刚启动CAD或当前图形文件尚未保存,则显示Drawing。
紧贴标题栏的是菜单栏,系统默认有十一列下拉菜单,菜单栏的右边是绘图窗口的操作按钮。
2.工具栏:常用的有标准工具栏、对象特性工具栏、绘图工具栏和修改工具栏。
3.绘图窗口:在CAD工作界面上,最大的空白区域就是绘图区,也称为视窗,用户只能在绘图区绘制图形。
利用视窗缩放功能,可使绘图区无限增大或缩小。
当光标移至绘图区域内时,便出现了十字光标和拾取框。
绘图区的左下角有两个互相垂直的箭头组成的图形,这有可能是CAD的坐标系(WCS),也可能是用户坐标系(UCS)。
4.命令行提示区:命令行用于接受用户的命令或参数输入。
在绘图时,应特别注意这个窗口,输入命令后的提示信息,如错误信息、命令选项及其提示信息,都将在该窗口中显示。
5.状态行:显示当前图形的绘制状态,如光标的坐标、捕捉、栅格、正文等功能的开关状态。
为了更好地适应个人需求,可以对窗口元素进行定制:1.工具栏:视图→工具栏,选择所需工具栏后关闭。
或者在任意工具栏上点击右键,点击所需工具栏名称,即可打开或关闭相应工具栏。
2.命令行和绘图窗口:工具→选项→显示,在此选项卡中可改变命令行和绘图窗口的大小、颜色、字体等,也可将其全部恢复为系统缺省值。
将光标称至命令行窗口上边框,当鼠标箭头成双向箭头时,按住鼠标左键上下拖动即可改变命令行窗口行数。
(F2快捷键:命令行和文本窗口的切换。
)状态行开关按钮的选项定制:在按钮上右击鼠标→设置。
F6键则在坐标显示中切换,控制坐标显示特性。
在新建图形文件时,可以通过以下方式进行:1.文件→新建2.标准工具栏→新建3.命令:New4.利用启动对话框新建文件,该对话框有四个选项卡:打开、新建、保存和另存为。
C语言画图函数
C语言画图函数与图形有关的函数GRAPHICS.H 库文件bar【功能】画出一条栏目。
【原型】void far bar(int left,int top,int right,int bottom)【位置】graphics.hgraphics.h【参见】bar3d,setfillstyle,rectanglebar3d【功能】画出一条3-D栏目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag) 【位置】graphics.h【参见】barcircle【功能】以(x,y)为圆心按照指定的半径画出一个圆。
【原型】void far circle(int x,int y,int radius)【位置】graphics.h【参见】arccleardevice【功能】清除图形画面。
【原型】void far cleardevice(void)【位置】graphics.h【参见】clearviewportclearviewport【功能】清除当前可视区域。
【原型】clearviewport(void)【位置】graphics.h【参见】setviewport,cleardeviceclosegraph【功能】关闭图形系统。
【原型】void far closegraph(void)【位置】graphics.h【参见】initgraphdetecgraph【功能】通过检查硬件确定使用的图形驱动程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode)【位置】graphics.h【参见】initgraph,graphresultdrawpoly【功能】画出一个多边形的轮廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])【位置】graphics.h【说明】polypoints中包括一共numpoints对数值。
C语言如何实现画图教程
C语⾔如何实现画图教程 C语⾔有丰富的数据结构和运算符。
包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,⽤来实现各种数据结构的运算。
以下是店铺为⼤家搜索整理的C语⾔如何实现画图教程,希望能给⼤家带来帮助!更多精彩内容请及时关注我们应届毕业⽣考试⽹! 程序中定义了⼏个特殊键: "V”:画笔提起 "W”:开始画图 "R”:开始擦图 "S”:当前图形存⼊⽂件 "E”:调出已有⽂件 "C”:画圆 程序⼀运⾏,屏幕上出现⼀个黄⾊的`边框来设定画图的区域,区域中间出现提起的画笔符号,当按下”W“键时,画笔符号变为,此时可移动⽅向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下”R“键时,画笔符号变为,此时可移动⽅向键来擦图;在画图过程中,按下“C”键,可画出⼀个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进⾏编辑。
3.源程序清单 # include "graphics.h" # include "stdio.h" # include "fcntl.h" # include "stdlib.h" main() void save(),load(); void *wg,*rg,*vg,*fy; int driver,mode; int c=RED; int x=320,y=225; int x1,y1,x2,y2; int k,k1,k2; /* initialize grapher */ detectgraph(&driver,&mode); initgraph(&driver,&mode,"c:\tc"); /* write the pen */ bar(200,10,206,16); line(203,7,200,10); line(203,7,206,10); line(243,7,240,16); line(243,7,246,16); line(283,7,280,10); line(283,7,286,10); line(283,7,283,16); /* save the pen */ wg=malloc(imagesize(200,7,206,16)); rg=malloc(imagesize(240,7,246,16)); vg=malloc(imagesize(280,7,286,16)); fy=malloc(imagesize(200,7,206,16)); getimage(200,7,206,16,wg); getimage(240,7,246,16,rg); getimage(280,7,286,16,vg); cleardevice(); /* write the box */ setcolor(YELLOW); rectangle(4,19,637,447); x1=x-3; y1=y+1; x2=x+3; y2=y+10; getimage(x1,y1,x2,y2,fy); putimage(x1,y1,vg,XOR_PUT); /* receive the command */ for (;;) while (bioskey(1)==0); k=bioskey(0); putimage(x1,y1,fy,AND_PUT); if (((k&0x00ff)|0x00)==0) k1=k&0xff?0:k>>8; /* k1 is the specialkey value */ else k2=k&0x00ff; /* k2 is the non-specialkey value */ if (((k&0x00ff)|0x00)==0) /* Special key */ switch(k1) case 45: restorecrtmode(); exit(0); case 72: if (y>20) case 75: if (x>5) x=x-1; break; case 77: if (x<636) x=x+1; break; case 80: if (y<446) y=y+1; break; case 71: if ((x>5)&&(y>20)) x=x-1; y=y-1; break; case 79: if ((x>5)&&(y<446)) x=x-1; y=y+1; break; case 73: if ((x<636)&&(y>20)) x=x+1; y=y-1; break; case 81: if ((x<636)&&(y<446)) x=x+1; y=y+1; break; x1=x-3; y1=y+1; x2=x+3; y2=y+10; getimage(x1,y1,x2,y2,fy); /* non-special key */ switch(k2) case 118: /* 'v' */ case 86: /* 'V' */ putimage(x1,y1,vg,OR_PUT); break; case 119: /* 'w' */ case 87: /* 'W' */ putimage(x1,y1,wg,OR_PUT); putpixel(x,y,c); break; case 114: /* 'r' */ case 82: /* 'R' */ putimage(x1,y1,rg,OR_PUT); putpixel(x,y,BLACK); break; case 115: /* 's' */ case 83: /* 'S' */ save("pic.dat"); break; case 101: /* 'e' */ case 69: /* 'E' */ load("pic.dat"); break; case 99: /*'c'*/ case 67: /*'C'*/ setcolor(RED); circle(x,y,20); break; default:continue; /* function for screen picture save */ void save(char *fname) register long j; char far *ptr; fp=fopen(fname,"wb"); for(i=0;i<4;i++) outportb(0x3CE,4); outportb(0x3CF,i); ptr=(char far *) 0xA0000000L; for (j=0;j<38400L;j++) putc(*ptr,fp); ptr++; fclose(fp); outportb(0x3CF,0); /* function for screen picture display */ void load(char *fname) FILE *fp; register int i; int k4=1; register long j; char far *ptr; fp=fopen(fname,"rb"); for (i=0;i<4;i++) outportb(0x3C4,2); outportb(0x3C5,k4); ptr=(char far *)0xA0000000L; for (j=0;j<38400L;j++) *ptr=getc(fp); ptr++; k4*=2; fclose(fp); outportb(0x3C5,0xF); 4.结束语 该程序在Turbo C 2.0环境下运⾏通过,使⽤效果良好。
C++绘图介绍
BOOL CreatePen(int nPenStyle, int nWidth,COLORREF crColor); nPenStyle : PS_SOLID PS_DOT PS_DASH PS_DASHDOT PS_DASHDOTDOT nWidth : 线的宽度 线宽>1均产生实线 线的宽度(线宽 均产生实线) 线宽 均产生实线
1.2 选择绘图工具
画笔,画刷,字体等等。 画笔,画刷,字体等等。 系统默认的画笔和画刷: 系统默认的画笔和画刷: 默认的画笔画出的线为宽度为1像素 默认的画笔画出的线为宽度为 像素 的黑色实线。 默认的画刷是白色的, 的黑色实线 。 默认的画刷是白色的 , 己用默认的画刷填充图形时, 己用默认的画刷填充图形时 , 图形的 内部填充成白色。 内部填充成白色。
RGB(0,0,0);黑色 黑色RGB(255,255,255);白色 黑色 白色 RGB(128,0,0);深红 深红RGB(255,0,0);淡红 深红 淡红 RGB(0, 128,0);深绿 深绿RGB(0, 255,0);淡绿 深绿 淡绿 RGB(0,0,128);深蓝 深蓝RGB(0,0.255);淡蓝 淡蓝 深蓝 RGB(128,128,0);深黄 深黄 RGB(255,255,0);淡黄 淡黄 RGB(0,128,128);深青 深青 RGB(0,255,255);淡青 等。 淡青
选择画笔2 选择画笔
画刷的2种初始化方法: 画刷的2种初始化方法: BOOL CreateSolidBrush( COLORREF crColor); BOOL CreateHatchBrush( int nIndex,COLORREF crColor);
影线方式:水平,垂直, 影线方式:水平,垂直,斜,网格等
c语言画图函数
(一) 像素函数putpixel() 画像素点函数功能:函数putpixel() 在图形模式下屏幕上画一个像素点。
用法:函数调用方式为void putpixel(int x,int y,int color); 说明:参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。
此函数相应的头文件是graphics.h 返回值:无例:在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);getpixel()返回像素色函数功能:函数getpixel()返回像素点颜色值。
用法:该函数调用方式为int getpixel(int x,int y); 说明:参数x,y为像素点坐标。
函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。
这个函数相应的头文件为graphics.h 返回值:返回一个像素点色彩值。
例:把屏幕上(8,6)点的像素颜色值赋给变量color。
color=getpixel(8,6);编辑本段(二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。
这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。
有两种线宽及几种线型可供选择,也可以自己定义线图样。
下面分别介绍直线和线型函数。
line() 画线函数功能:函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法:该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明:参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
C语言中的画图函数
C语言中的画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。
本节对这些函数作一全面的介绍。
1、画点I. 画点函数 void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点。
对于颜色color 的值可从表3中获得而对x, y是指图形象元的坐标。
在图形模式下,是按象元来定义坐标的。
对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。
屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。
TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。
关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。
II、有关坐标位置的函数int far getmaxx(void);返回x轴的最大值。
int far getmaxy(void); 返回y轴的最大值。
int far getx(void); 返回游标在x轴的位置。
void far gety(void); 返回游标有y轴的位置。
void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。
void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。
2、画线I. 画线函数TURBO C提供了一系列画线函数,下面分别叙述:void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。
void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。
应用C语言快速绘制由立方体构成的几何体
信息与电脑 China Computer&Communication
2016 年第 3 期
应用 C 语言ห้องสมุดไป่ตู้速绘制由立方体构成的几何体
陈 祺
(宁波市第二中学,浙江 宁波 315010)
摘 要:平时数学课上,老师在讲解立体几何题目时,总免不了要画大量立体图。但老师在黑板上徒手画的立体图形 时常不横平竖直,这在一定程度上降低了上课效率。针对这一问题,基于 C 语言基础内容,编写了一个快速绘制几何体 的程序。此程序可提高画图效率,使讲题效果变得更好。 关键词:C 语言;立体几何图形;快速绘制 中图分类号:TP312.1 文献标识码:A 文章编号:1003-9767(2016)03-070-02
1 程序设计
1.1 用户输入 首先程序需要包含头文件 <stdio.h>。接着,需要定义一 个 3*3 的 int 类型数组 A,通过循环来实现输入,并且将输 入的整数用 scanf 放到数组 A 中。在输入时,采用“Please input the value for A[i][j]”来引导用户输入。其中 i,j 代表 循环变量。 为了使用户后续方便对应自己输入的数字和显示出来的 图形,在这里将用户输入的矩阵显示出来,同样是通过循环 一行一行地使用 printf 打印。并且在显示输入矩阵前,显示 语句“Your input matrix is”来告知用户。 1.2 堆积立方体的实现 首先需定义一个 80*50 的 char 类型数组 B,用于打印立 体图形。选择数组大小为 80*50 保证了此数组可显示较复杂 的立体图形,若用户输入 1000,B 数组是无法完成绘制的, 因为超出了数组维度。因此,这个程序只能绘制一些较简单 的图形。 接着就要开始检索 A 矩阵中的每一个整数。首先考虑 A 中是非负整数的情况,判断条件为 if(A[a][b]>=0)。接下来是 将 A 矩阵映射到 B 矩阵。为使图像在 B 数组中央显示,规定 B 数组中央位置为第 42 行。通过寻找规律发现,A 数组中 A[a][b] 元素对应的立方体左上角顶点位置在 B 数组中对应 元素是 B[2a][6+4b-2a]。当然,随着立方体向上叠加,B[2a] [ 6+4b-2a] 的位置也会随之改变。当正在堆积第 kk 个立方体 时,A 数组中 A[a][b] 的元素对应的立方体的左上角顶点位 置在 B 数组中对应的元素是 B[41+2*a-2*(kk-1)][6+4*b-2*a]。
高级C制图理论考试
高级C制图理论考试 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT1. 道德是指人与人、个人与集体、个人与社会以及人对待自然的(B)的总和。
A、法律法规B、行为规范C、宪法D、人生观2. 职业道德是指从事一定职业的人们在职业实践活动中所应遵循的(C)和规范,以及与之相应的道德观念、情操和品质。
A、企业标准B、培训要求C、职业原则D、招聘条件3. 职业道德能调节从业人员与其(D)之间的关系,保证社会生活的正常进行和推动社会的发展与进步。
A、专业水平B、社会失业率C、就业岗位D、实践活动对象4. 爱岗敬业就是要把尽心尽责做好本职工作变成一种自觉行为,具有从事制图员工作的(B)。
A、职业道德B、自豪感和荣誉感C、能力D、热情5. 制图国家标准规定,(B)尺寸应优先选用5种基本幅面尺寸。
A、图框格式B、图纸幅面C、标题栏D、图框线6. 在机械图样中,粗线与细线的宽度比大约为(A)。
A、4:1B、3:1C、2:1D、1:17.平行投影法中的投射线与投影面相(C)时,称为正投影法。
A、倾斜B、平行C、垂直D、相交8. 用(A)沿物体不平行于直角坐标平面的方向,投影到轴测投影面上所得到的投影称为轴测投影。
A、平行投影法B、中心投影法C、透视投影法D、标高投影法9. 以下应用软件(C)属于计算机绘图软件A、WORDB、ExcelC、AUTO CADD、WINDOWS10. 打印机、绘图机、显示器等是(B)。
A、图形输入设备B、图形输出设备C、图形储存设备D、图形复印设备11. 计算机绘图的方法分为(B)绘图和编程绘图两种。
A、手工B、交互C、扫描D、自动12. 机械图样中常用的(A)有粗实线、细实线、虚线、波浪线等。
A、图线线型B、图框格式C、剖面轨迹D、尺寸界线13. 对圆弧标注半径尺寸时,尺寸线应由圆心引出,(C)指到圆弧上。
A、尺寸线B、尺寸界线C、尺寸箭头D、尺寸数字14. 侧垂线AB的投影ab垂直于()。
C语言画圆椭圆
C语言画图实验代码,包含画直线,画圆,椭圆#include "graphics.h"#include "conio.h"#include "dos.h"#include "math.h"#include "stdio.h"/* 直线中点算法*/void midpointline(int x0,int y0,int x1,int y1,int color ) {int x,y;int a,b,c,d,d1,d2;a=(y0-y1);b=(x1-x0);d=a+a+b;d1=a+a;d2=a+b+a+b;x=x0;y=y0;putpixel(x,y,color);while(x<x1){if(d<0){x++;y++;d+=d2;}else{x++;d+=d1;}putpixel(x,y,color);}}/* 直线DDA算法*/DDA_line(int x1,int y1,int x2,int y2,int color){int i;float increx,increy,x,y,length,xx,yy;if(abs(x2-x1)>abs(y2-y1))length=abs(x2-x1);elselength=abs(y2-y1);increx=(x2-x1)/length;increy=(y2-y1)/length;x=x1;y=y1;for(i=1;i<=length;i++)yy=y+0.5;putpixel((int)xx,(int)yy,color);x=x+increx;y=y+increy;}}/* 椭圆中点算法*/void MidBresenhamllipse(double a,double b,int color) {double x,y, d1,d2;x=0;y=b;d1=b*b+a*a*(-b+0.25);putpixel(x+300,y+200,color);putpixel(-x+300,-y+200,color);putpixel(-x+300,y+200,color);putpixel(x+300,-y+200,color);while(b*b*(x+1)<a*a*(y-0.5)){if(d1<=0){d1+=b*b*(2*x+3);x++;}else{d1+=b*b*(2*x+3)+a*a*((-2)*y+2);x++;y--;}putpixel(x+300,y+200,color);putpixel(-x+300,-y+200,color);putpixel(-x+300,y+200,color);putpixel(x+300,-y+200,color);}d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;while(y>0){{d2+=b*b*(2*x+2)+a*a*(-2*y+3);x++;y--;}else{d2+=a*a*(-2*y+3);y--;}putpixel(x+300,y+200,color);putpixel(-x+300,-y+200,color);putpixel(-x+300,y+200,color);putpixel(x+300,-y+200,color);}}/* 参数法画椭圆*/void cs_ellipse(int x0,int y0,int a,int b,int dt){int x,y,n,i;float t=0,t1;t1=dt*0.0174533;n=360/dt;moveto(x0+a,y0);for(i=1;i<n;i++){t=t+t1;x=x0+a*cos(t);y=y0+b*sin(t);lineto(x,y);}lineto(x0+a,y0);}void cs_Ellipse(int x0,int y0,int a1,int b1,int color1) {int i,x=x0,y=y0,a=a1,b=b1,color=color1;cs_ellipse(x,y,a,b,1);}/* 中点Bresenham算法画圆*/void BresenhemCircle(int x0,int y0,double r,int color){int x,y,d;x=0;y=(int)r;d=(int)(3-2*r);while(x<y){cirpot(x0,y0,x,y,color);if(d<0)d+=4*x+6;else{d+=4*(x-y)+10;y--;}x++;}if(x==y)cirpot(x0,y0,x,y,color);}int cirpot(int x0,int y0,int x,int y,int color){putpixel((x0+x),(y0+y),color);putpixel((x0+y),(y0+x),color);putpixel((x0+y),(y0-x),color);putpixel((x0+x),(y0-y),color);putpixel((x0-x),(y0-y),color);putpixel((x0-y),(y0-x),color);putpixel((x0-y),(y0+x),color);putpixel((x0-x),(y0+y),color);return(0);}/* 参数法画圆*/void cs_circle(int x0,int y0,int r,int dt){int x,y,n,i;float t=0,t1;t1=dt*0.0174533;n=360/dt;moveto(x0+r,y0);for(i=1;i<n;i++){t=t+t1;x=x0+r*cos(t);y=y0+r*sin(t);lineto(x,y);}lineto(x0+r,y0);}void cs_Circle(int x0,int y0,int r1,int color1){int i,x=x0,y=y0,r=r1,color=color1;cs_circle(x,y,r,1);}void fun(){printf("************************************************************\n");printf("* input '1' ues midpointline painting line ! *\n");printf("* input '2' ues DDA_line painting line! *\n");printf("* input '3' ues system function painting line ! *\n");printf("* input '4' ues midBresenham painting elliptic ! *\n");printf("* input '5' ues parametric painting elliptic ! *\n");printf("* input '6' ues system function painting elliptic ! *\n");printf("* input '7' ues midBresenham painting circle ! *\n");printf("* input '8' ues midBresenham painting circle ! *\n");printf("* input '9' ues parametric painting circle ! *\n");printf("* input 'a' print all graphics *\n");printf("* input 'E' exit system! *\n");printf("************************************************************\n"); }/*主函数块*/void main(){int gdriver=DETECT,gmode;/*setbkcolor(9);*/char c;initgraph(&gdriver,&gmode,"c:\tc");fun();scanf("%c",&c);do{switch(c){case '1': midpointline(120,220,200,160,20);break;case '2': DDA_line(110,120,200,340,10);break;case '3': line(110,120,200,240);break;case '4': MidBresenhamllipse(34,55,6);break;case '5': cs_Ellipse(120,240,20,120,21);break;case '6': ellipse(110,250,0,360,100,40);break;case '7': BresenhemCircle(100,100,50,4);break;case '8': circle(100,100,67);break;case '9': cs_Circle(100,100,23,2);break;case 'a': midpointline(120,220,200,160,20);DDA_line(110,120,200,340,10);line(110,120,200,240);MidBresenhamllipse(34,55,6);cs_Ellipse(120,240,20,120,21);ellipse(110,250,0,360,100,40);BresenhemCircle(100,100,50,4);circle(100,100,67);cs_Circle(100,100,23,2);break;}printf("Input any key to continue\n");getch();cleardevice();fun();scanf("%c",&c);}while(c!='E');printf("exit system!\n");closegraph();}。
浅谈画图法在中职C语言教学中的运用管荣平
浅谈画图法在中职C语言教学中的运用管荣平发布时间:2023-05-29T09:00:47.920Z 来源:《教学与研究》2023年6期作者:管荣平[导读] C语言是一种较为流行的编程语言。
随着计算机的普及和发展,C语言在各领域的应用越来越广泛,几乎各类计算机都支持C语言的开发环境。
因此,计算机专业及有些非计算机专业的课程中把C语作为基础编程语言学习。
而中职学生学习C语言往往感到困难,学习效果不理想,本文针对中职生的特点和课程的性质,力求探索中职C语言教学过程中,如何更好地运用画图法,提高C语言的教学效果。
南京江宁高等职业技术学校摘要:C语言是一种较为流行的编程语言。
随着计算机的普及和发展,C语言在各领域的应用越来越广泛,几乎各类计算机都支持C语言的开发环境。
因此,计算机专业及有些非计算机专业的课程中把C语作为基础编程语言学习。
而中职学生学习C语言往往感到困难,学习效果不理想,本文针对中职生的特点和课程的性质,力求探索中职C语言教学过程中,如何更好地运用画图法,提高C语言的教学效果。
关键词:画图法;中职;C语言教学;运用一、C语言教学大纲的现状1.教学内容和方法陈旧教学过程中过分注重语句、语法等细节的教学,采用“概念讲解——例题讲析——习题训练”的模式,因为知识枯燥,学生学习的积极性不高,教学过程中学生的主体性原则体现不够。
2.教学效果两极分化大由于中职教育的特点,多程序设计生理论基础差,逻辑思维能力弱,学习习惯不好,自学能力不强,因而有相当数量的学生反映学习C 语言困难,表现在写不出程序,或写不出有良好风格的程序,学生在程序设计上的创新能力和逻辑思维能力。
二、C语言教学的分析1.中职学生的特点中职学生多为初中毕业生,因升学考试失败或家庭经济条件较差,还有社会上的偏见与歧视,使得他们在在学生群体中自惭形秽,对自身能力缺乏信心,从而丧失努力学习的动力,加之他们原有的知识基础薄弱,尤其是程序设计和英语,学习能力较差,逻辑思维能力薄弱,面对陌生的专业理论与技能训练往往感到束手无策,困难重重,久而久之,便产生自卑心理。
C++简单画图程序课设
目录1.基本功能描述 ....................................................................................................... - 1 -2.设计思路 ............................................................................................................... - 1 -3.软件设计 ............................................................................................................... - 4 -3.1 设计步骤 .................................................................................................... - 4 -3.2 界面设计 .................................................................................................... - 9 -3.3 关键功能的实现 ........................................................................................ - 9 -4.结论与心得体会 ................................................................................................. - 10 -5.参考文献 ............................................................................................................. - 11 -6.思考题 ................................................................................................................. - 11 -7.附录 ..................................................................................................................... - 12 -7.1 调试报告 .................................................................................................. - 12 -7.2 测试结果 .................................................................................................. - 13 -7.3 关键源代码 .............................................................................................. - 15 -简单画图程序1.基本功能描述1)设计一个程序可完成绘制直线,矩形和椭圆的功能。
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 -CDC画图
CDC继承层次:CObject└CDC定义:CDC类定义的是设备上下文对象的类。
CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。
通过CDC对象的成员函数进行所有的绘图。
类对设备上下文操作提供了成员函数,处理绘图工具。
安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板。
它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。
另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。
使用CDC对象时要构造它,然后调用与它平等的、使用设备上下文的Windows 函数的成员函数。
注意:Windows 95下所有屏幕坐标限制在16位以内。
因此向CDC成员函数传递的int必须在-32768至32767之间。
为了特定用途,Microsoft基本类库提供了几个CDC派生类。
CPaintDC 包括BeginPaint和EndPaint调用。
CClientDC管理窗口用户区对应的显示上下文。
CWindowDC管理与整个窗口对应的显示上下文,包括它的结构和控件。
CMetaFileDC与带元文件的设备上下文对应。
CDC包含m_hDC和m_hAttribDC两个设备上下文,它们在CDC对象创建时参考同一个设备。
CDC指导所有对m_hDC的输出GDI调用以及对m_hAttribDC的大部分属性GDI调用(GetTextColor是属性调用的例子,而SetTextColor是一个输出调用)。
例如框架使用这两个设备上下文实现CMetaFileDC对象,在从物理设备读取属性期间向元文件发送输出。
打印预览以相同风格在框架中实现。
还可以以相似方法在特殊应用代码中使用这两个设备上下文。
可能多次需要来自m_hDC和m_hAttribDC设备上下文的文本度量信息。
以下几对函数提供了这项功能:使用m_hAttribDC 使用m_hDCGetTextExtent GetOutputTextExtentGetTabbedTextExtent GetOutputTabbedTextExtentGetTextMetrics GetOutputTextMetricsGetCharWidth GetOutputCharWidthCDC类成员数据成员m_hDC CDC对象使用的输出设备上下文m_hAttribDC CDC对象使用的输出属性上下文构造函数CDC 构造一个CDC对象初始化CreateDC 为指定设备创建设备上下文CreateIC 为指定设备创建信息上下文。
大学计算机基础知识习题集第三章
大学计算机基础知识习题第三章2010-3-8 1:07:17 本站原创佚名【字体:大中小】 {SQL_我要评论(}习题一、选择题1. 在Windows 2000窗口中,用鼠标拖曳( ,可以移动整个窗口。
(A 菜单栏(B标题栏(C工作区(D状态栏2. 在Windows 2000中选取某一菜单后,若菜单项后面带有省略号(…,则表示( 。
(A将弹出对话框 (B已被删除(C当前不能使用 (D该菜单项正在起作用3. 在Windows 2000中选取某一菜单后,若菜单项前有“ ”符号表示( 。
(A可单选的 (B可复选的(C不可选的 (D不起作用的4. 在Windows 2000中,若将剪贴板上的信息粘贴到某个文档窗口的插入点处,正确的操作是( 。
(A按Ctrl+X键 (B按Ctrl+V键(C按Ctrl+C键 (D按Ctrl+Z键5. 在Windows 2000中,“任务栏”的主要功能是( 。
(A显示当前窗口的图标 (B显示系统的所有功能(C显示所有已打开过的窗口图标 (D实现任务间的切换6. 在Windows 2000资源管理器的左窗口中,单击文件夹中的图标( 。
(A在左窗口中显示其子文件夹 (B在左窗口中扩展该文件夹(C在右窗口中显示该文件夹中的文件 (D在右窗口中显示该文件夹中的子文件夹和文件7. 在Windows 2000资源管理器窗口中,若文件夹图标前面含有“-”号,表示( 。
(A含有未展开的文件夹 (B无子文件夹(C子文件夹已展开 (D可选8. 在Windows 2000中,可使用桌面上的( 来浏览和查看系统提供的所有软硬件资源。
(A我的公文包 (B回收站(C我的电脑 (D网上邻居9. 在Windows 2000 中,要选中不连续的文件或文件夹,先用鼠标左击第一个,然后按住( 键,用鼠标左击要选择的各个文件或文件夹。
(AAlt (BShift (CCtrl (DEsc10. “回收站”是( 文件存放的容器,通过它可恢复误删的文件。
使用VisualC快速构建图形学程序
如果希望客户区在下次系统发送WM_PAINT消息 时被更新,则需先执行CWnd::Invalidate()函 数,否则OnPaint()方法不会反映当前在客户区 所作的更改。
WM_PAINT消息
启用Debug模式(工具栏上点击右键选中 “Build”,在编译类型中选择“Win32 Debug”),在可疑的出错点标上断点(在代码 行上按F9键),让程序执行到该处停下来,进而 执行单步跟踪(按F10键,跟踪变量的值)是查 错的基本方法。
在Debug模式下,VC环境中有一个调试工具栏窗
口(工具栏上点击右键选中”Debug”),同时
常用的绘图函数
5)绘制椭圆 CDC::Ellipse( int x1, int y1, int x2,
int y2 ); CDC::Ellipse( LPCRECT lpRect ); 6)在屏幕上打点 CDC::SetPixel( int x, int y,
COLORREF crColor ); CDC::SetPixel( POINT point,
1)规范的变量和函数命名,包括控件变量和 自定义变量、函数的命名
控件ID命名如:IDC_BUTTON_REMOVEPOINT 控件变量命名如:m_btnRemovePoint 自定义变量命名如:fBernstein,m_iPointNum 函数命名如:DrawBezier(int n, CPaintDC* dc)
为简单起见,推荐在OnPaint()中使用 CPaintDC类进行图形绘制。
WM_PAINT消息
WM_PAINT消息是Windows系统的标准消息, 当操作系统或其他应用程序发出请求要求画/重画 一个应用程序窗口的一部分时,便会向该应用程 序窗口发出该消息,该消息对绘图而言至关重要。 比如:
在 Microsoft Visual C 作图
在 Microsoft Visual C++ 6.0 用C语言作图2011-5-9 22:29提问者:冰糖葫芦jj|浏览次数:308次用Microsoft Visual C++ 6.0 做一个函数图,如下。
或者给个大概的框架~~可提高悬赏,谢啦~~问题补充:另外,新建的时候还是“工程”选Win32 Console Application,“文件”选C++ Header File 吗?如果不是,怎么新建呢?2011-5-9 23:03最佳答案想用VC++作图,有些难度哦,因为它只最基本的。
要想作出Windows程序的话,工程选MFC或是Win32工程,不能是控制台(Console)程序。
这只是基本,还要用到API,用MFC的话Windows提供得有CDC类,是画图的,不过只能画一些标准的图形,如直线,圆,矩形。
要想画你这个复杂函数的图像得用最基本的画点函数:SetPixel()该函数封装在CDC类中,这就要求你要一些计算机图形学的知识了。
难度很大。
但是你如果用Matlab这些数学软件就显得很容易了。
其中道理你可自己体会。
追问其实这是作业,要求是C语言~~用Microsoft Visual C++ 6.0可以吗?可不可以说一下大概的思路呢~~回答其思路就画点,函数是SetPixel(),他封装在CDC类中,用单文档程序的话你就在OnDraw()函数里面画。
我想问下你《计算机图形学》学过没,怎么要做这个作业?画的过程中,对坐标系你得做转换,屏幕坐标和实际坐标不同,Windows 的是左上角是原点,橫x,下纵y。
还有就是画点的取舍,Windows(默认)中+1就是+一个像素(Pixel),一个屏幕就是若干个Pixel,是有限的,不像数学函数上的无限。
且点(x,y)的值只能是整数。
你最好还是去看下我说的这本书,对你有帮助。
追问《计算机图形学》没有学过,这个图是《Digital Signal Processing》上的一个插图,教授一高兴就让用C语言做出来,别的都没说,但是我当时学C语言的时候没有好好学,手头有C、C++教材,但是上面没有关于能做出图来的教程~~我现在连作这种图具体该怎么新建,用什么函数什么的都不知道,我当时学C 语言的时候用的Microsoft Visual C++ 6.0。
用C语言实现画图程序
一、选题背景:画图程序,通过画图中的功能绘制出美丽的图案。
二、设计思想:利用数学三角函数制作山峰和花朵出一条曲线、用画圆函数绘制太阳的形状、再进行颜色填充用绘制直线的函数来绘制比较粗的光线、用矩形函数画出矩形的边框、再画地球、直线画赤道、弧线画南北极和钟表的刻度盘。
三、流程图:四、程序清单:#include"graphics.h" /*调用图形库函数*/#include"math.h" /*调用数学函数*/#include"stdio.h" /*调用标准I/O函数*/#define PI 3.141596 /*宏定义PI字符串*/main() /*主函数*/{float i,x,y; /*定义单精度浮点型变量i,x,y*/int gdriver=DETECT,gmode,a=1; /*定义整型变量gdriver,gmode*/initgraph(&gdriver,&gmode,"d:\\tc"); /*定义变量后,初始化图形系统*/cleardevice();setbkcolor(a); /*背景颜色*/printf("\n");printf("\n"); /*C 语言图形函数*/printf("\n");printf(" the following math functions were used in the main function.\n");printf(" setbkcolor(int color);\n"); /* 背景颜色*/printf(" setcolor(int color);\n"); /* 画笔颜色*/printf(" putpexel(x,y,color);\n"); /* 画像素点*/printf(" line(x1,y1,x2,y2)\n"); /* 直线函数*/printf(" rectangle(xl,yt,xr,yb)\n");; /* 矩形函数*/printf(" arc(x,y,as,ae,r)\n"); /* 圆弧函数*/printf(" circle(x,y,r)\n"); /*圆形函数*/printf(" ellipse(x,y,as,ae,rx,ry)\n"); /* 椭圆函数*/printf("\n"); /* 按任意键开始演示*/setcolor(2);setlinestyle(0,0,3);rectangle(4,4,635,475); /*绘制矩形框*/getch();cleardevice();printf("\n"); /* 模拟手工画图*/printf("\n"); /* 函数曲线图形*/setcolor(3);setlinestyle(3,3,3);rectangle(4,4,635,475); /*绘制图纸边框*/for (i=0;i<=2*PI;i+=PI/99999){putpixel(40*i,170-21*i*sin(1.6*i),2);putpixel(40.3*i,170-22*i*sin(1.6*i),3);putpixel(40.6*i,170-23*i*sin(1.6*i),10);}for (i=0;i<=2*PI;i+=PI/99999) /*绘制花朵*/{putpixel(118-15*cos(4*i)*cos(i),160-15*cos(4*i)*sin(i),14);putpixel(118-25*cos(4*i)*cos(i),160-25*cos(4*i)*sin(i),13);putpixel(118-35*cos(4*i)*cos(i),160-35*cos(4*i)*sin(i),10);}for (i=0;i<=PI;i+=PI/99999){putpixel(320-315*cos(i),360-95*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-96*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-97*sin(i),11); /*绘制拱桥*/ }for (a=70;a<=570;a+=50)for (i=0;i<=PI;i+=PI/9999){putpixel(a-25*cos(i),360-40*sin(i),11); /*绘制桥*/}}for (x=0;x<=640;x+=0.001){putpixel(8*x,380-8*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=600;x+=0.001){putpixel(10*x,405-10*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=560;x+=0.001){putpixel(12*x,430-12*sin(x),9); /*绘制曲线水流*/}for(x=60;x<=80;x+=0.01){ellipse(270,360,180 ,0,160-x,25);}for (x=0;x<=520;x+=0.001){putpixel(8*x,455-8*sin(x),9); /*绘制曲线水流*/}setlinestyle(0,0,1);setfillstyle(1,12);fillellipse(320,60,25,25); /*绘制太阳*/for (x=280;x>=250;x-=0.0001)putpixel(x,60,12); /*绘制阳光线*/}for (x=360;x>=390;x+=0.0001){putpixel(x,60,12); /*绘制阳光线*/}for (y=24;y>=12;y-=0.0001){putpixel(320,y,12); /*绘制阳光线*/}for (y=96;y<=108;y+=0.0001){putpixel(320,y,12); /*绘制阳光线*/}setlinestyle(3,0,1);setcolor(12);for (i=0;i<=2*PI;i+=PI/12) /*绘制阳光线*/{line(320+40*cos(i),60-36*sin(i),320+70*cos(i),60-48*sin(i)); for (x=0;x<=55555;x+=0.1){y=y+x; /*延时控制*/}}setcolor(13);setlinestyle(0,0,1);rectangle(460,100,620,200); /*绘制地图框(矩形)*/ setcolor(11);setlinestyle(0,0,3);ellipse(540,150,0,360,77,48); /*绘制地球(椭圆)*/circle(540,150,46); /*绘制经线(圆形)*/ellipse(540,100,210,330,45,16); /*绘制北极圈(椭圆弧)*/ellipse(540,200,30,150,45,16); /*绘制南极圈(椭圆弧)*/setcolor(14);setlinestyle(3,0,1);line(460,150,620,150); /*绘制赤道(水平线)*/line(540,100,540,200); /*绘制经线(垂直线)*/setcolor(11); setlinestyle(0,0,1);for (i=0;i<=2*PI;i+=PI/300){putpixel(590-35*cos(i),50-35*sin(i),11); /*绘制0.1秒刻度*/}setcolor(14);setlinestyle(0,0,1);circle(590,50,2); /*绘制中心轴*/setcolor(13);setlinestyle(0,0,3);for (i=0;i<=2*PI;i+=PI/6){line(590+25*sin(i),50-25*cos(i),590+30*sin(i),50-30*cos(i));/*绘制小时*/for (x=0;x<=5555;x+=0.001){y=y+x; /*延时控制*/}getch();closegraph(); }五、主要解决问题的方法及技术关键1、主要问题及解决方法✓抛物线的画法用插补法画抛物线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Essential C# 5.0 (4th Edition)
C# 5 First Look
C# Threading Handbook
Learning to Program the Object-Oriented Way with C#
C# 高级编程(第四版)PDF及源码下载
redPen.Dispose();
g.Dispose();
}
复制代码
那么到底作怎么样的改动才能使上面的SpiderWeb程序实现简单的双重缓冲区技术呢?原理其实相当简单,就是将应该画到窗体表面的绘制操作改成先画到内存中的位图上,LineDrawRoutine向这个在内存中隐藏的画布执行同样的蜘蛛网绘制操作,等到绘制完毕再通过调用Graphics.DrawImage方法将隐藏的画布上内容推到窗体表面来显示出来,最后,再加上一些小的改动一个高性能的绘图窗体程序就完成了。
简单的绘图示例如下:
using System;
using System.Drawing;
using System.Windows.Forms;
public class BasicX : Form
{
public BasicX()
{
InitializeComponent();
好了,我们需要注意一下BasicX_Paint方法,正如先前所提到的,Paint 事件在程序需要重绘时被激活,程序窗体利用Paint事件来负责回应需要重绘的系统消息,BasicX_Paint方法的调用需要一个对象 sender 和一个PaintEventArgs类型的变量,PaintEventArgs类的实例或称之为变量 e 封装了两个重要的数据,第一个就是窗体的 Graphics 对象,该对象表示窗体可绘制的表面也称之为画布用于绘制诸如线、文本以及图像等,第二个数据就是ClipRectangle,该Rectangle对象表示窗体上无效的的矩形范围,或者说就是窗体需要重绘的区域。记住,当窗体的ResizeRedDraw设置后,调整大小后该ClipRectangle的大小实际就等于窗体整个客户区域的大小,或者是被其它程序窗体遮盖的那部分剪切区域。关于部分剪切区域的用处我们会在智能重绘章节作更详细的阐述。
概念
Windows 应用程序是自己负责绘制的,当一个窗体”不干净”了,也就是说窗体改变了大小,或者部分被其它程序窗体遮盖,或者从最小化状态恢复时,程序都会收到需要绘制的信息。Windows把这种”不干净”状态称为”无效的(Invalidated)”状态,我们理解为:需要重绘,当Windows 窗体程序需要重绘窗体时它会从Windows消息队列中获取绘制的信息。这个信息经过.Net框架封装然后传递到窗体的 PaintBackground 和 Paint 事件中去,在上述事件中适当的书写专门用于绘制的代码即可。
不具备双重缓冲区技术的SpiderWeb示例程序
纵观程序的源码你会发现在程序Paint事件激活后是通过调用LineDrawRoutine方法来实现线的绘制的。LineDrawRoutine方法有两个参数,第一个是Graphics对象是用于绘制线条的地方,第二个是绘图工具Pen对象用来画线条。代码相当简单,一个循环语句,LINEFREQ常量等,程序从窗体表面的左下一直划线到其右上。请注意,程序使用浮点数来计算在窗体上的绘制位置,这样做的好处就是当窗体的大小发生变化时位置数据会更加精确。
float yDelta = height / LINEFREQ;
for (int i = 0; i < LINEFREQ; i++)
{
g.DrawLine(p, 0, height - (yDelta * i), xDelta * i, 0);
}
}
复制代码
撰写很简单的用于响应Paint事件SpiderWeb_Paint的代码,正如前面所提到的,Graphics对象就是从Paint事件参数PaintEventArgs对象中提取出来的表示窗体的绘制表面。这个Graphics对象连同新创建Pen对象一起传递给LineDrawRoutine方法来画出蜘蛛网似的线条,使用完Graphics对象和Pen对象后释放其占用的资源,那么整个绘制操作就完成了。
Bitmap localBitmap = new Bitmap(ClientRectangle.Width,ClientRectangle.Height);
Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
LineDrawRoutine(bitmapGraphics, bluePen);
下面提供的示例程序能够阐明双重缓冲区的概念和实现方法,这个示例所包含的功能已相当完整,且完全可以在实际应用中使用。在该章节后面还会提及该技术应该配合控件的一些属性设置才能达到更好的效果。
要想领略双重缓冲区绘图技术所带来的好处就请运行SpiderWeb示例程序吧。程序启动并运行后对窗口大小进行调整,你会发现使用这种绘图算法的效率不高,并且在调整大小的过程中有大量的闪烁出现。
幸运的是当编写一个典型的Windows 窗体程序时,窗体和控件的绘制、效果等操作是不需要特别加以考虑的。这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件相关联的代码然后在IDE中按F5,一个完完全全的窗体程序就诞生了!所有控件都将自己绘制自己,窗体或者控件的大小和缩放都调整自如。在这里经常会用到的,且需要引起一点注意的就是控件效果。游戏,自定义图表控件以及屏幕保护程序的编写会需要程序员额外撰写用于响应 Paint 事件的代码。
}
[System.STAThreadAttribute()]
public static void Main()
{
Application.Run(new BasicX());
}
}
复制代码
上述代码分成两个基本的步骤来创建示例程序。首先 InitializeComponent 方法包含一些属性的设置和附加窗体 Paint 事件的处理过程。注意,在方法中控件的样式也同时被设置,设置控件的样式也是自定义Windows 窗体及控件行为的一种有效途径,譬如:控件的"ResizeRedraw"属性指示当窗体的大小变化发生以后需要对其完全进行重绘,也就是说重绘时总是需要对整个窗体的客户区域进行重绘。窗体的“客户区域”是指除了标题栏和边框的所有窗体区域。可以进行一个有趣的试验,取消该控件的属性然后再运行程序,我们可以很明显的看出为什么该属性会被经常的设置,因为窗体调整大小后的无效区域根本不会被重绘。
private void SpiderWeb_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen redPen = new Pen(Color.Red);
LineDrawRoutine(g, redPen);
C#入门经典(第5版)
数据结构与算法(C#语言版)PDF
C#开发实战1200例(第1卷)
本版最新发布本版最后下载
C# Game Programming Cookbook for Unity 3D
C# Deconstructed: Discover how C# works on the .NET Framework
Essential C# 5.0 (4th Edition)
private void LineDrawRoutine(Graphics g, Pen p)
{
float width = ClientRectangle.Width;
float height = ClientRectangle.Height;
float xDelta = wi与前面介绍的简单绘图事件间的区别:
private void SpiderWeb_DblBuff_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen bluePen = new Pen(Color.Blue);
}
private void BasicX_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red);
int width = ClientRectangle.Width;
int height= ClientRectangle.Height;
g.DrawLine(p, 0,0, width, height);
g.DrawLine(p, 0, height, width, 0);
p.Dispose();
}
private void InitializeComponent()
//把在内存里处理的bitmap推向前台并显示
g.DrawImage(localBitmap, 0, 0);
bitmapGraphics.Dispose();
bluePen.Dispose();
localBitmap.Dispose();
g.Dispose();
}
复制代码
Windows 窗体使用GDI+图像引擎,在本文中的所有绘图代码都会涉及使用托管的.Net 框架来操纵和使用Windows GDI+图像引擎。
尽管本文用于基本的窗体绘图操作,但是它同样提供了快速的、有效的且有助于提高程序性能的技术和方法。所以,在通读本文之前建议读者对.Net框架有个基本的了解,包括Windows 窗体事件处理、简单的GDI+对象譬如Line,Pen和Brush等。熟悉Visual Basic .Net或者C#编程语言。