简易绘图程序 使用API和MFCWord格式文档下载.docx

上传人:b****1 文档编号:326039 上传时间:2023-04-28 格式:DOCX 页数:20 大小:313.77KB
下载 相关 举报
简易绘图程序 使用API和MFCWord格式文档下载.docx_第1页
第1页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第2页
第2页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第3页
第3页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第4页
第4页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第5页
第5页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第6页
第6页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第7页
第7页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第8页
第8页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第9页
第9页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第10页
第10页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第11页
第11页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第12页
第12页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第13页
第13页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第14页
第14页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第15页
第15页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第16页
第16页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第17页
第17页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第18页
第18页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第19页
第19页 / 共20页
简易绘图程序 使用API和MFCWord格式文档下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

简易绘图程序 使用API和MFCWord格式文档下载.docx

《简易绘图程序 使用API和MFCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《简易绘图程序 使用API和MFCWord格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。

简易绘图程序 使用API和MFCWord格式文档下载.docx

绘制圆弧线

Polybezir:

绘制弯曲线

b)区域绘图函数

Rectant:

绘制矩形

Roundrect:

绘制圆边矩形

Ellips:

绘制椭圆

Pie:

绘制扇形

2)自由绘图:

拖动鼠标可以自由绘制曲线,可以通过一个对话框选择所需线形线宽等。

3)清空功能:

1)全部清空:

可以清空整个屏幕内容。

2.系统设计

2.1系统总体框架

API:

MFC:

2.2系统详细设计

2.2.1模块划分图及描述

a)绘图函数模块:

通过各种系统自带的绘图函数,直接调用绘图。

设置他们的位置,并添加到菜单项,使点击菜单项则可出现相应图形。

b)自由绘图模块:

按下鼠标左键,初始化起始位置,在选定自由绘图模式的情况下,拖动鼠标的同时,获取鼠标当前位置为终点位置,调用MoveTo和LineTo函数连接两点。

连线完成后,将上一条直线的终点作为下一次连线的起始位置。

反复进行该操作,直到鼠标左键不再处于按下状态。

当连线的频率足够快时,所画出的图形能近似于曲线,就能实现自由绘图。

更改画笔线宽、线形:

设置一个对话框,分别定义两个成员变量储存用户选择的现款和线形,再用一个整形变量,在每次绘图前,声明一个CPen类型的画笔对象,并用储存的颜色和线宽对该对象进行初始化,随后把该画笔选入设备描述表中。

c)窗口图形模块:

通过在资源视图中设置菜单栏,将菜单栏设置成绘图函数、设置、清空(等板块;

并默认为自由线画图,分别定关联函数和变量来记录做出的选择。

2.2.2类关系图及描述

本程序主要在视图类中进行操作,原有类主要是CDrawView类有更改,其他类都由系统生成,未做很大更改。

另外,新定义了一个Csettingdlg类来存储线宽和线形的设置。

名称

属性

备注

m_ptOrgin

成员变量

记录画图起点

m_ptEnd

记录画图终点

m_color

记录画笔和画刷颜色

m_width

记录画笔线宽

m_SolidBrush

判断是否选择实心画刷

m_pBrush

存储画图时使用的画刷

LDown

判断鼠标左键是否按下

OnLine()

成员函数

绘图函数中选择“直线”选项响应函数

OnRectangle()

绘图函数中选择“矩形”选项响应函数

OnEllipse()

绘图函数中选择“椭圆”选项响应函数

Onpie()

绘图函数中选择“扇形”选项响应函数

OnLButtonDown()

绘图模式中鼠标左键按下响应函数

OnLButtonUp()

鼠标左键弹起响应函数

Onquanbuqingkong()

选择“清除屏幕”选项响应函数

OnMouseMove()

鼠标移动响应函数

Onxiantiao()

储存选择的线条宽度和线条形状

2.2.3程序流程图及描述

2.3关键算法分析

函数一:

//窗口函数

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,

WPARAMwParam,LPARAMlParam)

{

staticintmenuId=0;

//静态变量

intwmId,wmEvent;

HDChdc;

PAINTSTRUCTps;

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)

{

caseIDM_FIG1:

menuId=IDM_FIG1;

InvalidateRect(hwnd,NULL,TRUE);

//实现会动的时钟

caseIDM_FIG2:

menuId=IDM_FIG2;

//实现三角形的绘制

caseIDM_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;

}

EndPaint(hwnd,&

caseWM_DESTROY:

KillTimer(hwnd,1);

//销毁计时器

PostQuitMessage(0);

default:

//缺省时采用系统消息缺省处理函数

returnDefWindowProc(hwnd,message,wParam,lParam);

}

return(0);

}

函数二:

会动的时钟

voidmclock()

{Shape*pShape;

cwin<

<

Message(Point(-2,7),"

走动的时钟"

);

/*画表盘*/

intradius=6;

Pointorg(0,0);

pShape=&

org;

pShape->

SetColor(RGB(255,255,255));

//白色,设置表芯点的颜色

CircleclkPlate(org,radius);

clkPlate;

SetColor(RGB(0,255,255));

//蓝色,设置表盘圆周颜色c5

doublex,y,x_s,y_s,x_m,y_m,x_h,y_h;

inti;

for(i=0;

i<

12;

i++)//设置个整点的圆点

{

x=0.9*radius*sin(PI*i/6);

y=0.9*radius*cos(PI*i/6);

PointmPoint(x,y);

pShape=&

mPoint;

pShape->

SetColor((RGB(255,255,255)));

cwin<

structtmlocal;

time_tt;

//获取系统日历时间

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*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);

/*画表针*/

PointhEnd(x_h,y_h),mEnd(x_m,y_m),sEnd(x_s,y_s);

LinehLine(org,hEnd),mLine(org,mEnd),sLine(org,sEnd);

hLine.SetColor((RGB(255,0,0)));

//红色

mLine.SetColor((RGB(0,255,0)));

//绿色

sLine.SetColor((RGB(255,255,0)));

//黄色

hLine<

mLine<

sLine<

函数三:

画三角形

voidDrawTriangle(HWNDhwnd,HDChdc)

{//获得客户区域

RECTr;

GetClientRect(hwnd,&

r);

//设置映像模式

SetMapMode(hdc,MM_ISOTROPIC);

//设置窗口坐标范围

SetWindowExtEx(hdc,100,100,NULL);

//设置视口坐标范围

SetViewportExtEx(hdc,r.right,r.bottom,NULL);

//绘制三角形

Pointp[]={Point(10,10),Point(10,19),Point(22,19)};

MoveToEx(hdc,p[0].get_x(),p[0].get_y(),NULL);

for(inti=0;

i<

3;

i++)

{if(i==2)

{LineTo(hdc,p[0].get_x(),p[0].get_y());

continue;

LineTo(hdc,p[i+1].get_x(),p[i+1].get_y());

MFC:

画直线

voidCMYdrawView:

:

OnDrawLineto()

//TODO:

在此添加命令处理程序代码

CClientDCdc(this);

dc.MoveTo(300,300);

dc.LineTo(400,400);

画矩形

OnDrawRectangle()

dc.Rectangle(450,100,650,250);

画椭圆

OnDrawEllipse()

dc.Ellipse(450,400,650,500);

函数四:

OnLButtonDown(UINTnFlags,CPointpoint)

在此添加消息处理程序代码和/或调用默认值

CView:

OnLButtonDown(nFlags,point);

SetCapture();

:

SetCursor(m_hCross);

m_ptOrigin=point;

m_bDragging=true;

函数五:

OnLButtonUp(UINTnFlags,CPointpoint)

//CView:

OnLButtonUp(nFlags,point);

if(m_bDragging)

m_bDragging=false;

ReleaseCapture();

函数六:

OnMouseMove(UINTnFlags,CPointpoint)

//TODO:

CView:

OnMouseMove(nFlags,point);

if(m_bDragging)

{

CMYdrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

pDoc->

AddLine(m_ptOrigin,point);

//加入线段到指针数组

CClientDCdc(this);

CPenpen(m_nLineStyle,m_nLineWidth,RGB(0,0,0));

dc.SelectObject(&

pen);

dc.MoveTo(m_ptOrigin);

dc.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的编程,使用到了大量的类,使用了全新的工具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.参考文献

[1]《VisualC++6.0》XXX

[2]《基于MFC设计建议画图板》包头师范学校论文

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2