MFC-GDI
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 |
重置DC 更新 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 步– 让我们看一个简单的例子,创建一个新的基于 MFC 的单文档项目,名称为MFCGDIDemo。
步骤 2 – 创建项目后,转到解决方案资源管理器并双击Source Files 文件夹下的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)
Sr.No. | 价值与方向 |
---|---|
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() 方法。
布尔和弦(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 }
运行此应用程序时,您将看到以下输出。