计算机图形学课程设计.doc_第1页
计算机图形学课程设计.doc_第2页
计算机图形学课程设计.doc_第3页
计算机图形学课程设计.doc_第4页
计算机图形学课程设计.doc_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南理工大学万方科技学院课程设计报告课程名称: 计算机图形学 设计题目:直 线 快 速 裁 剪 算 法组 成 员: 专业班级:08计算机科学与技术01指导老师: 2011-6-1227目录第一章 前言1第二章 设计内容与要求12.1 总体目标和要求12.2 内容与要求2第三章 总体设计23.1 矩形裁剪窗口的设计23.2 个编辑文本框的设计23.3 四个按钮的设计23.4 四个标签的设计33.5 直线段的生成算法的设计33.6直线段裁剪3第四章 详细设计44.1 矩形裁剪窗口的设计44.2 个编辑文本框的设计54.3 四个按钮的设计54.4 四个标签的设计54.5 直线段的生成算法的设计54.6直线段裁剪8第五章 功能实现125.1直线的生成125.2直线的裁剪135.3矩形窗口的大小变换14第六章 总结15参考文献:15附录 源代码:16第一章 前言计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。计算机图形学的研究内容非常广泛,像图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。经过40 多年的发展, 计算机图形学已成为计算机科学中, 最为活跃的分支之一, 并得到广泛的应用。其中最重要的莫过于计算机辅助设计与制造(Computer Aided Design / Computer Aided Manufacture),例如AUTOCAD 2008,Maya8.5,3ds Max 9都是这方面最领先的图形学软件。另外,在人们做研究分析时,可视化可以给予人们更清晰,更明了的结果。而青少年们最关注的电子游戏方面更是少不了计算机图形学的帮助。目前的次世代游戏机,索尼的PS3,微软的XBOX360上的游戏画面无疑给人以震撼的视觉冲击。随着Nvidia的G80系列显卡及收购了ATI的AMD所推出的R600系列显卡的全面发售,微软的新一代图形APIDirectX10的威力很快也将全面爆发。在今后的生活中,计算机图形学必将得到突飞猛进的发展。随着计算机硬件的不断更新以及各种图形软件的不断推出,计算机图形学的应用前景将会更加引人入胜。为了更好地学好计算机图形学,掌握一些最基本的知识,和一些简单的计算机图形学编程软件的操作和基本的库函数,特此进行了此次课程设计。通过课程设计,学会一些基本的图形学软件的基本操作和库函数的应用,提高通过具体的平台实现图形算法的设计、编程与调试的能力,完成对实验结果分析、总结及撰写技术报告的能力。第二章 设计内容与要求2.1 总体目标和要求总体目标:以计算机图形学算法为基础,深入研究,继而策划、设计并实现一个能够实现直线快速裁剪的小型程序,并能分析出程序中出现的不足,能提出一些改进的意见。通过程序设计的一般流程:策划、设计、开发、测试、总结、验收等来学习程序的制作流程。以此来达到以下几个目的:(1)、了解计算机图形学中编程软件中的一些库函数,并掌握一些基本的库函数。(2)、巩固已学习的计算机图形学的基本算法思想,熟悉图形学中的基本算法。(3)、学习计算机图形学的简单算法的使用技巧。(4)、培养认真学习,积极思索,勇于探索的精神。(5)、提高通过具体的平台实现图形学算法的设计、编程与调试能力,完成对实验结果分析、总结及撰写技术报告的能力。总体要求:通过编程设计一个小程序,程序实现功能为跟据输入的连点来生成直线,通过相应的操作来实现窗口对直线的裁剪。开发环境:visual c+6.0+opengl2.2 内容与要求设计分为七个部分,分别是:1、矩形裁剪窗口的设计 矩形窗口的初始大小是100*100,要求在试验过程中矩形裁剪窗口的大小可以通过输入矩形窗口的长和宽来改变其大小。2、4个编辑文本框的设计 四个编辑文本框只能输入数字,以此来控制两个输入点的位置来生成直线,同时通过输入矩形框的长和宽来控制矩形裁剪框的大小。3、四个按钮的设计 四个按钮要实现四个功能。分别是:输入点的确定、裁剪区域窗口的刷新、实现相应的裁剪功能、和退出整个程序。4、四个标签的设计 四个标签要显示:X坐标、Y坐标、窗口长度、窗口宽度。5、直线段的生成算法的设计 通过输入框输入直线段两端的坐标。也通过鼠标在区域内左单击鼠标确定开始点,再单击左键确定终端,以此来形成一条待裁剪的直线段。6、直线段裁剪通过直线裁剪算法:Cohen-Sutherland编码裁剪算法来进行直线段的裁剪。第三章 总体设计 3.1 矩形裁剪窗口的设计在图形裁剪区域中要形成一个矩形的裁剪窗口,用来对形成的直线进行裁剪。其初始值为:100*100,可以通过输入矩形裁剪窗口的长和宽来控制矩形窗口的大小,以此来对直线进行最适当的裁剪。3.2 个编辑文本框的设计四个编辑框只能输入值只能是数字,以此来控制两个输入点x和y值,从而确定输入点的位置,依次输入两个点来生成一条待裁剪直线段。同时也可以通过输入矩形框的长和宽来确定矩形裁剪框的大小。3.3 四个按钮的设计在程序窗口的右侧要有四个按钮,要通过四个按钮来实现控制直线段的两个输入点的位置、对程序窗口进行刷新:对裁剪后的直线段进行清除,仅剩下一个矩形裁剪框、对待裁剪直线段进行裁剪以及推出程序功能。名称分别设定为:输入点、刷新、运行算法、推出程序。3.4 四个标签的设计在程序窗口中要创建四个标签,以此来提示输入框中输入的内容,四个标签分别显示为:X坐标、Y坐标、窗口长度、窗口宽度。3.5 直线段的生成算法的设计直线的生成有两种方法分别是通过键盘生成一条直线段;和通过鼠标生成一条直线段。(1)、通过键盘生成一条直线段:在程序界面的右侧的X坐标和Y坐标输入框中分别输入一个数值来确定一个端点,单击输入点,然后再输入一组X和Y的值来确定另一个坐标,以此来生成一条直线段。(2)、通过鼠标生成一条直线段:在程序界面的左侧裁剪框中用鼠标的左键单击任意位置生成一个端点,再单击另一个位置来生成另一个端点,从而生成一条直线段。3.6直线段裁剪通过直线裁剪算法:Cohen-Sutherland编码裁剪算法来进行直线段的裁剪。直线与矩形裁剪框的关系有三种分别是直线完全在裁剪窗口内、线段完全在裁剪窗口外、线段部分在裁剪窗口,部分在裁剪窗口外。对直线段与裁剪窗口的三种不同关系有以下三种处理方法:(1)、若线段完全在裁剪窗口之内,则显示该线段,成为“取”。(2)、若线段明显在裁剪窗口之外,则丢弃该线段,成为“弃”。(3)、若线段既不满足“取”的条件,也不满足“舍”的条件,则把线段分割为两段。其中一段完全在裁剪窗口之外,可弃之;对另一段则重复上述操作。第四章 详细设计4.1 矩形裁剪窗口的设计在图形裁剪区域中要形成一个矩形的裁剪窗口,用来对形成的直线进行裁剪。其初始值为:100*100,可以通过输入矩形裁剪窗口的长和宽来控制矩形窗口的大小,以此来对直线进行最适当的裁剪。其部分代码如下:(1)、矩形窗口的初始化:this-m_length.SetWindowText(100);/初始化长度和宽度框为100this-m_width.SetWindowText(100);this-length = 100;/初始化裁剪窗口为100*100this-width = 100;this-s_pcount = 0;/初始化输入点计数变量为0(2)、矩形窗口的设置:HCURSOR CCohen_SutherlandDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCohen_SutherlandDlg:OnKillfocusEditLength() / TODO: Add your control notification handler code hereCString bufl;/长度编辑框的文本临时缓存char szChar50;/提示语句缓存this-m_length.GetWindowText(bufl);/获得长度编辑框的文本/itoa(length,buf,10);/dc.TextOut(100,100,buf);if(bufl!=)/如果长度框不为空就转换成intlength = atoi(bufl);else/如果长度框为空就提示错误sprintf(szChar,长度不能为空);MessageBox(szChar,Error,0);if(length0)/如果长度范围在1-300那么就尝试显示裁剪窗口if(width0)/如果宽度在1-300之间就显示裁剪窗体this-OnPaint();elsesprintf(szChar,长度必须为1-300之间的整数);MessageBox(szChar,Error,0);4.2 个编辑文本框的设计四个编辑框只能输入值只能是数字,以此来控制两个输入点x和y值,从而确定输入点的位置,依次输入两个点来生成一条待裁剪直线段。同时也可以通过输入矩形框的长和宽来确定矩形裁剪框的大小。其部分控制代码如下:this-m_length.SetLimitText(3);/编辑框设定只能输入3个字节this-m_width.SetLimitText(3);this-m_xpoint.SetLimitText(3);this-m_ypoint.SetLimitText(3);4.3 四个按钮的设计在程序窗口的右侧要有四个按钮,要通过四个按钮来实现控制直线段的两个输入点的位置、对程序窗口进行刷新:对裁剪后的直线段进行清除,仅剩下一个矩形裁剪框、对待裁剪直线段进行裁剪以及推出程序功能。名称分别设定为:输入点、刷新、运行算法、推出程序。4.4 四个标签的设计在程序窗口中要创建四个标签,以此来提示输入框中输入的内容,四个标签分别显示为:X坐标、Y坐标、窗口长度、窗口宽度。4.5 直线段的生成算法的设计直线的生成有两种方法分别是通过键盘生成一条直线段;和通过鼠标生成一条直线段。(1)、通过键盘生成一条直线段:在程序界面的右侧的X坐标和Y坐标输入框中分别输入一个数值来确定一个端点,单击输入点,然后再输入一组X和Y的值来确定另一个坐标,以此来生成一条直线段。(2)、通过鼠标生成一条直线段:在程序界面的左侧裁剪框中用鼠标的左键单击任意位置生成一个端点,再单击另一个位置来生成另一个端点,从而生成一条直线段。两种直线段生成的方法的代码如下:void CCohen_SutherlandDlg:OnButtonInpoint()/确定输入点函数,跟鼠标点击函数左右相同,只是输入点的方式不一样,利用编辑框进行输入CString bufx,bufy;/x,y坐标输入框的文本临时缓存int x,y;/x,y坐标临时变量char szChar50;/提示语句缓存this-m_xpoint.GetWindowText(bufx);/获得x坐标编辑框的文本if(bufx!=)/如果x框不为空就转换成intx = atoi(bufx);else/如果x框为空就提示错误sprintf(szChar,x坐标不能为空);MessageBox(szChar,Error,0);this-m_ypoint.GetWindowText(bufy);/获得y坐标编辑框的文本if(bufy!=)/如果x框不为空就转换成inty = atoi(bufy);else/如果x框为空就提示错误sprintf(szChar,y坐标不能为空);MessageBox(szChar,Error,0);if(x=0&y=0)this-p_groups_pcount.x=x;this-p_groups_pcount.y=y;s_pcount+;elsesprintf(szChar,x和y坐标必须在0-299之间);MessageBox(szChar,Error,0);this-ShowLine(this-p_group,this-s_pcount);void CCohen_SutherlandDlg:ShowLine(POINT p,int count)/将点数组的数据进行配对成直线进行显示if(countGetSafeHwnd();dc.Attach(hdc);int j=0;/临时变量,用来遍历点数组的for(int i=0;iGetSafeHwnd(),hdc);void CCohen_SutherlandDlg:OnLButtonUp(UINT nFlags, CPoint point)/画点函数,将点击鼠标的位置记录下来,并尝试进行绘制直线/ TODO: Add your message handler code here and/or call defaultif(point.x10&point.y10)this-p_groups_pcount.x=point.x-11;this-p_groups_pcount.y=point.y-11;s_pcount+;this-ShowLine(this-p_group,this-s_pcount);CDialog:OnLButtonUp(nFlags, point);unsigned char CCohen_SutherlandDlg:code(float x,float y)/对某点位置进行编码,有5种情况unsigned char c=0;/裁剪窗体里面,0000if(int)(x+0.5)(int)(0.5+(300.0-length)/2)+length)/裁剪窗体右边,0010c=c|2;if(int)(y+0.5)(int)(0.5+(300.0-width)/2)+width)/裁剪窗体下面,1000c=c|8;return c;4.6直线段裁剪通过直线裁剪算法:Cohen-Sutherland编码裁剪算法来进行直线段的裁剪。直线与矩形裁剪框的关系有三种分别是直线完全在裁剪窗口内、线段完全在裁剪窗口外、线段部分在裁剪窗口,部分在裁剪窗口外。对直线段与裁剪窗口的三种不同关系有以下三种处理方法:(1)、若线段完全在裁剪窗口之内,则显示该线段,成为“取”。(2)、若线段明显在裁剪窗口之外,则丢弃该线段,成为“弃”。(3)、若线段既不满足“取”的条件,也不满足“舍”的条件,则把线段分割为两段。其中一段完全在裁剪窗口之外,可弃之;对另一段则重复上述操作。其代码如下:void CCohen_SutherlandDlg:Cohen_Sutherland_Clip(float x1,float y1,float x2,float y2,int count)/对一条直线进行C_S算法,count是用来操作全局变量p_group的(用以更新全局变量的数据)unsigned char c1,c2,c;float x,y,wx,wy;c1=code(x1,y1);/对第一点进行编码c2=code(x2,y2);/对第二点进行编码while(!(c1=0)|(!(c2=0)/当两个点其中一个的编码不为零就进行循环,也就是说有一点不在裁剪窗体里面就进行循环if(c1&c2)/当两个点都在裁剪窗体外面时删除这条线段,然后结束函数this-p_groupcount.x=NULL;this-p_groupcount.y=NULL;this-p_groupcount+1.x=NULL;this-p_groupcount+1.y=NULL;return;c=c1;if(c=0)/找出在裁剪窗口外的一点c=c2;wx=x2-x1;wy=y2-y1;if(c&1)=1)/如果线段的一部分在窗体左面,那么根据窗口左边届的x坐标修计算其y坐标y=y1+wy*(float)(300.0-length)/2)-x1)/wx;x=(float)(300.0-length)/2);else if(c&2)=2)/如果线段的一部分在窗体右面,那么根据窗口右边届的x坐标修计算其y坐标y=y1+wy*(float)(300.0-length)/2)+length)-x1)/wx;x=(float)(300-length)/2)+length);else if(c&4)=4)/如果线段的一部分在窗体上面,那么根据窗口上边届的y坐标修计算其x坐标x=x1+wx*(float)(300.0-width)/2)-y1)/wy;y=(float)(300.0-width)/2);else if(c&8)=8)/如果线段的一部分在窗体下面,那么根据窗口下边届的y坐标修计算其x坐标x=x1+wx*(float)(300.0-width)/2)+width)-y1)/wy;y=(float)(300.0-width)/2)+width);if(c=c1)/如果c1是窗口外的点,那么更新原来的线段数据到x1x1=x;y1=y;c1=code(x1,y1);else/如果c2是窗口外的点,那么更新原来的线段数据到x2,然后继续循环进行裁剪,直到线段在裁剪窗口里面为止x2=x;y2=y;c2=code(x2,y2);/while()this-p_groupcount.x=(int)(0.5+x1);/更新线段到全局变量中this-p_groupcount.y=(int)(0.5+y1);this-p_groupcount+1.x=(int)(0.5+x2);this-p_groupcount+1.y=(int)(0.5+y2);void CCohen_SutherlandDlg:OnOK() /运行算法按钮响应/ TODO: Add extra validation hereif(this-s_pcountGetSafeHwnd();dc.Attach(hdc);int j=0;/临时变量,用来遍历点数组的for(int i=0;is_pcount+1)/2;i+)/每次两个点进行算法,不够两个就停止this-Cohen_Sutherland_Clip(float)this-p_groupj.x,(float)this-p_groupj.y,(float)this-p_groupj+1.x,(float)this-p_groupj+1.y,j);dc.MoveTo(this-p_groupj.x+11,this-p_groupj.y+11);dc.LineTo(this-p_groupj+1.x+11,this-p_groupj+1.y+11);j+=2;dc.Detach();:ReleaseDC(this-GetSafeHwnd(),hdc);this-OnPaint();/CDialog:OnOK();void CCohen_SutherlandDlg:OnButtonClean()/刷新操作,就是清空点数组以及计数器s_pcount复位为0,然后重绘/ TODO: Add your control notification handler code herefor(int i=0;ip_groupi.x=NULL;this-p_groupi.y=NULL;this-s_pcount=0;this-OnPaint();void CCohen_SutherlandDlg:OnMouseMove(UINT nFlags, CPoint point) /移动鼠标时如果已经输入了某点坐标,那么跟随鼠标移动显示直线/ TODO: Add your message handler code here and/or call defaultif(this-s_pcount%2)=1)if(point.x10&point.y10)CDC dc;HDC hdc = :GetDC(this-GetSafeHwnd();dc.Attach(hdc);this-OnPaint();dc.MoveTo(this-p_groupthis-s_pcount-1.x+11,this-p_groupthis-s_pcount-1.y+11);dc.LineTo(point);dc.Detach();:ReleaseDC(this-GetSafeHwnd(),hdc);CDialog:OnMouseMove(nFlags, point);第五章 功能实现5.1直线的生成图5-1-1 直线段完全在裁剪框外图5-1-2直线段完全在裁剪框内图5-1-3直线段部分在窗口内5.2直线的裁剪图5-2-1 裁剪结果2图5-2-2裁剪结果图5-2-3裁剪结果35.3矩形窗口的大小变换图5-3-1矩形窗口变换1图5-3-2 矩形窗口变换2第六章 总结计算机图形学时近年发展很快的一门科学,这不仅依赖与越来越成熟的计算机软件、硬件技术,同时当今社会的发展也对计算机图形技术的依赖越来越大。通过本学期的学习,我们对计算机图形学有了初步的了解,对一些基本的库函数能做最基本的应用。学到了好多编程方面的知识,同时也感到了计算机编程功能的强大。通过这次的计算机图形学课程设计,我们进一步了解了计算机图形学的很多知识,更深层次的看到了计算机图形学的魅力。这次的计算机图形学课程设计让我收获不小,到真正自己动手做的时候才会发现不足之处。在做设计的期间,又温习了原来所学的知识,可以把知识系统的归纳。任何知识和理论都要归结于实践。在做设计期间,多亏了同学的帮助和老师的细心指导。自己不懂的代码和原理可以有同学参考。参考文献:1、计算机图形学,徐文鹏、侯守明、刘永和,机械工业出版社2、计算机图形学,何援军,机械工业出版社。3、计算机图形学(OpenGL)(第3版),Francis S Hill.Jr.,清华大学出版社4、计算机图形学(第二版),张彩明、杨兴强、李学庆等,科学出版社5、计算机图形学基础教程(第2版),孙家广、胡事民,清华大学出版社6、计算机图形学实验教程(OpenGL版),李胜睿等,机械工业出版社附录 源代码:/ Cohen_SutherlandDlg.cpp : implementation file#include stdafx.h#include Cohen_Sutherland.h#include Cohen_SutherlandDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCohen_SutherlandDlg dialogCCohen_SutherlandDlg:CCohen_SutherlandDlg(CWnd* pParent /*=NULL*/): CDialog(CCohen_SutherlandDlg:IDD, pParent)/AFX_DATA_INIT(CCohen_SutherlandDlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CCohen_SutherlandDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CCohen_SutherlandDlg)DDX_Control(pDX, IDC_EDIT_YPOINT, m_ypoint);DDX_Control(pDX, IDC_EDIT_XPOINT, m_xpoint);DDX_Control(pDX, IDC_EDIT_WIDTH, m_width);DDX_Control(pDX, IDC_EDIT_LENGTH, m_length);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCohen_SutherlandDlg, CDialog)/AFX_MSG_MAP(CCohen_SutherlandDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_EN_KILLFOCUS(IDC_EDIT_LENGTH, OnKillfocusEditLength)ON_EN_KILLFOCUS(IDC_EDIT_WIDTH, OnKillfocusEditWidth)ON_BN_CLICKED(IDC_BUTTON_INPOINT, OnButtonInpoint)ON_WM_LBUTTONUP()ON_BN_CLICKED(IDC_BUTTON_CLEAN, OnButtonClean)ON_WM_MOUSEMOVE()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CCohen_SutherlandDlg message handlersBOOL CCohen_SutherlandDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herethis-m_length.SetLimitText(3);/编辑框设定只能输入3个字节this-m_width.SetLimitText(3);this-m_xpoint.SetLimitText(3);this-m_ypoint.SetLimitText(3);this-m_length.SetWindowText(100);/初始化长度和宽度框为100this-m_width.SetWindowText(100);this-length = 100;/初始化裁剪窗口为100*100this-width = 100;this-s_pcount = 0;/初始化输入点计数变量为0return TRUE; / return TRUE unless you set the focus to a controlvoid CCohen_SutherlandDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CCohen_SutherlandDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();CDC dc;HDC hdc = :GetDC(this-GetSafeHwnd();dc.Attach(hdc);dc.Rectangle(10,10,311,311);/绘制用户界面矩形this-ShowCutWindow(length,width);/绘制裁剪窗口this-ShowLine(this-p_group,this-s_pcount);/绘制直线dc.Detach();:ReleaseDC(this-GetSafeHwnd(),hdc);/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CCohen_SutherlandDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCohen_SutherlandDlg:OnKillfocusEditLength() / TODO: Add your control notification handler code hereCString bufl;/长度编辑框的文本临时缓存char szChar50;/提示语句缓存this-m_length.GetWindowText(bufl);/获得长度编辑框的文本/itoa(length,buf,10);/dc.TextOut(100,100,buf);if(bufl!=)/如果长度框不为空就转换成intlength = atoi(bufl);else/如果长度框为空就提示错误sprintf(szChar,长度不能为空);MessageBox(szChar,Error,0);if(length0)/如果长度范围在1-300那么就尝试显示裁剪窗口if(width0)/如果宽度在1-300之间就显示裁剪窗体this-OnPaint();elsesprintf(szChar,长度必须为1-300之间的整数);MessageBox(szChar,Error,0);void CCohen_SutherlandDlg:OnKillfocusEditWidth() / TODO: Add your control notification handler code hereCString bufw;/宽度编辑框的文本临时缓存char s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论