MFC GUI 编程.

Slides:



Advertisements
Similar presentations
首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
Advertisements

纺纱学. 2 绪 论 基本要求:了解纺纱系统的类别 重点掌握:棉纺系统的工艺流程 3 一、纺纱原理与设备 纺纱:用物理或机械的方法将纺织纤维纺成纱 线的过程。 纺纱原理:初加工、原料的选配、开松除杂、 混和、梳理、精梳、并合、牵伸、加捻、卷绕等。 纺纱方法:传统纺纱方法、新型纺纱方法。 纺纱设备:开清棉联合机、梳棉机、精梳机、
第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
退 出退 出退 出退 出 上一页 下一页 仪器使用 §1-2 尺规绘图工具和仪器的使用方法 图板丁字尺三角板 比例尺圆规分规铅笔曲线板。 要提高绘图的准确度和绘图效率,必须正确地使用各种绘图工 具和仪器。常用的手工绘图工具和仪器有图板、丁字尺、三角板、 比例尺、圆规、分规、铅笔、曲线板等。 提示:将光标放在仪器上,
基本知识和几何要素的投影 模块一: 字体练习 第一章 制图的基本知识与基本技能 题目提示返回.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
计算机 在分析化学的应用 ( 简介 ) 陈辉宏. 一. 概述 信息时代的来临, 各门学科的研究方法都 有了新的发展. 计算机的介入, 为分析化学的进展提供了 一种更方便的研究方法.
嵌入式操作系统 陈香兰 助教:王振明 Spring 2006.
4 第四章 矩阵 学时:  18 学时。 教学手段:  讲授和讨论相结合,学生课堂练习,演练习题与辅导答疑相结合。 基本内容和教学目的:  基本内容: 矩阵的运算,可逆矩阵,初等矩阵及其性质和意义, 分块矩阵。  教学目的:  1 .使学生理解和掌握矩阵等价的相关理论  2 .能熟练地进行矩阵的各种运算.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
Graphene Double Quantum Dot Transport Property Zhan Su Jan. 12, 2011.
系统调用 Embedded Operating Systems2 系统调用的意义 操作系统为用户态进程与硬件设备进行交互提 供了一组接口 —— 系统调用 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性.
地理信息系统概述. 数据和信息 (Data & Information) 数据 原始事实 如:员工姓名, 数据可以有数值、图形、声音、视觉数据等 信息 以一定规则组织在一起的事实的集合。
第 2 章 数据流分析 内容概述 数据流分析推导的是数据沿着程序执行路 径流动的信息 – 过程内的分析:可用表达式分析、到达-定值分 析等 – 过程间分析 –Shape 分析 – 理论基础 – 数据流方程的求解.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样 的一种手段。在实际中,数据不可避免的会有误差,插值函 数会将这些误差也包括在内。
有限自动机 (Finite Automata) 描述程序设计语言中的单词的识别过程。 主要内容: 确定有限自动机 DFA(Deterninistic FA) 确定有限自动机 DFA 的实现 非确定有限自动机 NFA(Nondeterninistic FA) NFA 到 DFA 的转换 DFA 的化简.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
Linux 内核源代码导读 中国科学技术大学计算机系 陈香兰( 0551 - ) Spring 2009.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
聚合物在生物高分子分离中的应用 王延梅 中国科学技术大学高分子科学与工程系 Tel
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
1 第 7 章 专家控制系统 概述 专家系统的起源与发展 专家系统的一般结构 专家系统的知识表示和获取 专家系统的特点及分类.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
内存寻址 Embedded Operating Systems2 在 intelx86 处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段 (segment) 和偏 移量 (offset) 组成 线性地址: 32 位无符号整数,可以表示 4G 的地址.
操作系统原理课程设计指南 姜海燕 设计考核幻灯制作  1.1 封皮:系统名称,研制人员  1.2 目的及意义  1.3 功能设计:功能框图、用例图  1.4 结构设计:系统结构  1.5 核心技术及技术路线:画图  1.6 进度安排  1.7 人员安排  1.8.
UML 对象设计与编程 主 讲 : 董兰芳 副教授 Dept. of Computer Science,USTC
嵌入式操作系统 陈香兰 助教:王振明 Spring 2007.
多媒体制作工具 Authorware 在流程线上添加图标 引入素材 编辑图标属性. 标题拦 菜单栏 图标栏 设计 窗口 演示 窗口 工具栏.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
本讲要点 认识【文本】工具 了解文本的输入与设置 掌握文字的分离与打散 了解滤镜在文本中的应用 第 4 讲 Flash 文本的使用.
模式识别 – 成分分析与核函数 第八章 成分分析与核函数. 模式识别 – 成分分析与核函数 8.0 问题的提出 降低特征维数 : Dimension Reduction  提高泛化能力:减少模型的参数数量;  减少计算量: 主要方法: 1. 主成分分析 (PCA): Principle Component.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Introduction to Automatic Control The Laplace Transform Li Huifeng Tel:
刘相兵 (Maclean Liu) 介绍 dbms_registry PL/SQL 程序包.
? 小数乘整数 制作人:吴运粮 复习 1.下面乘积得多少? 8 × 3= 8 × 3用加法表示什么意思? 3个8相加 24.
第四章 计算机数控( CNC )系统  本章重点:  1 计算机数控系统构成及其结构特点  2 运动轨迹插补原理  3 刀具补偿.
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
是什么? 有什么用? 机要文件科研成果商业机密 原创设计 重要资料,有时难免被泄露或被剽窃。
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
超星数字图书馆 一、页面的使用 进入数字图书馆网页 下载超星阅读器 查找图书.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
7 生产费用在完工产品与在产 品之间分配的核算. 2 第七章 生产费用在完工产品与在产品之 间的分配  知识点 :  理解在产品的概念  掌握生产费用在完工产品与在产品之间的分 配.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
河南济源市沁园中学 前进中的沁园中学欢迎您 ! 温故知新: 1 、什么是原子? 2 、原子是怎样构成的? 3 、原子带电吗?为什么?
个体 精子 卵细胞 父亲 受精卵 母亲 人类生活史 问题:人类产生配子(精、卵 细胞)是不是有丝分裂?
荆门市总工会会员信息采集系统 操作培训 融建信息技术有限公司 肖移海 QQ群号:
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
目标与要求: 让学生了解材料美是布的基本特点,利 用布的特点进行创作,培养学生的创新和实 践能力。
参考文献管理软件. 常见参考文献管理软件 : 中文 : CNKI E-learning (目前免费) NoteExpress NoteFirst 英文: Refworks Endnote (网络版免费) Mendeley……
登陆数据录入明细申报生成汇总申报扣款 输入计算机编码及 密码即可登陆系统. 登陆数据录入明细申报生成汇总申报扣款.
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
如何开展新学期 “ 导学课 ”. 如何组织 导学课 遇到问题 联系谁 导学课 基本内容 123 目录.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
§5.6 利用希尔伯特 (Hilbert) 变换 研究系统的约束特性 希尔伯特变换的引入 可实现系统的网络函数与希尔伯特变换.
Word 绘制流程图 图解图解图解图解. 第一步:绘制对象 打开一个 Word 空白文档。 在 “ 绘图 ” 工具栏上,单击 “ 自选图形 ” ,指向 “ 流程图 ” , 再单击所需的形状。 图解.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
Presentation transcript:

MFC GUI 编程

Greetings

Hello, World! class CGreetingsDoc : public CDocument { protected: // create from serialization only char *m_pMessage; // Attributes public: char *GetGreetings() return m_pMessage; } … CGreetingsDoc::CGreetingsDoc() m_pMessage = "Hello, world!";

void CGreetingsView::OnDraw(CDC* pDC) { CGreetingsDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); RECT ClientRect; GetClientRect(&ClientRect); pDC->DrawText( pDoc->GetGreetings(), -1, &ClientRect, DT_CENTER ); }

Button void CGreetingsView::OnButtongreetings() { AfxMessageBox("Hello, world!"); }

MiniDraw

MiniDraw 用户可以画不同的图形元素 Line, rectangle, ellipse, polygon… demo

1. 用鼠标画线

Member Variables class CMiniDrawView : public CView { private: int m_Dragging; CPoint m_PointOld; CPoint m_PointOrigin; } CMiniDrawView::CMiniDrawView() m_Dragging = 0;

响应消息 ClassWizard (^W)

WM_LBUTTONDOWN void CMiniDrawView::OnLButtonDown(UINT nFlags, CPoint point) { //AfxMessageBox("button down"); m_PointOrigin = point; m_PointOld = point; m_Dragging = 1; CView::OnLButtonDown(nFlags, point); }

WM_MOUSEMOVE void CMiniDrawView::OnMouseMove(UINT nFlags, CPoint point) { if( !m_Dragging ) return; CClientDC ClientDC( this ); ClientDC.SetROP2( R2_NOT ); ClientDC.MoveTo( m_PointOrigin ); ClientDC.LineTo( m_PointOld ); ClientDC.LineTo( point ); m_PointOld = point; CView::OnMouseMove(nFlags, point); }

WM_LBUTTONUP void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point) { if( !m_Dragging ) return ; CClientDC ClientDC( this ); ClientDC.SetROP2( R2_NOT ); ClientDC.MoveTo( m_PointOrigin ); ClientDC.LineTo( m_PointOld ); ClientDC.SetROP2( R2_COPYPEN ); ClientDC.LineTo( point ); m_Dragging = 0; CView::OnLButtonUp(nFlags, point); }

Problem 窗口更新后线段消失了 原因? 没有存储数据

2. 存储数据

线段数据结构 class CLine { private: int m_X1, m_Y1, m_X2, m_Y2; public: CLine(int X1, int Y1, int X2, int Y2 ) m_X1 = X1; m_Y1 = Y1; m_X2 = X2; m_Y2 = Y2; } void Draw( CDC *pDC ) pDC->MoveTo( m_X1, m_Y1 ); pDC->LineTo( m_X2, m_Y2 ); };

保存线段的数组 class CMiniDrawView : public CView { vector<CLine *> m_LineArray; … } #include <vector> using namespace std;

保存线段数据 void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if( m_Dragging ) CClientDC ClientDC( this ); ClientDC.SetROP2( R2_NOT ); ClientDC.MoveTo( m_PointOrigin ); ClientDC.LineTo( m_PointOld ); ClientDC.SetROP2( R2_COPYPEN ); ClientDC.LineTo( point ); m_Dragging = 0; CLine *pLine = NULL; pLine = new CLine(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y ); m_LineArray.push_back( pLine ); }

重画所有线段 void CMiniDrawView::OnDraw(CDC* pDC) { CMiniDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here for( int i=0; i<m_LineArray.size(); i++) m_LineArray.at(i)->Draw(pDC); }

如何检测有无内存泄漏 Debug information

释放空间 CMiniDrawView::~CMiniDrawView() { for( int i=0; i<m_LineArray.size(); i++) SAFEDELETE ( m_LineArray.at(i) ); } #define SAFEDELETE(p) {if(p){delete p; p=NULL;}}

3. 更多图形元素 不同类型图形元素如何存储? 如何组织它们之间的关系?

椭圆图形及数据结构 class CEllipse { private: int m_X1, m_Y1, m_X2, m_Y2; public: CEllipse(int X1, int Y1, int X2, int Y2 ) m_X1 = X1; m_Y1 = Y1; m_X2 = X2; m_Y2 = Y2; } void Draw( CDC *pDC ) pDC->Ellipse( m_X1, m_Y1, m_X2, m_Y2 ); };

??? vector<CLine *> m_LineArray; vector<CEllipse *> m_EllipseArray; …

4. 父类和继承 class CFigure { public: virtual void Draw( CDC *pDC ) {} //虚函数 }; class CLine: public CFigure class CEllipse: public CFigure

5. 图形数组 class CMiniDrawView : public CView { vector<CFigure *> m_FigArray; UINT m_CurrentTool; //图形类型 } //数据初始化 CMiniDrawView::CMiniDrawView() m_CurrentTool = ID_BUTTONLINE; 替换m_LineArraym_FigArray CFigure *pFigure = NULL; pFigure = new CLine (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y ); m_FigArray.push_back( pFigure );

图形类型 void CMiniDrawView::OnButtonline() { m_CurrentTool = ID_BUTTONLINE; } void CMiniDrawView::OnButtonellipse() m_CurrentTool = ID_BUTTONELLIPSE;

OnMouseMove void CMiniDrawView::OnMouseMove(UINT nFlags, CPoint point) { if( !m_Dragging ) return ; CClientDC ClientDC( this ); ClientDC.SelectStockObject (NULL_BRUSH); switch (m_CurrentTool) case ID_BUTTONLINE: ClientDC.SetROP2( R2_NOT ); ClientDC.MoveTo( m_PointOrigin ); ClientDC.LineTo( m_PointOld ); ClientDC.LineTo( point ); break; case ID_BUTTONELLIPSE: ClientDC.SetROP2 (R2_NOT); ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y ); ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y ); } m_PointOld = point; CView::OnMouseMove(nFlags, point);

OnLButtonUp void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point) { if( !m_Dragging ) return; CClientDC ClientDC( this ); ClientDC.SelectStockObject (NULL_BRUSH); CFigure *pFigure = NULL; switch (m_CurrentTool) case ID_BUTTONLINE: ClientDC.SetROP2( R2_NOT ); ClientDC.MoveTo( m_PointOrigin ); ClientDC.LineTo( m_PointOld ); pFigure = new CLine(m_PointOrigin.x, m_PointOrigin.y, point.x, point.y ); break; case ID_BUTTONELLIPSE: ClientDC.SetROP2 (R2_NOT); ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y ); pFigure = new CEllipse (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y); } ClientDC.SetROP2 (R2_COPYPEN); pFigure->Draw (&ClientDC); m_FigArray.push_back( pFigure ); m_Dragging = 0; CView::OnLButtonUp(nFlags, point);

6. 多态性 void CMiniDrawView::OnDraw(CDC* pDC) { CMiniDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->SelectStockObject (NULL_BRUSH); for( int i=0; i<m_FigArray.size(); i++) m_FigArray.at(i)->Draw(pDC); }

线框画图模式 CMiniDrawView:: OnMouseMove() CMiniDrawView::OnLButtonUp() CClientDC ClientDC( this ); ClientDC.SelectStockObject (NULL_BRUSH); CMiniDrawView::OnDraw() pDC->SelectStockObject (NULL_BRUSH);

类的分离 Figure.h/cpp

总结 STL vector GDI画图 鼠标交互 消息响应(鼠标) 按钮 类的继承和多态

作业3--MiniDraw 完善MiniDraw画图程序 写一个画图小程序MiniDraw,要求画直线(Line),椭圆(Ellipse),矩形(Rectangle),多边形(Polygon)等图形元素(图元) 每种图元需用一个类(对象)来封装,如CLine, CEllipse, CRect, CPolygon, CFreehand; 各种图元从一个父类CFigure来继承; 学习类的继承和多态

要求 至少完成直线(Line),椭圆(Ellipse),矩形(Rectangle),多边形(Polygon) ,自由手绘线(Freehand)等图形元素 Deadline: 9:30a.m. April 6, 2011

如何学好VC 需要有好的C/C++基础 理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途 多使用Online Help 记住一些常用的消息名称和参数的意义 学会看别人的代码 多练习,在实践中成长!

References VC入门级书籍 Windows编程 《MFC深入浅出》

Q&A