MFC - GDI
Windows 提供了多种在设备上下文中使用的绘图工具。 它提供了用于绘制线条的笔、用于填充内部的画笔以及用于绘制文本的字体。 MFC 提供了与 Windows 中的绘图工具等效的图形对象类。
绘图
设备上下文是一种 Windows 数据结构,包含有关设备(例如显示器或打印机)的绘图属性的信息。 所有绘图调用都是通过设备上下文对象进行的,该对象封装了用于绘制线条、形状和文本的 Windows API。
设备上下文允许在 Windows 中进行与设备无关的绘图。 设备上下文可用于绘制到屏幕、打印机或图元文件。
CDC是MFC中绘制的最基本的类。 CDC 对象提供了执行基本绘图步骤的成员函数,以及用于处理与窗口客户区关联的显示上下文的成员。
Sr. No. | 名称和描述 |
---|---|
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 从该 CDC 对象中分离 Windows 设备上下文。 |
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 将当前字体的字体名称作为空终止字符串复制到缓冲区中。 |
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 绘制一条或多条 Bzier 样条线。 当前位置既未使用也未更新。 |
130 | PolyBezierTo 绘制一个或多个 Bzier 样条线,并将当前位置移动到最后一个 Bzier 样条线的终点。 |
131 | PolyDraw 绘制一组线段和 Bzier 样条线。 此函数更新当前位置。 |
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 }
当您运行此应用程序时,您将看到以下输出。