1、绘制圆弧线Polybezir:绘制弯曲线b) 区域绘图函数Rectant:绘制矩形Roundrect:绘制圆边矩形Ellips:绘制椭圆Pie:绘制扇形2)自由绘图:拖动鼠标可以自由绘制曲线,可以通过一个对话框选择所需线形线宽等。3)清空功能:1) 全部清空:可以清空整个屏幕内容。2. 系统设计 2.1 系统总体框架API: MFC:2.2 系统详细设计2.2.1 模块划分图及描述a) 绘图函数模块:通过各种系统自带的绘图函数,直接调用绘图。设置他们的位置,并添加到菜单项,使点击菜单项则可出现相应图形。b) 自由绘图模块:按下鼠标左键,初始化起始位置,在选定自由绘图模式的情况下,拖动鼠标的同时
2、,获取鼠标当前位置为终点位置,调用MoveTo和LineTo函数连接两点。连线完成后,将上一条直线的终点作为下一次连线的起始位置。反复进行该操作,直到鼠标左键不再处于按下状态。当连线的频率足够快时,所画出的图形能近似于曲线,就能实现自由绘图。更改画笔线宽、线形:设置一个对话框,分别定义两个成员变量储存用户选择的现款和线形,再用一个整形变量,在每次绘图前,声明一个CPen类型的画笔对象,并用储存的颜色和线宽对该对象进行初始化,随后把该画笔选入设备描述表中。c) 窗口图形模块:通过在资源视图中设置菜单栏,将菜单栏设置成绘图函数、设置、清空(等板块;并默认为自由线画图,分别定关联函数和变量来记录做出
3、的选择。2.2.2类关系图及描述本程序主要在视图类中进行操作,原有类主要是CDrawView类有更改,其他类都由系统生成,未做很大更改。另外,新定义了一个Csettingdlg类来存储线宽和线形的设置。名称属性备注m_ptOrgin成员变量记录画图起点m_ptEnd记录画图终点m_color记录画笔和画刷颜色m_width记录画笔线宽m_SolidBrush判断是否选择实心画刷m_pBrush存储画图时使用的画刷LDown判断鼠标左键是否按下OnLine( )成员函数绘图函数中选择“直线”选项响应函数OnRectangle( )绘图函数中选择“矩形”选项响应函数OnEllipse( )绘图函数
4、中选择“椭圆”选项响应函数Onpie( )绘图函数中选择“扇形”选项响应函数OnLButtonDown( )绘图模式中鼠标左键按下响应函数OnLButtonUp( )鼠标左键弹起响应函数Onquanbuqingkong( )选择“清除屏幕”选项响应函数OnMouseMove( )鼠标移动响应函数Onxiantiao ( )储存选择的线条宽度和线条形状2.2.3程序流程图及描述2.3 关键算法分析函数一:/窗口函数LRESULTCALLBACK WndProc(HWNDhwnd, UINTmessage, WPARAMwParam, LPARAMlParam) staticint menuId=
5、0;/静态变量 int wmId, wmEvent; HDC hdc; PAINTSTRUCT ps; switch(message) caseWM_CREATE: SetTimer(hwnd,1,1000,NULL); break; caseWM_TIMER: InvalidateRect(hwnd,NULL,TRUE); break; caseWM_COMMAND:/处理菜单消息 wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) case IDM_FIG1: menuId=IDM_FIG1; InvalidateR
6、ect(hwnd,NULL,TRUE);/实现会动的时钟 case IDM_FIG2: menuId=IDM_FIG2; /实现三角形的绘制 case IDM_EXIT:DestroyWindow(hwnd); /实现退出程序功能 break; caseWM_PAINT: hdc = BeginPaint(hwnd, &ps); if (menuId) cwin.open(hwnd, hdc); switch(menuId) caseIDM_FIG1:mclock(); caseIDM_FIG2: DrawTriangle(hwnd,hdc);break; / 其它绘图程序 break; En
7、dPaint(hwnd, & caseWM_DESTROY: KillTimer(hwnd,1);/销毁计时器 PostQuitMessage(0); default: /缺省时采用系统消息缺省处理函数 returnDefWindowProc(hwnd,message,wParam,lParam); return(0);函数二:会动的时钟void mclock() Shape *pShape; cwinSetColor(RGB(255,255,255); / 白色,设置表芯点的颜色 Circle clkPlate(org,radius);clkPlate;SetColor(RGB(0,255,
8、255); / 蓝色,设置表盘圆周颜色c5 double x,y,x_s,y_s,x_m,y_m,x_h,y_h; int i; for(i=0;iSetColor(RGB(255,255,255); cwin structtm local; time_t t; / 获取系统日历时间 t=time(NULL); / 将日历时间转化为本地时间 localtime_s(&local,&t); x_s=0.89*radius*sin(PI*(local.tm_sec)/30); /秒针 y_s=0.89*radius*cos(PI*(local.tm_sec)/30); x_m=0.7*radius
9、*sin(PI*(local.tm_min)/30); /分针 y_m=0.7*radius*cos(PI*(local.tm_min)/30); x_h=0.5*radius*sin(PI*(local.tm_hour)/6); /时针 y_h=0.5*radius*cos(PI*(local.tm_hour)/6); /* 画表针*/ Point hEnd(x_h,y_h),mEnd(x_m,y_m),sEnd(x_s,y_s); Line hLine(org,hEnd),mLine(org,mEnd),sLine(org,sEnd); hLine.SetColor(RGB(255,0,0
10、); / 红色 mLine.SetColor(RGB(0,255,0); / 绿色 sLine.SetColor(RGB(255,255,0); / 黄色hLinemLinesLine函数三:画三角形void DrawTriangle(HWNDhwnd,HDChdc) / 获得客户区域 RECT r; GetClientRect(hwnd, &r); / 设置映像模式 SetMapMode (hdc, MM_ISOTROPIC); / 设置窗口坐标范围 SetWindowExtEx(hdc, 100, 100, NULL); / 设置视口坐标范围 SetViewportExtEx(hdc, r
11、.right, r.bottom, NULL); / 绘制三角形 Point p=Point(10,10),Point(10,19),Point(22,19); MoveToEx( hdc, p0.get_x(), p0.get_y(), NULL); for( int i=0; iAddLine(m_ptOrigin, point);/加入线段到指针数组 CClientDC dc(this); CPen pen(m_nLineStyle, m_nLineWidth, RGB(0, 0, 0); dc.SelectObject(&pen); dc.MoveTo(m_ptOrigin); dc.
12、LineTo(point); m_ptOrigin = point;函数七:清空函数OnDrawInvalidate() this-Invalidate();函数八:设置对话框CSettingDlg:CSettingDlg(CWnd* pParent /*=NULL*/) CDialogEx(CSettingDlg:IDD, pParent) , m_nLineWidth(0) , m_nLineStyle(0)3.程序运行结果分析图一:图二 三角形绘制图三 菜单图四:绘图函数展示图五:自由线画图展示设置功能4.总结4.1课题的难点和关键点难点:课题的难点在于使用了对Windows的编程,使用
13、到了大量的类,使用了全新的工具MFC。VC是C+语言,是一种面向对象的编程语言。他于基础语言不同点在于,基础语言是一条路走到底的(中断技术除外),而面向对象是等待你的指令才往下走,是被动的编程语言。关键点:vc+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。4.2本课题的评价本课题很有意思,初次接触式充满了意思。设计以及编写时需要查大量的资料,丰富了我们的知识;编写时极容易遇到困难,增加了我们的耐心;最关键的还是学到了很多有用的关于VC的方法技巧。便于我们在今后的学习中将MFC作为一种基本而优良的工具。4.3心得体会对于WINDOWS编程很游泳而且有意思,我们要好好学习,在以后的运用中才能熟能生巧。3. 参考文献1Visual C+6.0XXX2基于MFC设计建议画图板 包头师范学校论文
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2