MFC经典绘图(清华大学)

合集下载

MFC绘图

MFC绘图

一、绘制线条1、新建MFC单文档工程Draw。

2、为CDrawView类添加CPoint类型的成员变量m_ptOrigin,将其访问权限设置为Private。

3、添加WM_LBUTTONDOWN的消息响应函数,该函数初始化m_ptOrigin变量m_ptOrigin=point。

4、添加WM_LBUTTONUP的消息响应函数void CDrawView::OnLButtonUp(UINT nFlags, CPoint point),在该函数里可添加如下各种代码实现绘图:(1)、利用SDK全局函数实现画线功能:HDC hdc;hdc=::GetDC(m_hWnd); //获得窗口的设备描述表MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); //移动到线条的起点LineTo(hdc,point.x,point.y); //画线::ReleaseDC(m_hWnd,hdc);//释放设备描述表知识点:所有派生于CWnd类的子类都拥有m_hWnd这一成员变量,m_hWnd被定义为HWND类型,用于保存当前窗口的句柄,该成员变量具有public的访问权限。

(2)、利用MFC的CDC类实现画线功能:CDC* pDC=GetDC();pDC->MoveTo(m_ptOrigin);pDC->LineTo(point);ReleaseDC(pDC);知识点:MFC提供了设备描述表的封装类CDC,该类封装了所有与绘图相关的操作。

该类提供了一个数据成员m_hDC,用来保存与CDC类相关的DC句柄(3)、利用MFC的CClientDC类实现画线功能:CClientDC dc(this);//dc(GetParent())可获得父窗口的DCdc.MoveTo(m_ptOrigin);dc.LineTo(point);知识点:CClientDC派生于CDC类,当一个CClientDC对象在构造时,它在内部会调用GetDC 函数,在这个CClientDC对象析构时,它会调用ReleaseDC函数。

MFC绘图函数(全)

MFC绘图函数(全)

画点像素点的绘制不过是改变单个像素点的颜色。

SetPixel( ) 试图用指定的颜色画一个像素,返回绘制时使用的实际颜色SetPixelV( ) 与上面的基本相同,但不用返回绘制时使用的实际颜色,因而速度更快画线画线即改变屏幕上一系列像素点的颜色。

M o v e To( ) 开始画线、弧和多边形时,把光标移动到一个初始位置L i n e To( ) 画一条从初始位置到另一个点的直线Arc( ) 画一段弧A r c To( ) 画一段弧,并更新初始位置AngleArc( ) 画一条线,然后画一段弧,并更新初始位置PolyDraw( ) 画一系列线段和B e z i e r样条PolyLine( ) 画一系列线段PolyPolyLine( ) 画多个系列线条画形状这里的形状是一系列封闭线条。

Rectangle( ) 画一个矩形Pie( ) 画一个饼状楔形RoundRect( ) 画一个圆角矩形Draw3dRect( ) 画一个三维矩形Polygon( ) 画一个多边形DrawEdge( ) 画一个矩形的边缘PolyPolygon( ) 创建一个或多个多边形DrawFrameControl( ) 画一个框架控件Ellipse( ) 画一个椭圆形状填充和翻转填充和翻转改变一个形状内的所有像素点颜色。

FillRect( ) 填充一个矩形FillSolidRect( ) 用一单色填充一个矩形InvertRect( ) 反转一个矩形的颜色ExtFloodFill( ) 用当前画刷填充一个区域,提供比FloodFill( )成员函数更多的灵活性FrameRect( ) 画一个矩形的边框下面三个函数包括一个区域对象,它实际上是一个线条列表,形成一个由设备环境维护的形状。

有关区域的详细讨论参见4 . 4 . 8节“剪裁属性”。

FillRgn( ) 填充一个区域InvertRgn( ) 反转一个区域的颜色FrameRgn( ) 画一个特定区域的边框滚动通过滚动,可移动屏幕周围像素颜色。

MFC图形绘制编程教程PPT优秀课件

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绘图

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绘图课程设计

mfc绘图课程设计

mfc绘图课程设计一、课程目标知识目标:1. 学生能理解MFC(Microsoft Foundation Class)的基本概念及其在绘图中的应用;2. 学生能掌握MFC绘图程序的基本框架和常用绘图工具的使用;3. 学生能了解并运用MFC中的颜色、画笔、画刷等绘图属性。

技能目标:1. 学生能运用MFC编写简单的绘图程序;2. 学生能通过MFC实现基本的图形绘制,如线条、矩形、椭圆等;3. 学生能通过MFC实现图形的填充、旋转等变换。

情感态度价值观目标:1. 培养学生对计算机绘图产生兴趣,激发其主动探索精神;2. 培养学生在团队合作中相互学习、交流,形成良好的合作氛围;3. 培养学生具备创新思维,敢于尝试新方法,提高解决问题的能力。

课程性质:本课程为信息技术学科选修课程,适用于对计算机绘图有兴趣的学生。

学生特点:学生具备一定的编程基础,对MFC有一定了解,具有较强的学习能力和探索精神。

教学要求:课程要求教师引导学生主动探索,通过实践操作,掌握MFC绘图的相关知识和技能。

在教学过程中,注重培养学生的动手能力和创新能力。

教学评估以学生的实际操作和绘图作品为依据。

二、教学内容1. MFC绘图基础理论:- MFC概述及其在绘图中的应用;- 常用绘图工具和类的介绍。

2. MFC绘图程序框架:- 创建MFC绘图程序的基本步骤;- 常用绘图函数和功能介绍。

3. 图形绘制与变换:- 线条、矩形、椭圆等基本图形的绘制;- 图形的填充、旋转等变换操作。

4. MFC绘图进阶应用:- 颜色、画笔、画刷等绘图属性的应用;- 综合实例分析,实现复杂图形的绘制。

教学大纲安排:第一课时:MFC绘图基础理论,介绍MFC及其在绘图中的应用,学习常用绘图工具和类。

第二课时:MFC绘图程序框架,学习创建MFC绘图程序的基本步骤和常用绘图函数。

第三课时:图形绘制与变换,实践绘制基本图形和实现图形的填充、旋转等变换。

第四课时:MFC绘图进阶应用,学习颜色、画笔、画刷等绘图属性的应用,分析综合实例。

mfc简单绘图程序

mfc简单绘图程序

M F C简单的绘图程序——王帅目录摘要 (2)关键字 (2)1 引言 (2)设计目的 ....................................................... 错误!未定义书签。

2 功能说明 (2)菜单栏 ........................................................ 错误!未定义书签。

图形 (3)画笔 (4)画硬币 (4)工具栏 (5)状态栏 (5)3 功能的实现 (5)视图设计 (5)编辑资源 (6)编程思路及各个函数的实现 (7)(1)思路 (7)(2)代码的实现 (7)1.为基本形状创建一个基类 (8)2.基本形状类的创建 (8)矩形类的创建及定义 (8)圆形类的创建及定义 (10)正五边形类的创建及定义 (11)正三角形类的创建及定义 (14)椭圆类的创建及定义 (16)正四边形类的创建及的定义 (17)正六边形类的创建及定义 (18)直线类的创建及定义 (19)3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20)矩形类的调用与与绘图的实现 (20)圆形类的调用 (24)正三角形类的调用 (25)基本类型调用的剩余代码 (26)4.画笔的使用、颜色及大小的调整 (29)5.画硬币 (35)6.工具栏中的自定义控件 (38)7.状态栏中的显示 (39)4程序功能的测试 (41)5最后总结 (42)摘要:本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等。

除此之外,还能够进行随手画,即用鼠标随意画线条。

为了更好的绘图,还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜色,颜色还可根据输入的RGB值随意更改。

还有一些老师的要求,加入了画硬币、显示硬币数目即鼠标坐标等信息。

本程序主要采用面向对象写法。

关键字:程序设计,MFC,绘图1.引言设计目的本绘图程序的设计不仅仅局限于老师课堂的要求,通过C++的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFC,更好地去实现自己的想法。

清华大学的MFC编程精品课件

清华大学的MFC编程精品课件

7/10/2013
31
文档/视图结构支持: 决定是否使用CDocument类和 CView类支持文档/视图结构,无文档/视图结构的应用程序 不包含打开文件和存入磁盘功能的 MFC支持 资源语言:指定窗口菜单上所用的语言 使用 Unicode 库:使用Unicode版MFC 库 项目类型
一个MFC应用程序并不直接操作上述类,而是 以上述类为基类派生新的类,从而构建 Windows应用程序的基本框架。
7/10/2013 21
主要内容
Windows编程的基本概念 MFC应用程序框架类 文档/视图结构 MFC应用程序简单实例 实例分析 序列化和读写文档
7/10/2013
22
文档/视图结构
简化了Visual C++的编程工作
功能强大,灵活且稳定性好。 适用于Windows环境下的图形界面编程
用VC++及MFC开发的Windows平台下的软件有Photoshop, Office,QQ等。
7/10/2013
12
MFC应用程序框架结构类
MFC类库中的类是以层次结构的方式组 织起来的,大多数MFC类都是从CObject 中直接或者间接派生而来。
在MFC应用程序中,文档类和视图类是用户最常用的 两个类,两者密切相关。 文档/视图(Document/View)体系结构是MFC应用程 序框架结构的基础
用文档对象保存应用程序的数据 用视图对象控制视图显示数据 文档与视图的关系是一对多的关系,也就是说,文档中的数据 可以以不同的方式显示。
MFC在类CDocument和CView中为文档和视图提供了 基础结构。CWinApp、CFrameWnd和其他类与 CDocument和CView共同把所有的程序片段连在一起。

MFC绘图.62

MFC绘图.62

源码目录一、课程设计目的-------------------------------------3二、课程设计内容与实现的功能-------------------------3三、系统分析与设计-----------------------------------31、系统分析----------------------------------------------------------32、系统设计----------------------------------------------------------4四、系统测试与调试分析-------------------------------81、系统测试-----------------------------------------------------------82、调试分析-----------------------------------------------------------9五、用户手册-----------------------------------------10六、程序清单-----------------------------------------11七、体会与自我评价-----------------------------------19八、参考文献-----------------------------------------19九、课程设计评价-------------------------------------20一、课程设计目的进行C++面向对象程序设计课程设计主要是在学习C++这门面向对象语言的根底上,在完成C++面向对象程序设计各局部实验的根底上,通过自学MFC,掌握一种可视化编程的方法,并通过实践加深对可视化编程与C++面向对象程序设计语言特点的认识与理解。

同时,可以提高运用C++编程语言解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力选作这个二维图形的设计题目,主要是基于了解在电脑上的画图软件的功能是如何实现的,以及在MFC平台是怎么实现功能调用的,实现图形的绘制,从而可以进一步的了解到c++是如何面向对象的程序设计,以及在我们平常使用的一些软件的一些功能实现的算法。

mfc简单绘图程序文件

mfc简单绘图程序文件

M F C简单的绘图程序——王帅目录摘要 (2)关键字 (2)1 引言 (2)设计目的 (3)2 功能说明 (2)2.1菜单栏 (3)2.1.1图形 (3)2.1.2画笔 (4)2.1.3画硬币 (4)2.2工具栏 (5)2.3状态栏 (5)3 功能的实现 (5)3.1 视图设计 (5)3.2 编辑资源 (6)3.3 编程思路及各个函数的实现 (7)(1)思路 (7)(2)代码的实现 (7)1.为基本形状创建一个基类 (8)2.基本形状类的创建 (8)2.1矩形类的创建及定义 (8)2.2圆形类的创建及定义 (10)2.3正五边形类的创建及定义 (11)2.4正三角形类的创建及定义 (14)2.5椭圆类的创建及定义 (16)2.6正四边形类的创建及的定义 (17)2.7正六边形类的创建及定义 (18)2.8直线类的创建及定义 (19)3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20)3.1矩形类的调用与与绘图的实现 (20)3.2圆形类的调用 (24)3.3正三角形类的调用 (25)3.4基本类型调用的剩余代码 (26)4.画笔的使用、颜色及大小的调整 (29)5.画硬币 (35)6.工具栏中的自定义控件 (38)7.状态栏中的显示 (39)4程序功能的测试 (41)5最后总结 (42)摘要:本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等。

除此之外,还能够进行随手画,即用鼠标随意画线条。

为了更好的绘图,还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜色,颜色还可根据输入的RGB值随意更改。

还有一些老师的要求,加入了画硬币、显示硬币数目即鼠标坐标等信息。

本程序主要采用面向对象写法。

关键字:程序设计,MFC,绘图1.引言设计目的本绘图程序的设计不仅仅局限于老师课堂的要求,通过C++的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFC,更好地去实现自己的想法。

MFC画图实验报告

MFC画图实验报告
{
// TODO: Add your command handler code here
width=10;
}
void CMfcView::On20()
{
// TODO: Add your command handler code here
width=20;
}
(4).画线,曲线,矩形,圆角矩形,椭圆的功能由成员变量shape的值控制。
MFC画图程序实验报告
一.实验目的
用基于单文档应用程序创建一个类似Windows画图板的程序。功能主要有:手绘线,简单图形,画笔和画刷颜色的选择,画笔粗细的选择,文字的编辑与输出。具有菜单,通过菜单执行画线,曲线,矩形,圆角矩形,椭圆的功能,能填充图形设置图形的颜色,,实现重做和撤销,并设置字体的属性。
p2=point;
DC->SelectObject(&pen);//选择画笔pen
CRect rc(p1, p2);//定义矩形左上角和右下角点的成员变量
DC->Rectangle( rc );//画矩形
DC->DrawText( "这是我的文本框", rc, DT_CENTER);//显示文本
CView::OnRButtonUp(nFlags, point);
}
void CMfcView::Onpen()//画笔颜色按钮进行COMMAND消息响应,创建画笔。
{画笔风格为PS_DOT,由返回的整形变量width确定画笔的宽度。
// TODO: Add your command handler code here
CColorDialog dlg;
dlg.DoModal();
LOGFONT lf;

第三章MFC绘图

第三章MFC绘图

7/22/2013
18
6.OnDraw与OnPaint的区别
OnDraw是CView类的成员函数,不响应消息;OnPaint是 CWnd类的成员函数,响应WM_PAINT消息。 CView默认调用的OnPaint函数如下
void CView::OnPaint() { CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); //调用了OnDraw }
3.4重绘
为什么要重绘? 如何重绘? 在ondraw中重新绘制窗口内容: 把OnLButtonDown事件中的绘制图形 代码写在ondraw函数中。
7/22/2013
28
新的问题: 1)程序一开始就把OnLButtonDown事件 中绘制的图形画好了。 解决办法: 使用if控制:如果没有发生 OnLButtonDown事件,则不在ondraw中 重绘。 怎么实现?
文本:以图形方式输出文本,以逻辑坐标为单位计算输 出位置,而DOS是以行为单位。用户可以设置文本的各 种效果,如加粗、斜体、设置颜色等。
7/22/2013
3
2.设备上下文
应用程序的输出面向设备环境(Device Context,DC),是 一个虚拟逻辑设备,也称设备描述表或设备上下文。设备 环境DC 是由GDI 创建,用来代表设备连接的数据结构。 DC 的主要功能
7/22/2013
17
5.Windows系统发送WM_PAINT消息的时机
第一次创建一个窗口时 改变窗口的大小时 把窗口从另一个窗口背后移出时 窗口显示数据变化时,应用程序引发重绘操作
通过CWnd::Invalidate、CWnd::InvalidateRect或 CWnd::InvalidateRgn函数把指定区域加到窗口的 Update Region中。 窗口的Update Region不为空时,系统会自动产生 WM_PAINT消息。

图解微生物电池

图解微生物电池

目前,对深海环境设计的发电装置海底自动 发电机(Benthic Unattended Gen-erators BUGs)、单室反应槽MFC、UMFC等研究已经 取得了重大进展,而原料广泛、操作条件 温和、资源利用率高和无污染等优点使MFC 吸引了能源、环境、航天等各领域的广泛 关注。从理论上看,决定MFC输出功率密度 的主要因素是相关的电子传递过程,近年 来这方面研究的不断突破,有望使MFC 发 展瓶颈得以解决。
• 广泛的应用前景 原料广泛,条件温和而又清洁高效,微生物燃料电 池吸引了能源,交通,环境,航天等各方面的广泛关注。 人们希望研制出可用于宇宙飞船的电池,以宇航员的 生活废物为燃料,以最高效率的利用能量;微生物燃 料电池如果应用于污水处理,既可分解其中的污染物, 又可产生电力供应自己和周围地区的需要;甚至,在 科幻电影中以天然食物为能源,可以通过"吃饭"来补 充能量的机器人也将成为现实。这是一个梦幻般的 前景,如果实现,我们将可以广泛使用到大量的,高效 的,清洁的能源。
• 1. 对微生物酶的外壳进行修饰,再将其固定到 电极表面从而实现电子的直接传递; 2. 在比微生物细胞更小的尺度上,接使用导 电聚合物固定酶,使导电聚合物深入到酶的活 性中心附近,从而大大缩短电子传递的距离,实 现电子的直接传递; 3. 通过在电极表面进行贵金属纳米粒子,以及 碳纳米管等物质的修饰,利用纳米粒子的尺寸 效应,表面效应等奇妙的特性来实现直接的,快 速的电子传递。
从污水处理的研究上看,除了微生物群、质 子交换膜、阴极/阳极材料外,MFC的形状 设计对其性能也有重要影响,管状和上流 式的设计取得了较好效果。此外,现有的 MFC污染处理对象已包括含 N、S、Fe 等化 合物及有机化合物;随着更多的微生物群 得到研究,MFC处理污水的能力将扩展至更 大范围。

图形学MFC简单绘图112页PPT

图形学MFC简单绘图112页PPT
图形学MFC简单绘图
16、自己选择的路、跪着也要把它走 完。 17、一般情况下)不想三年以后的事, 只想现 在的事 。现在 有成就 ,以后 才能更 辉煌。
18、敢于向黑暗宣战的人,心里必须 充满光 明。 19、学习的关键--重复。
20、懦弱的人只会裹足不前,莽撞的 人只能 引为烧 身,只 有真正 勇敢的 识就是财富 ❖ 丰富你的人生
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,言行相称。——韩非

MFC画图程序(含源文件)

MFC画图程序(含源文件)

面向对象课程作业我做的是画笔程序,首先把作业要求写在开头。

作业要求:1、程序界面参考Microsoft画图程序。

2、能够支持画直线、自由连线(随鼠标移动连线)、实体圆形、实体矩形、实体椭圆3、支持区域选中(通过鼠标拖拽方框选中),并删除选中区域内所画的形状。

4、支持各种笔形画图时的前景和背景色。

5、支持图擦功能,选中图擦时,随着图擦的移动,根据图擦的大小,将图擦经过的区域中的形状相关部分清除。

6、支持打印、打印预览功能,并保持图片所见即所得。

支持将所画的内容保存为文件,格式为BMP格式。

本设计报告包括以下几部分:一.程序实现的功能二.程序功能的具体实现方法三.程序示例说明四.课程设计的体会五.本程序的不足之处六.本程序参考文献一.程序实现的功能程序所用开发工具: Visual C++ 6.0编程工具。

实现功能:能够支持画直线、自由连线(随鼠标移动连线)、实体圆形、实体矩形、实体椭圆;支持区域选中(通过鼠标拖拽方框选中),并删除选中区域内所画的形状;支持各种笔形画图时的前景和背景色;支持图擦功能,选中图擦时,随着图擦的移动,根据图擦的大小,将图擦经过的区域中的形状相关部分清除;支持打印、打印预览功能;并保持图片所见即所得;支持将所画的内容保存为文件,格式为BMP格式。

另外本程序还支持任意设置画笔的颜色,设置画笔笔画的宽度(粗细),支持当窗口发生重绘时将原来所绘的图形在新窗口中重绘出来。

二.问题分析按照程序设计实现功能的要求,其中应该有以下几部分,划线的实现部分可以在鼠标单击响应函数中实现,其中有:鼠标左键按下,鼠标左键移动,鼠标左键弹起等;设置颜色部分应该创建一个颜色设置对话框,这可用MFC自带的类来实现,为此我们在菜单中添加一个设置菜单,并且下面添加颜色设置菜单项,并且对此菜单项的添加命令响应函数,在其中创建颜色对话框,并且将我们选择的颜色保存到我们预定义的对象中去;同理笔画宽度和背景色的设置也是如此;其中在背景色的设置中当我们选择某种颜色设置背景色时,程序将会刷新窗口,并且用新的背景色填充视口背景。

MFC经典绘图方法总结

MFC经典绘图方法总结

MFC经典绘图方法总结Windows 绘图的实质就是利用windows提供的图形设备接口GDI(Graphics Device Interface)将图形会制在显示器上。

为了支持GDI绘图,MFC提供了两种重要的类:设备上下文DC(Device Context)类,用于设置绘图属性和绘制图形;绘图对象类,封装了各种GDI绘图对象,包括画笔、刷子、字体、位图、调色板和区域。

CDC类介绍:在MFC中,CDC是设备上下文类的基类,派生类包括:CClientDC, CPaintDC, CWindowDC, CMetaFileDC类CClientDC 客户区设备上下文,绘制客户区时CPaintDC 一般发生在窗口需要重绘时CWindwDC 可以绘制整个窗口,通常在窗口WM_NCPAINT消息的响应函数CWnd::OnNCPaint()中使用CMetaFileDC 专门用于图元文件的绘制,图元文件记录一组GDI命令,重建图形输出。

CDC包含m_hDC和m_hAttribDC二个设备上下文。

CDC指导所有对m_hDC的输出GDI调用(SetTextColor)以及对m_hAttribDC的大部分属性GDI调用(GetTextColor)。

CDC对象的重要函数如下:1、为指定设备创建上下文virtual BOOL CreateDC(...)比如创建一个为屏幕的设备上下文CDC dc;dc.CreateDC("DISPLAY", NULL, NULL,NULL);2、创建内存设备上下文,与指定设备上下文兼容virtual BOOL CreateCompatibleDC( CDC * pDC)3、删除CDC对象对应的Windows设备上下文, 通常不调用该函数而是使用析构程序virtual BOOL DeleteDC();4、将HDC句柄转化为设备上下文的句柄: CDC *pDC=CDC::FromHandle( hDC )5、选择GDI对象入选到设备上下文中,一共有五种形式:CPen * SelectObject( CPen * pPen) ;CBrush * SelectObject( CBrush * pBrush) ;virtual CFont * SelectObject( CFont * pFont) ;CBitmap * SelectObject( CBitmap * pBitmap) ;int SelectObject( CRgn * pRgn) ;例:Cpen cpen;pen.CreatePen( PS_SOLID, 2, RGB(255,0,0) );Cpen *pOldPen=(CPen*)pDC->SelectObject(&pen); //设置新画笔,记录旧画笔....pDC->SelectObject(pOldPen); //还原画笔三种方法创建画笔1/构造函数:CPen();CPen( int nPenStyle, int nWidth, COLORREF crColor );CPen(...)略2/CreatePen( int nPenStyle, int nWidth, COLORREF crColor )3/CreatePenIndirect( LPLOGPEN lpLogpen )typedef struct tagLOGPEN{UINT lopnStyle;POINT lopnWidth;COLORREF lopnColor;}LOGPEN, *LPLOGPEN;例:LOGPEN lppn;lppn.lopnColor=RGB(255,0,0);lppn.lopnStype=PS_DASHDOT;lgpn.lopnWidth.x=2;lgpn.lopnWidth.y=2;CPen pen;pen.CreatePenIndirect( &lppn );画刷三种方法创建1/构造函数:CBrush();CBrush(COLROREF crColor);CBrush(int nIndex, COLORREF crColor);nIndex 哪种类型的网格, HS_BDIAGONAL HS_CROSSHS_VERTICAL HS_HORIZONTAL2/CreateSolidBrush( COLORREF crColor);3/CreateHatchBrush( int nIndex , COLORREF crColor );4/CreateBrushIndirect( const LOGBRUSH* lpLogBrush );typedef struct tagBRUSH{UINT lbStyle; // BS_HA TCHED, BS_SOLID , BS_NULLCOLORREF lopnColor;LONG lbHatch; //HS_BDIAGONAL HS_CROSS HS_VERTICAL HS_HORIZONTAL}LOGBRUSH, *LPLOGBURSH;例:CRect Rect(0,0,200,200);CBrush brush(HS_HORIZONTAL,RGB(0,255,0));CBrush *pOldBursh=pDC->SelectObject(&brush);pDC->Rectangle(Rect);pDC->SelectObject( pOldBursh);图形绘制1.点绘制//返回RGB值COLORREF SetPixel(int x, int y, COLORREF crColor);COLORREF SetPixel(POINT point, COLORREF crColor);//返回BOOL值,绘制是否成功.BOOL SetPixelV(int x, int y, COLORREF crColor);BOOL SetPixelV(POINT point, COLORREF crColor);2.直线绘制//返回CPoint对象的x和y坐标的前一次取值CPoint MoveTo(int x, int y);CPoint MoveTo(POINT point);//返回绘制是否成功BOOL MoveTo(int x, int y);BOOL MoveTo(POINT point);例:CPen pen;pen.CreatePen(PS_SOLID,2,RGB(0,255,0));CPen* oldPen =(CPen *)pDC->SelectObject(&pen);CPoint oldPoint=pDC->MoveTo(600,300);pDC->LineTo(500,500);3.矩形绘制1/矩形绘制BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPRECT lpRect);例:pDC->SelectObject( oldPen);pDC->Rectangle(0,0,600,300);CRect Rect(0,0,300,200);CBrush brush(HS_HORIZONTAL,RGB(0,255,0));CBrush *pOldBursh=pDC->SelectObject(&brush);pDC->Rectangle( &Rect );pDC->SelectObject( pOldBursh);例:CPen pen;pen.CreatePen(PS_DASH, 1,RGB(255,0,0));LOGBRUSH lb;memset( &lb,0, sizeof(lb));lb.lbStyle=BS_HATCHED;lb.lbHatch=HS_DIAGCROSS;CBrush brush;brush.CreateBrushIndirect( &lb);CPen *pOldPen=(CPen *)pDC->SelectObject( & pen);CBrush *pOldBrush=(CBrush*)pDC->SelectObject(&brush);pDC->Rectangle(0,0,200,200);pDC->SelectObject( pOldPen);pDC->SelectObject( pOldBrush);2/三维矩形线框绘制void Draw3dRect(int x, int y, int cx, int cy , COLORREF clrTopLeft, COLORBEF clrBottomRight );void Draw3dRect(LPCRECT lpRect, COLORREF clrTopLeft, COLORBEF clrBottomRight );例:pDC->Draw3dRect(100, 100, 200, 300, RGB(255,0,0), RGB(0,255,0));3/表示焦点风格矩形void DrawFocusRect( LPCRECT lpRect);例:CRect rt( 400,400, 450, 450);pDC->DrawFocusRect( &rt);4/绘制拖曳形线框void DrawDragRect(LPCRECT lpRect , SIZE size LPCRECT lpRectLast, SIZE sizeLast, CBrush* pBrush=NULL , CBrush* pBrushLast=NULL);5/圆角矩形void RoundRect(LPCRECT lpRect , POINT point); //point.x 椭圆宽, point.y 椭圆高void RoundRect(int x1, int y1, int x2, int y2, int x3, int y3 );例:pDC->RoundRect(250, 250, 400, 400, 50, 100);4.椭圆绘制BOOL Ellipse( LPCRECT lpRect ) //椭圆的外接矩形范围文字绘制TextOut函数返回值是BOOLBOOL TextOut( int x, int y, const CString & str );virtual BOOL TextOut(int x, int y, LPCSTR lpszString, int nCount);DrawText函数返回值是文本高度int DrawText ( LPCSTR lpszString, int nCount, LPRECT lpRect, UNIT nFormat);int DrawText ( const CString& str, LPRECT lpRect, UNIT nFormat); //DT_BOTTOM DT_LEFT...//注意:如果nFormat 参数指定了DT_CALCRECT标志,由lpRect指定的矩形将会更新,以反映显示文本需要的高度和宽度,但并不绘制显示文字背景色和前景色virtual COLORREF SetBKColor( COLORREF crColor);int SetBKMode( int nBKMode); // nBKMode: OPAQUE, TRANSPARENT时,SetBKColor失效例:CRect rect;GetClientRect(&rect);pDC->FillSolidRect(rect,RGB(0,0,255));CString strText=L"VC++ BKColor Demo...";pDC->SetTextColor(RGB(255,255,255));pDC->SetBkColor(RGB(255,0,0));pDC->SetBkMode(TRANSPARENT);pDC->TextOut(10,10,strText);文字字体设置文字的字体会使用到MFC下的CFont类,然后调用CFont类下的四个成员函数: CreateFont, CreateFontIndirect, CreatePointFont和CreatePointFontIndirect,详见msdn帮助例:1/CreateFont 函数CFont font;font.CreateFont(25,0,1800,0,FW_BOLD,1,1,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,L"Courier New");CString strText=L"VC++ Font Demo...";pDC->SetTextColor( RGB(255,0,0));CFont *pOldFont=(CFont*)pDC->SelectObject(&font);pDC->TextOut(210,210, strText);pDC->SelectObject(pOldFont);2/ CreateFontIndirect(const LOGFONT* lpLogFont);typedef struct tagLOGFONT{//14个成员变量与世隔绝CreateFont函数类似}LOGFONT;3/如果只注重字体的高度和字体名时,使用CreatePointFont(int nPointSize, LPCSTR lpszFaceName, CDC* pDC=NULL);位图显示A:位图介绍,CBitmap类封装了Windows图形设备接口中的位图,并提供了操作位图的成员函数1/创建兼容位图,使之与指定设备兼容.BOOL CreateCompatibleBitmap(CDC *pDC, int nWidth, int nHeight);2/得到位图信息,作用是填充BITMAP结构.int GetBitmap(BITMAP * pBitMap);3/加载位图资源,加载一个命名的位图资源来初始化位图对象.BOOL LoadBitmap( LPCSTR lpszResourceName);BOOL LoadBitmap( UINT nIDResuource );B:显示位图,VC++提供BitBlt, StretchBlt和TransparentBit(需加入msimg32.lib库) 1/ BOOL BitBlt(int x , int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );//尺寸不变2/ BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC,int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop); //支持缩放/* dwRop一般设置为SRCCOPY */3/ BOOL TransparentBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest,HDC hdcSrc, int nXoriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent);例:CBitmap bitmap;bitmap.LoadBitmap(IDB_BITAMBOW);BITMAP bm;bitmap.GetBitmap(&bm);CDC MemDC;MemDC.CreateCompatibleDC(pDC);CBitmap* pOldBitmap=(CBitmap *)MemDC.SelectObject(&bitmap);CRect rect(10,10, bm.bmWidth, bm.bmHeight);TransparentBlt(pDC->GetSafeHdc(), rect.left, rect.top, rect.Width()*5, rect.Height()*5, MemDC.GetSafeHdc(), 0, 0, bm.bmWidth, bm.bmHeight, RGB(0,0,0));//长宽扩大5倍,图片中黑色的部分将作为透明处理。

清华大学C++课件-第八讲 MFC程序开发概述_147802831

清华大学C++课件-第八讲 MFC程序开发概述_147802831

进入消息循环并 从消息队列得到 一个消息
当前消息是 否“退出”?

程序是否定义 了对此消息的 处理

处理消息

终止执行

进行默认处理
集成开发环境(IDE)

项目(Project)

项目是一些相互关联的源文件的集合,这些源文件经过 编译、链接,然后被组合在一起形成可执行的Windows 应用程序或者是DLL。 实现“所见即所得”的资源编辑 对C/C++源文件进行编译,形成目标代码 对资源文件进行编译,形成二进制RES文件

#include "stdafx.h"
MFC体系结构

MFC程序分类
基于对话框

Windows附带的计算器 Windows附带记事本

基于单文档(SDI, Single Document Interfultiple Document Interface)

第八讲 MFC程序开发概述
进一步的学习
编程语言 汇编语言
编程技术学习路线图
软件设计 与开发 C/C++
系统编程 C/C++
软件质量 C/C++
C语言
Windows 编程
Linux 编程
数据结构 与算法
代码风格 与质量
C++
VC及MFC 编程 .Net 编程
软件工程
设计模式
Java
C#
软件项目 管理
Windows编程模式

Windows消息
消息机制

系统将会维护一个或多个消息队列,所有产生的消息都会被放入或插 入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄将 该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有 自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句 柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系 统,所以Windows可以同时进行多个任务。

MFC绘图总结(5):设置绘图属性求索阁

MFC绘图总结(5):设置绘图属性求索阁

MFC绘图总结(5):设置绘图属性求索阁除了映射模式外,还有许多绘图属性可以设置,如背景、绘图方式、多边形填充方式、画弧方向、刷原点等。

1.背景1)背景色当背景模式为不透明时,背景色决定线状图的空隙颜色(如虚线中的空隙、条纹刷的空隙和文字的空隙),可以使用CDC类的成员函数GetBkColor和SetBkColor来获得和设置当前的背景颜色:COLORREF GetBkColor( ) const; // 返回当前的背景色virtual COLORREF SetBkColor( COLORREF crColor ); // 返回先前的背景色// 若出错返回0x800000002)背景模式背景模式影响有空隙的线状图的空隙(如虚线中的空隙、条纹刷的空隙和文字的空隙)用什么办法填充。

可以使用CDC类的成员函数GetBkMode和SetBkMode来获得和设置当前的背景模式:int GetBkMode( ) const; // 返回当前背景模式int SetBkMode( int nBkMode ); // 返回先前背景模式背景模式的取值2. 绘图模式绘图模式(drawing mode)指前景色的混合方式,它决定新画图的笔和刷的颜色(pbCol)如何与原有图的颜色(scCol)相结合而得到结果像素色(pixel)。

1)设置绘图模式可使用CDC类的成员函数SetROP2 (ROP = Raster OPeration 光栅操作)来设置绘图模式:int SetROP2( int nDrawMode );其中,nDrawMode可取值:绘图模式nDrawMode的取值其中,R2_COPYPEN(覆盖)为缺省绘图模式,R2_XORPEN (异或)较常用。

2)画移动图形为了能画移动的位置标识(如十字、一字)和随鼠标移动画动态图形(如直线、矩形、椭圆),必须在不破坏原有背景图形的基础上移动这些图形。

移动图形采用的是异或画图方法,移动图形的过程为:异或画图、在原位置再异或化图(擦除)、在新位置异或画图、……。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3/7/2012
17
主要内容
GDI与设备环境(DC) 与设备环境( ) 与设备环境 用CDC绘图 绘图 应用举例 绘图工具类
3/7/2012
18
举例
编写一个单文档MFC应用程序,完成以下要求: 应用程序,完成以下要求: 编写一个单文档 应用程序 ,(2) (1)在客户区中画最大的椭圆,( )当点击鼠 )在客户区中画最大的椭圆,( 标左键时,以鼠标左键点击的位置为中心,画一 标左键时,以鼠标左键点击的位置为中心, 个半径为20个像素的圆 个像素的圆。 个半径为 个像素的圆。 建立一个单文档的MFC项目 项目DrawTest1 建立一个单文档的 项目
3/7/2012
3
图形设备接口( 图形设备接口(GDI) )
Windows提供了一个称为图形设备接口 提供了一个称为图形设备接口 (Graphics Device Interface,GDI)的抽象接口。 的抽象接口。 , 的抽象接口 GDI 作为 作为Windows的重要组成部分,负责管理用 的重要组成部分, 的重要组成部分 户绘图操作时功能的转换。 户绘图操作时功能的转换。 用户通过调用GDI 函数与设备打交道,GDI 通过 函数与设备打交道, 用户通过调用 不同设备提供的驱动程序将绘图语句转换为对应 的绘图指令,避免了用户对硬件直接进行操作, 的绘图指令,避免了用户对硬件直接进行操作, 从而实现设备无关性(显示器或打印机)。 从而实现设备无关性(显示器或打印机)。
MFC MFC绘图
MFC编程学习的基本目标 编程学习的基本目标
可以进行简单的基于MFC的图形界面编程 的图形界面编程 可以进行简单的基于
理解Windows编程的基本概念。 编程的基本概念。 理解 编程的基本概念 鉴于教学时间进度限制, 鉴于教学时间进度限制,更复杂的应用程序开发通过 自学完成。 自学完成。
添加WM_PAINT消息处理函数 消息处理函数OnPaint 添加 消息处理函数 调用OnPrepareDC和OnDraw函数,添加绘图代码 函数, 调用 和 函数
需要添加 的代码
3/7/2012
21
3/7/2012
22
鼠标点击消息处理函数
在类视图中选中CDrawTest1View类 类 在类视图中选中 在属性窗口中选择“ 在属性窗口中选择“WM_LBUTTONDOWN” ” 消息, 消息,添加消息处理函数
9
设备环境类的基本功能
3/7/2012
10
CDC类常用绘图函数 类常用绘图函数
Arc:绘制一段弧 : Chord:绘制弦形 : Ellipse:绘制椭圆或圆 : MoveTo:将当前位置移动到指定位置 : LineTo:从当前位置到指定位置画一条直线 : Polyline:画连接指定点的折线段 : PolyBezler:根据两个端点和两个控制点画贝塞尔曲线 : Pie:画冰块 : Polygon:根据两个或两个以上的顶点绘制一个多边形 : Rectangle:根据指定的左上角和右下角坐标绘制一个矩形 : RoundRect:画圆角矩形 : SetPixel:画一个点 :
实现基本MFC应用程序需要掌握如下内容: 应用程序需要掌握如下内容: 实现基本 应用程序需要掌握如下内容
Windows编程基本概念 编程基本概念 文档/视图结构 文档 视图结构 文档读写 对话框及标准控件的使用 菜单栏的使用 绘图及鼠标消息的处理
3/7/2012 2
主要内容
GDI与设备环境(DC) 与设备环境( ) 与设备环境 用CDC绘图 绘图 应用举例 绘图工具类
COLORREF RGB(
BYTE byRed, // red component of color BYTE byGreen, // green component of color BYTE byBlue // blue component of color );
3/7/2012 12
常用颜色对照表
屏幕:对若干行和列的像素操作 屏幕: 打印机: 打印机:对若干行和列的点阵输出 直接从内存到显存的复制操作,速度快,内存要求高。 直接从内存到显存的复制操作,速度快,内存要求高。
文本:以图形方式输出文本, 文本:以图形方式输出文本,以逻辑坐标为单位计算输 出位置, 是以行为单位。 出位置,而DOS是以行为单位。用户可以设置文本的各 是以行为单位 种效果,如加粗、斜体、设置颜色等。 种效果,如加粗、斜体、设置颜色等。
需要添加 的代码
3/7/2012
23
3/7/2012
24
主要内容
GDI与设备环境(DC) 与设备环境( ) 与设备环境 用CDC绘图 绘图 应用举例 绘图工具类
3/7/2012
25
绘图工具类CGdiObject 绘图工具类
绘图工具类主要包括画笔CPen、画刷Cbrush、 绘图工具类主要包括画笔CPen、画刷Cbrush、字体 画笔CPen Cbrush CFont、位图Bitmap和调色板Cpalette Bitmap和调色板Cpalette等 CFont、位图Bitmap和调色板Cpalette等。 类继承关系如图 CObject
3/7/2012
16
OnDraw与OnPaint的区别 与 的区别
OnDraw是CView类的成员函数,不响应消息;OnPaint是 是 类的成员函数, 类的成员函数 不响应消息; 是 CWnd类的成员函数,相应 类的成员函数, 消息。 类的成员函数 相应WM_PAINT消息。 消息 CView默认调用的 默认调用的OnPaint函数如下 默认调用的 函数如下
void CView::OnPaint() { CPaintDC dc(this); OnPrepareDC(&dc); ; OnDraw(&dc); //调用了 调用了OnDraw 调用了 }
可见OnPaint函数也调用了 可见 函数也调用了CView::OnDraw函数。因而一 函数。 函数也调用了 函数 般在OnDraw函数内添加绘图代码,完成绘图任务 函数内添加绘图代码, 般在 函Fra bibliotek内添加绘图代码
3/7/2012
6
设备坐标系统
设备坐标系统
x轴自左至右,y轴从上到下,坐标原点在屏 轴自左至右, 轴从上到下 轴从上到下, 轴自左至右 幕左上角
O [0,0] X
Y
3/7/2012
7
主要内容
GDI与设备环境(DC) 与设备环境( ) 与设备环境 用CDC绘图 绘图 应用举例 绘图工具类
3/7/2012
CPaintDC dc(this);
类的其它函数中, 在CWnd类的其它函数中,定义 类的其它函数中 定义CClientDC和 和 CWindowDC的对象 的对象
CClientDC dc(this); CWindowDC dc(this);
3/7/2012
14
CClientDC、CPaintDC和CWindowDC的区别 、 和 的区别
3/7/2012
5
设备环境
应用程序的输出面向设备环境(Device Context,DC),是 应用程序的输出面向设备环境 , , 一个虚拟逻辑设备,也称设备描述表或设备上下文。 一个虚拟逻辑设备,也称设备描述表或设备上下文。设备 环境DC 是由 是由GDI 创建,用来代表设备连接的数据结构。 创建,用来代表设备连接的数据结构。 环境 DC 的主要功能
3/7/2012
11
绘图颜色
DWORD类型的 类型的COLORREF数据用于存放颜色值 类型的 数据用于存放颜色值 “0x00bbggrr” ”
低位字节存放红色强度值 第2 个字节存放绿色强度值 第3个字节存放蓝色强度值 个字节存放蓝色强度值 高位字节存放0 高位字节存放
可用RGB宏设置颜色值,将红、绿、蓝分量值转 宏设置颜色值,将红、 可用 宏设置颜色值 换为COLORREF类型的颜色数据 换为 类型的颜色数据
3/7/2012
15
Windows系统发送WM_PAINT消息的时机 系统发送 系统发送 消息的时机
第一次创建一个窗口时 改变窗口的大小时 把窗口从另一个窗口背后移出时 窗口显示数据变化时, 窗口显示数据变化时,应用程序引发重绘操作
通过CWnd::Invalidate、CWnd::InvalidateRect或 、 通过 或 CWnd::InvalidateRgn函数把指定区域加到窗口的 函数把指定区域加到窗口的 Update Region中。 中 窗口的Update Region不为空时,系统会自动产生 不为空时, 窗口的 不为空时 WM_PAINT消息。 消息。 消息
允许应用程序使用一个输出设备。 允许应用程序使用一个输出设备。 提供应用程序、设备驱动和输出设备之间的连接。 提供应用程序、设备驱动和输出设备之间的连接。 保存当前信息,例如当前的画笔、画刷、 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及 其属性,以及颜色和背景等影响图形输出的绘图模式。 其属性,以及颜色和背景等影响图形输出的绘图模式。 保存窗口剪切区域(Clipping Region),限制程序输出到输出设备中 保存窗口剪切区域 , 窗口覆盖的区域。 窗口覆盖的区域。
当窗口的某个区域需要重绘时激发窗口重绘消息WM_PAINT,相应消息 , 当窗口的某个区域需要重绘时激发窗口重绘消息 处理函数CWnd::OnPaint将被调用。CPaintDC一般只用于 将被调用。 一般只用于OnPaint函数 处理函数 将被调用 一般只用于 函数 在处理完窗口重绘后, 对象的析构函数把WM_PAINT消 中,在处理完窗口重绘后, CPaintDC对象的析构函数把 对象的析构函数把 消 息从消息队列中清除,避免不断地重绘操作。坐标原点(0,0)是客户区的 息从消息队列中清除,避免不断地重绘操作。坐标原点 是客户区的 左上角。 左上角。 CClientDC用于特定窗口客户区(窗口中除边框、标题栏、菜单栏、状 用于特定窗口客户区( 用于特定窗口客户区 窗口中除边框、标题栏、菜单栏、 态栏外的中间部分)的输出,其构造函数中包含了GetDC,析构函数中包 态栏外的中间部分)的输出,其构造函数中包含了 析构函数中包 含了ReleaseDC,不需要显式释放 资源。一般用于响应非重绘消息 资源。 含了 ,不需要显式释放DC资源 如键盘和鼠标消息)的绘图操作。坐标原点(0,0)是客户区的左上角。 是客户区的左上角。 (如键盘和鼠标消息)的绘图操作。坐标原点 是客户区的左上角 CWindowDC在整个应用程序窗口上画图,而CClientDC和CPaintDC只 在整个应用程序窗口上画图, 在整个应用程序窗口上画图 和 只 能在客户区绘制图形;除非要自己绘制窗口边框和按钮, 能在客户区绘制图形;除非要自己绘制窗口边框和按钮,否则一般不用 坐标原点(0,0)是屏幕的左上角。 是屏幕的左上角。 它。坐标原点 是屏幕的左上角
相关文档
最新文档