图形学MFC简单绘图共110页文档
VC中MFC绘图详细教程
前一页
休息
字体对象 CFont NewFont; (2)创建字体
CreateFont( int nheight,int nWidth,//高,宽 int nEscapement, //每行文字相以于页底的角 int nOrienation, //每个….. DWORD nWeight , //字体粗细 DWORD dwltalic, //非零表示倾斜 DWORD dwUnderline, //非零表示下划线 DWORD dwStrikeout, //非零表示中划线 DWORD dwCharset, //字符集 DWORD dwOutputPrecision, //输出精度 DWORD dwClipPrecision, //剪裁精度 DWORD dwQuality, //输出质量 DWORD dwPitchAndFamily, //字体系列 lpszFaceName//字体名称} ; 前一页 DWORD 休息
4
休息
设备环境
设 备 环 境
获取设备环境 (1)使用GetDC()函数 CDC *CWnd GetDC() int ReleaseDC(CDC * pDC ) (2)直接构造CDC对象 用声明一个CDC类或其派生类对象的方式来 获取设备环境 CClientDC dc(CWnd *)
前一页
休息
3
设备环境
设 备 环 境
前一页
(1)CWindowDC 和CClientDC CPaintDC区别 CWindowDC提供客户区和非客户区画图的设备环 境;坐标原点在屏幕左上角 CClientDC CPaintDC提供画图的设备环境;坐标原 点在客户区左上角 (2) CClientDC 和CPaintDC区别 CPaintDC是响应WM_PAINT消息,用在OnPaint() 函数中;只支持屏幕显示 CClientDC不响应WM_PAINT消息,只担负此时的 绘图工作;支持屏幕显示,也支持打印 CDC常用函数(参见MSDN)
第二章 MFC交互绘图基础
第一章MFC交互绘图基础 (2)2.1 创建工具条 (2)2.1.1 添加新工具条 (2)2.1.2 在应用程序中显示工具条 (6)2.1.3 连接工具条按钮处理函数 (8)2.2 使用鼠标绘图 (10)2.2.1 鼠标消息 (10)2.2.2 用鼠标绘制直线段 (13)2.2.3 用鼠标绘制椭圆和椭圆区域 (19)2.2.4 用鼠标绘制矩形区域 (20)2.3 图元定义及重画 (22)2.3.1 图元基类CMapElement (22)2.3.2 直线段图元子类CLine (26)2.3.3 椭圆图元子类CEllipse (27)2.3.4 椭圆区域图元子类CEllipseRegion (27)2.3.5 矩形区域图元子类CRectangleRegion (28)2.3.6 图元重画 (28)2.4 设置线型和区域填充方式 (33)2.4.1 添加对话框资源 (33)2.4.2 创建设置线型和区域填充方式对话框类CSetStyleDlg (35)2.4.3 完成颜色和示例的实时显示 (39)2.4.4 在下拉框中绘图 (46)2.4.5 初始化对话框 (53)2.4.6 使用用户选择的线型和区域填充方式绘制图元 (55)2.5 选中图元 (62)2.5.1 图元的包围盒 (63)2.5.2 图元的选中判断 (64)2.5.3 绘制图元的选中标识 (67)2.5.4 用鼠标选中单个图元 (69)2.5.5 用鼠标和键盘配合选择多个图元 (72)2.5.6 选择矩形区域内的多个图元 (73)2.6 编辑图元 (77)2.6.1 修改图元的形状 (77)2.6.2 移动图元 (84)2.6.3 放大或缩小图元 (88)2.6.4 删除图元 (93)2.6.5 图元的剪切、复制和粘贴 (95)2.6.6 在状态条中显示鼠标光标位置坐标值 (101)2.6.7 撤销图元的绘制和编辑 (102)2.7 图元的持久化 (112)2.8 解决闪屏现象 (117)2.9 小结 (119)第一章MFC交互绘图基础在上一章我们所创建的应用程序中,通过添加的菜单项实现了简单的用户和应用程序的交互。
MFC图形绘制编程教程PPT优秀课件
16
3.1设备环境
2021/6/3
Step Into-如果当前正在 执行的语句中有函数,那 么会进入函数体单步执行 函数体的每一条语句。 Step Over-如果当前正 在执行的语句中有函数, 会执行调用函数,不单步 执行函数体。 Step Out-如果当前正单 步执行函数体,会直接跳 出函数执行,返回上层代 码。
2021/6/3
25
定义弧的椭圆母体 所对应的矩形区域
3.2 绘图函数
定义切割椭圆 母体的两个点
2021/6/3
26
3.2 绘图函数
高光部分的颜色
阴影部分的颜色
定义扇形、弓形的椭圆母 体所对应的矩形区域
2021/6/3
定义切割椭圆 母体的两个点
注意:逆时针原则 27
设备环境就属于上述的对象之一,它是Windows 的对象,MFC用CDC类封装了设备环境对象。
2021/6/3
2
3.1设备环境
Windows API给出了4种类型的设备环境
• 显示设备环境:支持视频显示器上的图形操作; • 信息设备环境:提供设备数据的检索; • 内存设备环境:支持位图上的图形操作; • 打印设备环境:支持打印机或绘图仪上的图形操作。
Windows程序设计
第三章 图形编程
2021/6/3
1
3.1设备环境
首先要明白一个常识,Windows是早于C++的,并 独立于C++之外,因此,Windows的某些对象(注 意这个说法“Windows的对象”)并不都属于 C++封装技术的规范之内,即Windows的这些对 象是Windows作为一个OS本身的对象,不是由某 个C++的类创建而来,但是在C++里却可以用一 个类封装这个(或这些)对象,并创建它们。
MFC绘图教程
MFC绘图教程.txt MFC编程学习的基本目标编程学习的基本目标可以进行简单的基于MFC的图形界面编程的图形界面编程可以进行简单的基于理解Windows编程的基本概念。
编程的基本概念。
理解编程的基本概念鉴于教学时间进度限制,鉴于教学时间进度限制,更复杂的应用程序开发通过自学完成。
自学完成。
实现基本MFC应用程序需要掌握如下内容:应用程序需要掌握如下内容:实现基本应用程序需要掌握如下内容Windows编程基本概念编程基本概念文档/视图结构文档视图结构文档读写对话框及标准控件的使用菜单栏的使用绘图及鼠标消息的处理3/21/2011 2主要内容GDI与设备环境(DC)与设备环境()与设备环境用CDC绘图绘图应用举例绘图工具类3/21/20113图形设备接口(图形设备接口(GDI))Windows提供了一个称为图形设备接口提供了一个称为图形设备接口 (GraphicsDevice Interface,GDI)的抽象接口。
的抽象接口。
,的抽象接口 GDI 作为作为Windows的重要组成部分,负责管理用的重要组成部分,的重要组成部分户绘图操作时功能的转换。
户绘图操作时功能的转换。
用户通过调用GDI 函数与设备打交道,GDI 通过函数与设备打交道,用户通过调用不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了用户对硬件直接进行操作,的绘图指令,避免了用户对硬件直接进行操作,从而实现设备无关性(显示器或打印机)。
从而实现设备无关性(显示器或打印机)。
3/21/20114GDI的图形输出的图形输出应用程序可以使用GDI 创建如下图形输出应用程序可以使用矢量图形:画线和填充图形,包括点、直线、曲线、多矢量图形:画线和填充图形,包括点、直线、曲线、边形、扇形和矩形等。
边形、扇形和矩形等。
光栅图形:光栅图形:通过光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出。
进行操作,包括各种位图和图标的输出。
可视化编程课件02MFC-PPT精选文档97页
项目的概念(2)
版本类型 Debug版本产生调试信息,便于程序调试与 运行 Release版本不产生调试信息,代码简短且 经过优化,程序执行效率较高
14
项目的概念(3)
Build菜单→Batch Build
15
项目的概念(4)
项目文件类型 *.dsp 项目中所有内容 *.dsw 工作区中所有项目 *.clw ClassWizard信息 *.rc 资源描述信息 Resource.h 头文件 /res 各种资源存放的目录
功能 初始化应用程序 启动默认的消息循环 终止应用程序 向应用程序加载光标 向应用程序加载图标 弹出一个消息框 打开一个文档对象 关闭所有打开的文档对象
21
根类与应用程序类(4)
文档与视图 文档对象由文档模板创建,管理应用程序的 数据,包括文档创建、打开与保存
文档模板及基类: CDocTemplate:文档模板基类 CSingleDocTemplate:SDI文档模板 CMultiDocTemplate:MDI文档模板 CDocument:专用文档基类
可视对象类(8)
设备描述环境类CDC 主要用来实现窗口绘制
CDC派生类 CPaintDC:绘图设备描述环境 CClientDC:客户区的设备描述环境 CWindowDC:窗口的设备描述环境 CMetaFileDC:元文件的设备描述环境
30
通用类(1)
文件类CFile CFile类是文件访问基类,实现文件输入与 输出操作
CFile派生类 CMemFile:驻内存文件访问接口 CStdioFile:缓存流式文件访问接口
CArchive类 CFile类通常由CArchive间接访问
mfc绘图
3、编辑“draw1()”函数,将前面“OnDraw()”函数中的绘图代码剪切到这里 void CMy003View::draw1(void) { CClientDC dc(this); //直线 dc.MoveTo(100,100); dc.LineTo(200,200); //矩形 dc.Rectangle(300,100,400,200); //椭圆 dc.Ellipse(500,100,650,200); } 4、在“OnDraw()”函数中调用“draw1()”函数 void CMy003View::OnDraw(CDC* /*pDC*/) { CMy003Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //-----------------------------------------------draw1(); //-----------------------------------------------// TODO: 在此处为本机数据添加绘制代码 } ---------------------------------------------------------------------------(四)建立菜单项调用绘图函数 1、建立菜单项 (1)切换到“资源视图” (菜单: “视图”->“资源视图”),在上面的列表中选择“Menu” —>“IDR_MAINFRAME”,双击,右侧弹出主菜单。 (2) 在主菜单条中添加一项 “绘图” , 在其下面添加一个子菜单项 “draw1” ,ID 为 “ID_DRAW1” , 如图所示: 2、菜单项调用函数 右击“draw1”菜单项,在弹出的菜单中选择“添加事件处理程序”,如图所示: 3、弹出窗口如下所示,在右侧的类列表中选择“…View”类,表示此函数建立在“…View” 类中,点击“添加编辑”按钮。 4、出现函数编辑界面,在其中添加代码如下: void CMy003View::OnDraw1() { draw1(); // TODO: 在此添加命令处理程序代码 } 5、将“OnDraw()”函数中调用“draw1();”函数的那一行注释起来,使用菜单项调用函数。 运行程序,测试菜单项的功能。
用MFC绘制各种数学图形,如sin,cos等
**理工大学C++面向对象课程设计报告院(系):计算机工程学院专业:计算机科学与技术学生姓名:__**班级计算111 学号: 2011070** 题目:设计绘制各种数学图形程序_起迄日期:_2013.6.23~2013.7.5 设计地点:计算机学院机房指导教师: *** 完成日期: 2013 年7月 5 日目录一、需求分析1.选做此课题的目的 (3)2.程序所实现的功能 (3)二、设计内容1.模块图 (3)2.主程序及其主要模块的流程图 (3)3.类图 (4)3.1表达式 (4)3.2 储存运算符的栈 (5)3.3储存运算数的栈 (5)3.4 圆 (5)3.5 椭圆 (6)3.6 三叶玫瑰线 (6)3.7 四叶玫瑰线 (7)3.8 阿基米德螺线 (7)3.9 心形线 (7)4.函数关系图 (8)5.编写程序代码 (9)三、调试分析1.实际完成的情况说明 (12)2.程序的性能分析 (12)3.上机过程中出现的问题及其解决方案 (12)4.程序中可以改进的地方说明 (13)四、用户手册 (13)五、设计总结 (15)六、参考文献 (15)七、附录 (15)一、需求分析1.选作此课题的目的在日常生活中我们常常需要解决一些复杂的数学问题,而这些数学问题的解答往往可以从它的函数图形上很直观、明了的表现出来,这时快捷方便的绘制出该数学函数的图形就显得尤为重要。
所以我们使用Microsoft 提供的MFC 类库来实现数学函数图形的绘制。
2 .程序所实现的功能本程序支持用户输入一般表达式,然后输出其对应的函数图形,例如:一次(二次……)函数,三角函数,双曲余弦,双曲正弦,双曲正切,幂函数,指数函数(以10为底,以e 为底)。
另外,还支持一些供选择的数学图形,例如:圆,椭圆,三叶玫瑰线,四叶玫瑰线,阿基米德螺线,心形线。
二、设计内容1.模块图2. 主程序及主要模块的流程图表达式特殊数学图形圆 主界面椭圆 三叶玫瑰线 阿基米德螺线四叶玫瑰线心形线开始选择图形类型No确定Yes输入表达式或参数图形结束3.类图3.1 表达式CGraphDlgpublic:double Pow(double ,double ); //幂函数求值double Operate(double ,char ,double ); //表达式求值char Precede(char ,char); //判断操作符优先级int In(char ); //判断运算数和运算符void Coordinate(); //求点的集合double Calculate(CString ,double);CGraphDlg(CWnd* pParent = NULL);enum { IDD = IDD_GRAPH_DIALOG };protected:Virtual void DoDataExchange(CDataExchange* pDX); private:ICON m_hIcon;UINT m_num; //点的数量char *m_stop;CPtrArray m_ptrarray; //点的集合变量CComboBox m_type; //图形类型CString m_expression; //表达式3.2存储运算符的栈OPTRpublic:OPTR(); //缺省构造函数int InitOPTR(); //构造一个空栈char GetTop(); //返回栈顶元素int Push(char e); //进栈char Pop(); //出栈virtual ~OPTR(); //析构函数Public:char *base; //栈底指针char *top; //栈顶指针int size; //当前已分配的存储空间3.3存储运算数的栈OPNDpublic:OPND(); //缺省构造函数int InitOPND(); //构造一个空栈double GetTop(); //返回栈顶元素int Push(double e); //进栈double Pop(); //出栈virtual ~OPND(); //析构函数Public:double *base; //栈底指针double *top; //栈顶指针int size; //当前已分配的存储空间3.4 圆circlepublic:afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnChangeEdit3();afx_msg void OnButton1();circle(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG1 };Public:double m_x; //圆心横坐标double m_y; //圆心纵坐标double m_r; //半径3.5椭圆ellipsepublic:afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnChangeEdit3();afx_msg void OnChangeEdit4();afx_msg void OnButton1();ellipse(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG2 };Public:double m_x; //椭圆中心横坐标double m_y; //椭圆中心纵坐标double m_lr; //长轴double m_sr; //短轴3.6 三叶玫瑰线sanyiepublic:afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnButton1();sanyie(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG3 };Public:double m_a; //系数adouble m_b; //角度θ3.7 四叶玫瑰线3.8 阿基米德螺线3.9 心形线siyepublic:afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnButton1();siye(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG4 }; Public:double m_a; //系数adouble m_b; //角度θajimide public:afx_msg void OnChangeEdit1();afx_msg void OnButton1();ajimide(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG5 }; Public:double m_a; //系数adouble m_b; //角度θxinxingxian public:afx_msg void OnChangeEdit1();afx_msg void OnButton1();xinxingxian(CWnd* pParent = NULL);enum { IDD = IDD_DIALOG6 }; Public:double m_a; //系数a4.函数关系图CGraphDlg::OnButton1() 类circle类ellipse类sanyie类siye 类ajimide类xinxingxianCGraphDlg::OnDrawing()circle::OnButton1()siye::OnButton1()ellipse::OnButton1()sanyie::OnButton1()ajimide::OnButton1()xinxingxian::OnButton1()CGraphDlg::Coordinate()CGraphDlg::Calculate(CString m_expression,double x)OPTR::Push(char ) CGraphDlg::Precede(char s,char c)CGraphDlg::In(char ch)OPND::GetTop()OPND::Pop()OPTR::GetTop()OPND::Push(double e)OPTR::InitOPTR() OPND::InitOPND()OPTR::GetTop()(箭头代表调用)CGraphDlg::Operate(double,char,double )CGraphDlg::Pow(double, double )5. 编写程序代码1.画坐标轴CClientDC dc(this);CRect rect;GetClientRect(&rect) ;dc.SetMapMode(MM_LOMETRIC) ; //设置映射模式;dc.SetWindowOrg(0,0) ; //设置屏幕窗口原点;dc.SetViewportOrg(CPoint(rect.right/2,rect.bottom/2)) ; //设置视口原点CPen pen1(PS_DOT,1,RGB(100,100,100)); //创建笔,并调整坐标颜色CPen *pOldPen = dc.SelectObject(&pen1); //更改笔并保存旧的笔for(int i=-900;i<=900;i+=50){dc.MoveTo (i,500);dc.LineTo (i,-500);}for(int j=-500;j<=500;j+=50){dc.MoveTo (-900,j);dc.LineTo (900,j);}dc.TextOut (10,500,'y'); //标记y轴dc.TextOut (870,0,'x'); //标记x轴dc.TextOut (0,0,'0'); //标记坐标原点dc.TextOut (-8,510,'^');dc.TextOut (900,25,'>');CPen pen(PS_SOLID,1,RGB(0,0,0));//创建笔,并调整坐标颜色pOldPen = dc.SelectObject(&pen);//更改笔并保存旧的笔dc.MoveTo (-900,0); //横坐标dc.LineTo (900,0);dc.MoveTo (0,-500); //纵坐标dc.LineTo (0,500);}2.选择图形类型//默认是表达式RedrawWindow();m_expression="";UpdateData(FALSE);CString text;m_type.GetWindowText(text);if(text=="圆"){circle d_circle;d_circle.DoModal(); //显示画圆的对话框}else if(text=="椭圆"){ellipse d_ellipse;d_ellipse.DoModal(); //显示画椭圆的对话框}else if(text=="三叶玫瑰线"){sanyie d_sanyie;d_sanyie.DoModal(); //显示画三叶玫瑰线的对话框}else if(text=="四叶玫瑰线"){siye d_siye;d_siye.DoModal(); //显示画四叶玫瑰线的对话框}else if(text=="阿基米德螺线"){ajimide d_ajimide;d_ajimide.DoModal(); //显示画阿基米德螺线的对话框}else if(text=="心形线"){xinxingxian d_xinxingxian;d_xinxingxian.DoModal(); //显示画心形线的对话框}3.根据表达式画出图形for(m_num-=1;m_num>0;m_num--) //从点集合中依次取出点并且相连{dc.MoveTo (((CPoint *)m_ptrarray.GetAt(m_num))->x,((CPoint *)m_ptrarray.GetAt(m_num))->y);dc.LineTo (((CPoint *)m_ptrarray.GetAt(m_num-1))->x,((CPoint *)m_ptrarray.GetAt(m_num-1))->y);}4. 画圆dc.Ellipse((m_x-m_r)*50,(m_y+m_r)*50,(m_x+m_r)*50,(m_y-m_r)*50); //调用Ellipse函数5. 画椭圆dc.Ellipse((m_x-m_lr)*50,(m_y+m_sr)*50,(m_x+m_lr)*50,(m_y-m_sr)*50);//调用Ellipse函数6. 画三叶玫瑰线double x=0,y=0;dc.MoveTo (0,0); //从原点开始画for(double p=-3.14;p<=3.14;p+=0.01) //计算点的同时画线{x=m_a*cos(3*(m_b+p))*cos(p);y=m_a*cos(3*(m_b+p))*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*x,50*y);dc.SelectObject(&pen);}7. 画四叶玫瑰线double x=0,y=0;dc.MoveTo (0,0); //从原点开始画for(double p=-3.14;p<=3.14;p+=0.01) //计算点的同时画线{x=m_a*sin(2*(m_b+p))*cos(p);y=m_a*sin(2*(m_b+p))*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*x,50*y);dc.SelectObject(&pen);}8. 画阿基米德螺线double p=-10;double x=0,y=0;x=m_a*p*cos(p);y=m_a*p*sin(p);dc.MoveTo (x*20,20*y);for( p=-10;p<=10;p+=0.01) //计算点的同时画线{x=m_a*p*cos(p);y=m_a*p*sin(p);dc.LineTo(20*x,20*y);dc.MoveTo(20*x,20*y);dc.SelectObject(&pen);}9. 画心形线double x=0,y=0;dc.MoveTo (0,0); //从原点开始画for(double p=-3.14;p<=3.14;p+=0.01) //计算点的同时画线{x=m_a*(1-cos(p))*cos(p);y=m_a*(1-cos(p))*sin(p);dc.LineTo(50*x,50*y);dc.MoveTo(50*x,50*y);dc.SelectObject(&pen);}三、调试分析1.实际完成的情况说明(完成的功能、支持的数据类型等)本程序支持用户选择数学图形类型并输入相应的参数,然后输出其对应的函数图形。
MFC绘图代码(单文档)
1.添加成员变量,在View视图加protected:CString m_ClassName;int m_Dragging;CPoint m_PointOld;CPoint m_PointOrigin;HCURSOR m_HCross;2.再添加三个处理函数void CMyDrawView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: 在此添加消息处理程序代码和/或调用默认值m_PointOrigin=point;//捕获坐标m_PointOld=point;//捕获坐标SetCapture();//捕获光标m_Dragging=1;//摇拽标记RECT Rect;GetClientRect(&Rect);//取得当前窗口的坐标ClientToScreen(&Rect);//换算为屏幕坐标::ClipCursor(&Rect);//限定坐标在屏幕内CView::OnLButtonDown(nFlags, point);}void CMyDrawView::OnLButtonUp(UINT nFlags, CPoint point) {if(m_Dragging){m_Dragging=0;::ReleaseCapture();::ClipCursor(NULL);//不在限定光标CClientDC dc(this);dc.SetROP2(R2_NOT); //dc.MoveTo(m_PointOrigin); //可不要dc.LineTo(m_PointOld); //dc.SetROP2(R2_COPYPEN);//设置笔为钢笔dc.MoveTo(m_PointOrigin);dc.LineTo(point);}// TODO: 在此添加消息处理程序代码和/或调用默认值CView::OnLButtonUp(nFlags, point);}void CMyDrawView::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息处理程序代码和/或调用默认值::SetCursor(m_HCross);//显示十字光标if(m_Dragging){CClientDC dc(this);dc.SetROP2(R2_NOT);dc.MoveTo(m_PointOrigin);//设置起点dc.LineTo(m_PointOld);//设置终点画图dc.MoveTo(m_PointOrigin);dc.LineTo(point);m_PointOld=point;}CView::OnMouseMove(nFlags, point);}。
第二章 MFC 绘图基础
本章学习目标⏹MFC上机操作步骤⏹MFC绘图方法⏹CDC类的主要绘图成员函数⏹设备上下文的调用和释放⏹双缓冲机制⏹MFC 绘制图形的几种方法本章内容2.1 MFC上机操作步骤2.2 MFC绘图方法2.3 设备上下文的调用与释放2.4 双缓冲机制2.5 MFC绘图的几种方法2.6 本章小结2.1 MFC上机操作步骤微软基类库MFC(microsoft foundation class library,MFC)是以C++形式封装的Windows API (Application Program Interface),包含了200多个已经定义好的常用基类。
在程序设计过程中,一般是通过MFC 调用基类的成员函数来完成设计任务的。
1. 从Windows的开始菜单中启动Microsoft Visual C++ 6.0,如图2-1所示。
图2-1 Visual C++启动菜单2. 在Visual C++集成开发环境中,从File|New菜单命令,弹出New对话框,切换到Projects选项卡。
如图2-2所示。
图2-2 New 对话框3. 在MFC AppWizard-Step1对话框中,选中Single Document单选按钮,其余保持默认值,如图2-3所示。
单击Finish按钮。
图2-3 MFC AppWizard-Step1 对话框4. 弹出New Project Information对话框。
如图2-4所示。
单击OK按钮。
图2-4 New Project Information 对话框5. 完成上述步骤后,Test工程的MFC应用程序框架已经生成。
如图2-5所示。
图2-5 应用程序框架6. 在应用程序框架的ClassView标签页中显示所创建的类和成员函数;在ResourceView标签页板中显示所创建的资源;在FileView标签页中显示源程序文件。
如图2-6所示。
图2-6 应用程序框架的三个标签页显示标签页:从ClassView标签页可以看出,CTestApp是应用的主函数类,用来处理消息。
MFC实现简单画图形程序
《MFC编程及应用》课程设计报告题目:简单画图形程序学号:姓名:指导老师:时间:程序设计步骤:一、建立基于对话框的应用程序框架;二、CMy0910200155Dlg类中关键新增变量的作用:CPtrArray pta; //用于保存已绘图形的相关信息。
CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过程中动态保存对象信息。
CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读取信息时动态创建类的对象。
COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。
COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。
int num; //用于存放从"Index.txt"文件中读取的数字。
int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时,表示按下了”撤消”按钮;当为3时,表示按下了”加载历史”按钮,则从文件中读取信息。
int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示刚画过圆角矩形;当为2时,表示刚画过椭圆。
int index; //用于存放pta数组的容量。
int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘问题。
int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg的一个接口,通过其值在1和0之间转换,来处理弹出式对话框的初次绘制和移动时的重绘问题。
三、CMemoryNode类中变量的作用:COLORREF BrushColor;COLORREF PenColor;int Mark; //以上三者为类CMemoryNode的成员变量,分别用来保存绘图时画刷颜色,画笔颜色和形状。
四、与控件相关联的变量:CComboBox m_BrushColor; //指示画刷颜色组合框。
