目前完成度【 1/3 】,有任何建议欢迎反馈 【问卷调查】
contenteditable="true"

MFC - GDI 介绍

Windows提供了在设备上下文中使用的各种绘图工具。它提供了用于绘制线条的笔,用于填充内部的画笔以及用于绘制文本的字体。MFC提供了等效于Windows中绘图工具的图形对象类。

Drawing

设备上下文是Windows数据结构,其中包含有关设备(例如显示器或打印机)的图形属性的信息。所有绘图调用都是通过设备上下文对象进行的,该对象封装了用于绘制线条,形状和文本的Windows API。

设备上下文允许Windows中与设备无关的图形。设备上下文可用于绘制到屏幕,打印机或图元文件。

CDC 是在MFC中绘制的最基本的类。 CDC对象提供执行基本绘图步骤的成员函数,以及用于处理与窗口的客户区域关联的显示上下文的成员。


Sr. No.Name & Description
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

和弦

绘制和弦(以椭圆和线段的交点为界的闭合图形)。

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

Fllipse

绘制一个椭圆。

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

检索当前的background color。

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

绘制的一组线段和贝塞尔样条。此功能更新当前位置。

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

设置当前background color。

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

UpdateColor

通过将客户区域中的当前颜色与系统调色板逐像素匹配来更新设备上下文的客户区域。

195

WidenPath

将当前路径重新定义为如果使用当前在设备上下文中选择的笔描边路径时将绘制的区域。

Lines

第1步-让我们看一个简单的示例,创建一个具有 MFCGDIDemo 名称的基于MFC的新单文档项目。

Lines

步骤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 -运行此应用程序。您将看到以下输出。

Lines

步骤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 -运行此应用程序。您将看到以下输出。

Lines

Polylines

折线是一系列连接的线。这些行存储在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);
   pDCPolyline(Pt, 3);
   
   CMFCGDIDemoDoc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);
   if (!pDoc)
      return;

   //TODO: add draw code for native data here
}

第2步-运行此应用程序时,将看到以下输出。

折线

Rectangles

矩形是由四个构成四个直角的边组成的几何图形。像直线一样,要绘制矩形,您必须定义矩形的起点和终点。要绘制矩形,可以使用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步-运行此应用程序时,将看到以下输出。

长方形

Squares

正方形是由四个侧面组成的几何图形,四个侧面组成四个直角,但每个侧面的长度必须相等。

让我们看一个简单的示例。

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
}

运行此应用程序时,将看到以下输出。

方格

Pies

pie 是椭圆的一部分,由两条线界定,该两条线从椭圆的中心延伸到一侧。要绘制馅饼,可以使用CDC::Pie()方法,如下所示-

BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

  • (x1,y1)点确定矩形的左上角,代表饼形的椭圆适合该矩形。 (x2,y2)点是矩形的右下角。

Pies
  • (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步-运行此应用程序时,将看到以下输出。

Pies

Arcs

圆弧是椭圆的一部分或一部分,表示圆弧是不完整的椭圆。要绘制圆弧,可以使用CDC::Arc()方法。

BOOL Arc(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);

Arcs

CDC类配备了SetArcDirection()方法。

这是语法-

int SetArcDirection(int nArcDirection)

Sr.No.Value & Orientation
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步-运行此应用程序时,将看到以下输出。

Arcs

Chords

到目前为止,我们绘制的弧线被认为是开放图形,因为它们是由具有起点和终点的线组成的(不同于没有弧线的圆或矩形)。 Chords是圆弧,其两端通过直线连接。

和弦

要绘制Chords,可以使用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
}

运行上述应用程序时,将看到以下输出。

和弦

在此示例中,圆弧方向设置为顺时针方向。

Color

颜色是最基本的对象之一,可以增强对象的美学外观。颜色是非空间对象,已添加到对象以修改其某些视觉外观。 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
}

运行此应用程序时,将看到以下输出。

色彩

Fonts

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
}

运行上述应用程序时,将看到以下输出。

Fonts

Pens

pen 是用于在设备上下文上绘制直线和曲线的工具。在图形编程中,笔还用于绘制诸如矩形或多边形之类的几何封闭形状的边界。 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
}

运行上述应用程序时,将看到以下输出。

Pens

Pens

Pens是一种绘制工具,用于填充封闭的形状或线条内部。刷子的行为就像捡起一桶油漆并将其倒在某处。 MFC提供了一个 CBrush 类,该类封装了Windows图形设备接口(GDI)画pens。

让我们看一个简单的示例。

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
}

运行此应用程序时,将看到以下输出。

刷子