- MFC 教程
- MFC - 首页
- MFC - 概述
- MFC - 环境设置
- MFC - VC++ 项目
- MFC - 入门指南
- MFC - Windows 基础
- MFC - 对话框
- MFC - Windows 资源
- MFC - 属性表
- MFC - 窗口布局
- MFC - 控件管理
- MFC - Windows 控件
- MFC - 消息与事件
- MFC - ActiveX 控件
- MFC - 文件系统
- MFC - 标准 I/O
- MFC - 文档视图
- MFC - 字符串
- MFC - Carray
- MFC - 链接列表
- MFC - 数据库类
- MFC - 序列化
- MFC - 多线程
- MFC - 互联网编程
- MFC - GDI
- MFC - 库
- MFC 有用资源
- MFC - 快速指南
- MFC - 有用资源
- MFC - 讨论
MFC - GDI
Windows 提供了各种绘图工具供在设备环境中使用。它提供用于绘制线条的笔、用于填充内部的画刷以及用于绘制文本的字体。MFC 提供了等效于 Windows 中绘图工具的图形对象类。
绘图
设备环境是 Windows 数据结构,其中包含有关设备(如显示器或打印机)的绘图属性的信息。所有绘图调用都是通过设备环境对象进行的,该对象封装了 Windows 用于绘制线条、形状和文本的 API。
设备环境允许在 Windows 中进行设备无关绘图。设备环境可用于绘制到屏幕、打印机或图元文件。
CDC 是在 MFC 中进行绘图的最基本类。CDC 对象提供成员函数来执行基本的绘图步骤,以及用于处理与窗口客户区关联的显示环境的成员。
序号 | 名称及描述 |
---|---|
1 | AbortDoc 终止当前打印作业,擦除应用程序自上次调用 StartDoc 成员函数以来写入设备的所有内容。 |
2 | AbortPath 关闭并丢弃设备环境中的任何路径。 |
3 | AddMetaFileComment 将注释从缓冲区复制到指定的增强格式图元文件。 |
4 | AlphaBlend 显示具有透明或半透明像素的位图。 |
5 | AngleArc 绘制一条线段和一条弧线,并将当前位置移动到弧线的结束点。 |
6 | Arc 绘制椭圆弧。 |
7 | ArcTo 绘制椭圆弧。此函数类似于 Arc,但会更新当前位置。 |
8 | Attach 将 Windows 设备环境附加到此 CDC 对象。 |
9 | BeginPath 在设备环境中打开路径括号。 |
10 | BitBlt 从指定的设备环境复制位图。 |
11 | Chord 绘制弦(由椭圆和线段的交点界定的封闭图形)。 |
12 | CloseFigure 关闭路径中的开放图形。 |
13 | CreateCompatibleDC 创建一个与另一个设备环境兼容的内存设备环境。您可以使用它来准备内存中的图像。 |
14 | CreateDC 为特定设备创建设备环境。 |
15 | CreateIC 为特定设备创建信息环境。这提供了一种快速获取有关设备信息而不创建设备环境的方法。 |
16 | DeleteDC 删除与此 CDC 对象关联的 Windows 设备环境。 |
17 | DeleteTempMap 由 CWinApp 空闲时间处理程序调用,以删除由 FromHandle 创建的任何临时 CDC 对象。还分离设备环境。 |
18 | Detach 将 Windows 设备环境从此 CDC 对象分离。 |
19 | DPtoHIMETRIC 将设备单位转换为 HIMETRIC 单位。 |
20 | DPtoLP 将设备单位转换为逻辑单位。 |
21 | Draw3dRect 绘制一个三维矩形。 |
22 | DrawDragRect 在矩形被拖动时擦除并重绘它。 |
23 | DrawEdge 绘制矩形的边缘。 |
24 | DrawEscape 访问视频显示的绘图功能,这些功能无法通过图形设备接口 (GDI) 直接获得。 |
25 | DrawFocusRect 以用于指示焦点的样式绘制矩形。 |
26 | DrawFrameControl 绘制框架控件。 |
27 | DrawIcon 绘制图标。 |
28 | DrawState 显示图像并应用视觉效果以指示状态。 |
29 | DrawText 在指定的矩形中绘制格式化文本。 |
30 | DrawTextEx 使用其他格式在指定的矩形中绘制格式化文本。 |
31 | Ellipse 绘制椭圆。 |
32 | EndDoc 结束由 StartDoc 成员函数启动的打印作业。 |
33 | EndPage 通知设备驱动程序页面即将结束。 |
34 | EndPath 关闭路径括号并将括号定义的路径选入设备环境。 |
35 | EnumObjects 枚举设备环境中可用的笔和画刷。 |
36 | Escape 允许应用程序访问特定设备无法通过 GDI 直接获得的功能。还允许访问 Windows 转义函数。应用程序发出的转义调用将被翻译并发送到设备驱动程序。 |
37 | ExcludeClipRect 创建一个新的剪辑区域,该区域由现有剪辑区域减去指定的矩形组成。 |
38 | ExcludeUpdateRgn 通过从窗口的剪辑区域中排除更新区域来阻止在窗口的无效区域内绘制。 |
39 | ExtFloodFill 使用当前画刷填充区域。提供比 FloodFill 成员函数更多的灵活性。 |
40 | ExtTextOut 使用当前选定的字体在矩形区域内写入字符字符串。 |
41 | FillPath 关闭当前路径中的任何开放图形,并使用当前画刷和多边形填充模式填充路径的内部。 |
42 | FillRect 使用特定画刷填充给定矩形。 |
43 | FillRgn 使用指定的画刷填充特定区域。 |
44 | FillSolidRect 用纯色填充矩形。 |
45 | FlattenPath 将路径中选定的任何曲线转换为当前设备环境,并将每个曲线转换为一系列线。 |
46 | FloodFill 用当前画刷填充区域。 |
47 | FrameRect 在矩形周围绘制边框。 |
48 | FrameRgn 使用画刷在特定区域周围绘制边框。 |
49 | FromHandle 在给定设备环境句柄时返回指向 CDC 对象的指针。如果 CDC 对象未附加到句柄,则会创建一个临时 CDC 对象并将其附加。 |
50 | GetArcDirection 返回设备环境的当前弧方向。 |
51 | GetAspectRatioFilter 检索当前纵横比过滤器的设置。 |
52 | GetBkColor 检索当前背景颜色。 |
53 | GetBkMode 检索背景模式。 |
54 | GetBoundsRect 返回指定设备环境的当前累积边界矩形。 |
55 | GetBrushOrg 检索当前画刷的原点。 |
56 | GetCharABCWidths 检索给定范围内连续字符的宽度(以逻辑单位为单位),这些字符来自当前字体。 |
57 | GetCharABCWidthsI 检索给定范围内连续字形索引的宽度(以逻辑单位为单位),这些字形索引来自当前 TrueType 字体。 |
58 | GetCharacterPlacement 检索有关字符字符串的各种类型的信息。 |
59 | GetCharWidth 检索给定范围内连续字符的分数宽度,这些字符来自当前字体。 |
60 | GetCharWidthI 检索给定范围内连续字形索引的宽度(以逻辑坐标为单位),这些字形索引来自当前字体。 |
61 | GetClipBox 检索当前剪辑边界的紧密边界矩形的尺寸。 |
62 | GetColorAdjustment 检索设备环境的颜色调整值。 |
63 | GetCurrentBitmap 返回指向当前选定的 CBitmap 对象的指针。 |
64 | GetCurrentBrush 返回指向当前选定的 CBrush 对象的指针。 |
65 | GetCurrentFont 返回指向当前选定的 CFont 对象的指针。 |
66 | GetCurrentPalette 返回指向当前选定的 CPalette 对象的指针。 |
48 | GetCurrentPen 返回指向当前选定的 CPen 对象的指针。 |
67 | GetCurrentPosition 检索笔的当前位置(以逻辑坐标为单位)。 |
68 | GetDCBrushColor 检索当前画刷颜色。 |
69 | GetDCPenColor 检索当前笔颜色。 |
70 | GetDeviceCaps 检索有关给定显示设备的功能的指定类型的设备特定信息。 |
71 | GetFontData 从可缩放字体文件检索字体度量信息。要检索的信息通过指定字体文件中的偏移量和要返回的信息长度来识别。 |
72 | GetFontLanguageInfo 返回有关指定显示环境的当前选定字体的信息。 |
73 | GetGlyphOutline 检索当前字体中轮廓字符的轮廓曲线或位图。 |
74 | GetGraphicsMode 检索指定设备环境的当前图形模式。 |
75 | GetHalftoneBrush 检索半色调画刷。 |
76 | GetKerningPairs 检索指定设备环境中当前选定的字体的字符间距对。 |
77 | GetLayout 检索设备环境 (DC) 的布局。布局可以是左到右(默认)或右到左(镜像)。 |
78 | GetMapMode 检索当前映射模式。 |
79 | GetMiterLimit 返回设备环境的斜接限制。 |
80 | GetNearestColor 检索给定设备可以表示的与指定逻辑颜色最接近的逻辑颜色。 |
81 | GetOutlineTextMetrics 检索 TrueType 字体的字体度量信息。 |
82 | GetOutputCharWidth 使用输出设备上下文从当前字体中检索连续字符组中各个字符的宽度。 |
83 | GetOutputTabbedTextExtent 计算输出设备上下文上字符字符串的宽度和高度。 |
84 | GetOutputTextExtent 使用当前字体计算输出设备上下文上文本行的宽度和高度,以确定尺寸。 |
85 | GetOutputTextMetrics 从输出设备上下文中检索当前字体的度量。 |
86 | GetPath 检索定义选中到设备上下文中的路径中找到的线条端点和曲线控制点的坐标。 |
87 | GetPixel 检索指定点处的像素的 RGB 颜色值。 |
88 | GetPolyFillMode 检索当前的多边形填充模式。 |
89 | GetROP2 检索当前的绘图模式。 |
90 | GetSafeHdc 返回m_hDC,即输出设备上下文。 |
91 | GetStretchBltMode 检索当前的位图拉伸模式。 |
92 | GetTabbedTextExtent 计算属性设备上下文上字符字符串的宽度和高度。 |
93 | GetTextAlign 检索文本对齐标志。 |
94 | GetTextCharacterExtra 检索字符间距量的当前设置。 |
95 | GetTextColor 检索当前的文本颜色。 |
96 | GetTextExtent 使用当前字体计算属性设备上下文上文本行的宽度和高度,以确定尺寸。 |
97 | GetTextExtentExPointI 检索指定字符串中将在指定空间内适合的字符数,并填充一个数组,其中包含每个字符的文本范围。 |
98 | GetTextExtentPointI 检索指定字形索引数组的宽度和高度。 |
99 | GetTextFace 将当前字体的字体名称复制到缓冲区中,作为以 null 结尾的字符串。 |
100 | GetTextMetrics 从属性设备上下文中检索当前字体的度量。 |
101 | GetViewportExt 检索视口的 x 和 y 范围。 |
102 | GetViewportOrg 检索视口原点的 x 和 y 坐标。 |
103 | GetWindow 返回与显示设备上下文关联的窗口。 |
104 | GetWindowExt 检索关联窗口的 x 和 y 范围。 |
105 | GetWindowOrg 检索关联窗口原点的 x 和 y 坐标。 |
106 | GetWorldTransform 检索当前的世界空间到页面空间的转换。 |
107 | GradientFill 使用渐变颜色填充矩形和三角形结构。 |
108 | GrayString 在给定位置绘制暗淡(灰色)文本。 |
109 | HIMETRICtoDP 将 HIMETRIC 单位转换为设备单位。 |
110 | HIMETRICtoLP 将 HIMETRIC 单位转换为逻辑单位。 |
111 | IntersectClipRect 通过形成当前区域和矩形的交集来创建一个新的剪裁区域。 |
112 | InvertRect 反转矩形的内容。 |
113 | InvertRgn 反转区域中的颜色。 |
114 | IsPrinting 确定设备上下文是否用于打印。 |
115 | LineTo 从当前位置绘制一条线到某个点,但不包括该点。 |
116 | LPtoDP 将逻辑单位转换为设备单位。 |
117 | LPtoHIMETRIC 将逻辑单位转换为 HIMETRIC 单位。 |
118 | MaskBlt 使用给定的掩码和光栅运算组合源和目标位图的颜色数据。 |
119 | ModifyWorldTransform 使用指定的模式更改设备上下文的全局转换。 |
120 | MoveTo 移动当前位置。 |
121 | OffsetClipRgn 移动给定设备的剪裁区域。 |
122 | OffsetViewportOrg 相对于当前视口原点的坐标修改视口原点。 |
123 | OffsetWindowOrg 相对于当前窗口原点的坐标修改窗口原点。 |
124 | PaintRgn 使用选定的画刷填充区域。 |
125 | PatBlt 创建位模式。 |
126 | Pie 绘制一个扇形。 |
127 | PlayMetaFile 在给定设备上播放指定元文件的内容。PlayMetaFile 的增强版本显示存储在给定增强格式元文件中的图片。元文件可以播放任意次数。 |
128 | PlgBlt 执行源设备上下文中的指定矩形中的颜色数据位到给定设备上下文中的指定平行四边形的位块传输。 |
129 | PolyBezier 绘制一个或多个贝塞尔曲线。当前位置既不使用也不更新。 |
130 | PolyBezierTo 绘制一个或多个贝塞尔曲线,并将当前位置移动到最后一个贝塞尔曲线的结束点。 |
131 | PolyDraw 绘制一组线段和贝塞尔曲线。此函数更新当前位置。 |
132 | Polygon 绘制一个由两点或更多点(顶点)组成的多边形,这些点由线连接。 |
133 | Polyline 绘制一组连接指定点的线段。 |
134 | PolylineTo 绘制一条或多条直线,并将当前位置移动到最后一条线的结束点。 |
135 | PolyPolygon 创建两个或多个多边形,这些多边形使用当前的多边形填充模式填充。多边形可以是不相交的,也可以是重叠的。 |
136 | PolyPolyline 绘制多个系列的连接线段。此函数既不使用也不更新当前位置。 |
137 | PtVisible 指定给定点是否在剪裁区域内。 |
138 | RealizePalette 将当前逻辑调色板中的调色板条目映射到系统调色板。 |
139 | Rectangle 使用当前笔绘制矩形,并使用当前画刷填充它。 |
140 | RectVisible 确定给定矩形的任何部分是否位于剪裁区域内。 |
141 | ReleaseAttribDC 释放m_hAttribDC,即属性设备上下文。 |
142 | ReleaseOutputDC 释放m_hDC,即输出设备上下文。 |
143 | ResetDC 更新 m_hAttribDC 设备上下文。 |
144 | RestoreDC 将设备上下文恢复到以前使用SaveDC保存的状态。 |
145 | RoundRect 使用当前笔绘制一个圆角矩形,并使用当前画刷填充它。 |
146 | SaveDC 保存设备上下文的当前状态。 |
147 | ScaleViewportExt 相对于当前值修改视口范围。 |
148 | ScaleWindowExt 相对于当前值修改窗口范围。 |
149 | ScrollDC 水平和垂直滚动位矩形。 |
150 | SelectClipPath 选择当前路径作为设备上下文的剪裁区域,使用指定的模式将新区域与任何现有剪裁区域组合。 |
151 | SelectClipRgn 使用指定的模式将给定区域与当前剪裁区域组合。 |
152 | SelectObject 选择 GDI 绘图对象(如笔)。 |
153 | SelectPalette 选择逻辑调色板。 |
154 | SelectStockObject 选择 Windows 提供的预定义库存笔、画刷或字体之一。 |
155 | SetAbortProc 设置程序员提供的回调函数,如果必须中止打印作业,Windows 将调用该函数。 |
156 | SetArcDirection 设置用于圆弧和矩形函数的绘图方向。 |
157 | SetAttribDC 设置 m_hAttribDC,即属性设备上下文。 |
158 | SetBkColor 设置当前背景颜色。 |
159 | SetBkMode 设置背景模式。 |
160 | SetBoundsRect 控制指定设备上下文的边界矩形信息的累积。 |
161 | SetBrushOrg 指定将选入设备上下文的下一个画刷的原点。 |
162 | SetColorAdjustment 使用指定的值设置设备上下文的颜色调整值。 |
163 | SetDCBrushColor 设置当前画刷颜色。 |
164 | SetDCPenColor 设置当前笔颜色。 |
165 | SetGraphicsMode 设置指定设备上下文的当前图形模式。 |
166 | SetLayout 更改设备上下文 (DC) 的布局。 |
167 | SetMapMode 设置当前映射模式。 |
168 | SetMapperFlags 更改字体映射器在将逻辑字体映射到物理字体时使用的算法。 |
169 | SetMiterLimit 设置设备上下文斜接连接长度的限制。 |
170 | SetOutputDC 设置 m_hDC,即输出设备上下文。 |
171 | SetPixel 将指定点处的像素设置为指定颜色的最接近近似值。 |
172 | SetPixelV 将指定坐标处的像素设置为指定颜色的最接近近似值。SetPixelV 比 SetPixel 快,因为它不需要返回实际绘制的点的颜色值。 |
173 | SetPolyFillMode 设置多边形填充模式。 |
175 | SetROP2 设置当前绘图模式。 |
176 | SetStretchBltMode 设置位图拉伸模式。 |
177 | SetTextAlign 设置文本对齐标志。 |
178 | SetTextCharacterExtra 设置字符间距量。 |
179 | SetTextColor 设置文本颜色。 |
180 | SetTextJustification 在字符串中的换行符中添加空格。 |
181 | SetViewportExt 设置视口的 x 和 y 范围。 |
182 | SetViewportOrg 设置视口原点。 |
183 | SetWindowExt 设置关联窗口的 x 和 y 范围。 |
184 | SetWindowOrg 设置设备上下文的窗口原点。 |
185 | SetWorldTransform 设置当前的世界空间到页面空间的转换。 |
186 | StartDoc 通知设备驱动程序新的打印作业已开始。 |
187 | StartPage 通知设备驱动程序新的页面已开始。 |
188 | StretchBlt 将位图从源矩形和设备移动到目标矩形,如果需要,则拉伸或压缩位图以适合目标矩形的尺寸。 |
189 | StrokeAndFillPath 关闭路径中任何打开的图形,使用当前笔描绘路径轮廓,并使用当前画刷填充其内部。 |
190 | StrokePath 使用当前笔呈现指定的路径。 |
191 | TabbedTextOut 在指定位置写入字符字符串,将制表符扩展到制表位位置数组中指定的值。 |
192 | TextOut 使用当前选定的字体在指定位置写入字符字符串。 |
193 | TransparentBlt 将颜色数据位块从指定的源设备上下文传输到目标设备上下文,在传输中渲染指定的颜色透明。 |
194 | UpdateColors 通过逐像素地将客户端区域中的当前颜色与系统调色板匹配,更新设备上下文的客户端区域。 |
195 | WidenPath 将当前路径重新定义为如果使用当前选定到设备上下文中的笔描绘路径将绘制的区域。 |
线条
步骤 1 - 让我们通过创建一个名为MFCGDIDemo的新基于 MFC 的单文档项目来了解一个简单的示例。
步骤 2 - 项目创建完成后,转到解决方案资源管理器,双击“源文件”文件夹下的MFCGDIDemoView.cpp文件。
步骤 3 - 在CMFCGDIDemoView::OnDraw()方法中绘制如下所示的线条。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->MoveTo(95, 125); pDC->LineTo(230, 125); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 4 - 运行此应用程序。您将看到以下输出。
步骤 5 - CDC::MoveTo()方法用于设置线条的起始位置。
使用 LineTo() 时,程序从 MoveTo() 点开始到 LineTo() 结束。
在 LineTo() 之后,如果您不调用 MoveTo(),并再次使用其他点值调用 LineTo(),则程序将从上一个 LineTo() 绘制一条线到新的 LineTo() 点。
步骤 6 - 要绘制不同的线条,您可以使用以下代码所示的此属性。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->MoveTo(95, 125); pDC->LineTo(230, 125); pDC->LineTo(230, 225); pDC->LineTo(95, 325); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 7 - 运行此应用程序。您将看到以下输出。
折线
折线是一系列连接的线。这些线存储在 POINT 或 CPoint 值的数组中。要绘制折线,您可以使用 CDC::Polyline() 方法。要绘制折线,至少需要两个点。如果定义了两个以上的点,则第一条线之后的每条线都将从前一点绘制到下一条点,直到所有点都包含在内。
步骤 1 - 让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { CPoint Pt[7]; Pt[0] = CPoint(20, 150); Pt[1] = CPoint(180, 150); Pt[2] = CPoint(180, 20); pDC−Polyline(Pt, 3); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 2 - 运行此应用程序时,您将看到以下输出。
矩形
矩形是由四个构成四个直角的边组成的几何图形。与线条一样,要绘制矩形,必须定义其起始位置和结束位置。要绘制矩形,可以使用 CDC::Rectangle() 方法。
步骤 1 - 让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->Rectangle(15, 15, 250, 160); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 2 - 运行此应用程序时,您将看到以下输出。
正方形
正方形是由四个构成四个直角的边组成的几何图形,但每条边的长度必须相等。
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->Rectangle(15, 15, 250, 250); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行此应用程序时,您将看到以下输出。
扇形
扇形是由椭圆的一小部分和从椭圆中心延伸到每一侧的两条线限定的。要绘制扇形,可以使用 CDC::Pie() 方法,如下所示 -
BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
(x1, y1) 点确定表示扇形的椭圆所在的矩形左上角。 (x2, y2) 点是矩形的右下角。
(x3, y3) 点以默认的逆时针方向指定扇形的起始角。
(x4, y4) 点指定扇形的终点。
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->Pie(40, 20, 226, 144, 155, 32, 202, 115); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 2 - 运行此应用程序时,您将看到以下输出。
弧线
弧线是椭圆的一部分或一段,这意味着弧线是不完整的椭圆。要绘制弧线,可以使用 CDC::Arc() 方法。
BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
CDC 类配备了 SetArcDirection() 方法。
以下是语法 -
int SetArcDirection(int nArcDirection)
序号 | 值和方向 |
---|---|
1 | AD_CLOCKWISE 图形按顺时针方向绘制 |
2 | AD_COUNTERCLOCKWISE 图形按逆时针方向绘制 |
步骤 1 - 让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->SetArcDirection(AD_COUNTERCLOCKWISE); pDC->Arc(20, 20, 226, 144, 202, 115, 105, 32); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
步骤 2 - 运行此应用程序时,您将看到以下输出。
弦
到目前为止,我们绘制的弧线被认为是开放图形,因为它们是由一条具有起点和终点的线组成的(不像圆形或矩形那样)。弦是一条两端由直线连接的弧线。
要绘制弦,可以使用 CDC::Chord() 方法。
BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { pDC->SetArcDirection(AD_CLOCKWISE); pDC->Chord(20, 20, 226, 144, 202, 115, 105, 32); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行上述应用程序时,您将看到以下输出。
此示例中的弧线方向设置为顺时针方向。
颜色
颜色是增强对象美观外观的最基本对象之一。颜色是非空间对象,添加到对象以修改其某些视觉方面。MFC 库结合 Win32 API 提供了各种操作,您可以使用这些操作来利用颜色的各个方面。
RGB 宏的行为类似于函数,允许您传递三个用逗号分隔的数值。每个值必须介于 0 和 255 之间,如下面的代码所示。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { COLORREF color = RGB(239, 15, 225); }
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { COLORREF color = RGB(239, 15, 225); pDC->SetTextColor(color); pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行此应用程序时,您将看到以下输出。
字体
CFont封装了 Windows 图形设备接口 (GDI) 字体,并提供用于操作字体的成员函数。要使用 CFont 对象,请构造一个 CFont 对象并将 Windows 字体附加到它,然后使用该对象的成员函数来操作字体。
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { CFont font; font.CreatePointFont(920, L"Garamond"); CFont *pFont = pDC->SelectObject(&font); COLORREF color = RGB(239, 15, 225); pDC->SetTextColor(color); pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16); pDC->SelectObject(pFont); font.DeleteObject(); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行上述应用程序时,您将看到以下输出。
画笔
画笔是用于在设备上下文中绘制线条和曲线的工具。在图形编程中,画笔也用于绘制几何闭合形状(如矩形或多边形)的边界。Microsoft Windows 考虑两种类型的画笔 - 装饰和几何。
当画笔只能绘制固定宽度(小于或等于 1 像素)的简单线条时,称为装饰画笔。当画笔可以采用不同的宽度和各种端点时,称为几何画笔。MFC 提供了一个类CPen,它封装了 Windows 图形设备接口 (GDI) 画笔。
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { CPen pen; pen.CreatePen(PS_DASHDOTDOT, 1, RGB(160, 75, 90)); pDC->SelectObject(&pen); pDC->Rectangle(25, 35, 250, 125); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行上述应用程序时,您将看到以下输出。
画刷
画刷是一种绘图工具,用于填充闭合形状或线条的内部。画刷的行为就像拿起一桶油漆并将其倒在某个地方。MFC 提供了一个类CBrush,它封装了 Windows 图形设备接口 (GDI) 画刷。
让我们来看一个简单的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) { CBrush brush(RGB(100, 150, 200)); CBrush *pBrush = pDC->SelectObject(&brush); pDC->Rectangle(25, 35, 250, 125); pDC->SelectObject(pBrush); CMFCGDIDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here }
运行此应用程序时,您将看到以下输出。