MFC-GDI


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

绘画

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

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

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

先生。没有。 名称和描述
1

中止文档

终止当前的打印作业,擦除自上次调用StartDoc成员函数以来应用程序写入设备的所有内容。

2

中止路径

关闭并丢弃设备上下文中的所有路径。

3

添加元文件注释

将注释从缓冲区复制到指定的增强格式图元文件中。

4

阿尔法混合

显示具有透明或半透明像素的位图。

5

角弧

绘制一条线段和一条圆弧,并将当前位置移动到圆弧的终点。

6

绘制椭圆弧。

7

圆弧图

绘制椭圆弧。该功能与Arc类似,只是更新当前位置。

8

将 Windows 设备上下文附加到此 CDC 对象。

9

开始路径

在设备上下文中打开路径括号。

10

比特位转移

从指定的设备上下文复制位图。

11

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

12

关闭图

闭合路径中的开放图形。

13

创建兼容DC

创建与另一个设备上下文兼容的内存设备上下文。您可以使用它在内存中准备图像。

14

创建DC

为特定设备创建设备上下文。

15

创芯

为特定设备创建信息上下文。这提供了一种无需创建设备上下文即可快速获取设备信息的方法。

16

删除DC

删除与此 CDC 对象关联的 Windows 设备上下文。

17 号

删除临时图

由CWinApp空闲时间处理程序调用,以删除由 FromHandle 创建的任何临时 CDC 对象。还分离设备上下文。

18

分离

从此 CDC 对象分离 Windows 设备上下文。

19

DP 到HIMETRIC

将设备单位转换为HIMETRIC单位。

20

DP到LP

将设备单位转换为逻辑单位。

21

绘制3d矩形

绘制一个三维矩形。

22

绘制拖拽矩形

拖动时擦除并重新绘制矩形。

23

画边

绘制矩形的边缘。

24

绘图逃脱

访问无法通过图形设备接口 (GDI) 直接使用的视频显示绘图功能。

25

绘制焦点矩形

以用于指示焦点的样式绘制一个矩形。

26

绘图框控件

绘制一个框架控件。

27

绘制图标

绘制一个图标。

28

绘图状态

显示图像并应用视觉效果来指示状态。

29

绘制文本

在指定的矩形中绘制格式化文本。

30

绘制文本Ex

使用附加格式在指定矩形中绘制格式化文本。

31

椭圆

绘制一个椭圆。

32

结束文档

结束由 StartDoc 成员函数启动的打印作业。

33

尾页

通知设备驱动程序页面即将结束。

34

结束路径

关闭路径括号并将括号定义的路径选择到设备上下文中。

35

枚举对象

枚举设备上下文中可用的笔和画笔。

36

逃脱

允许应用程序通过 GDI 访问特定设备无法直接使用的功能。还允许访问 Windows 转义功能。应用程序发出的转义调用被翻译并发送到设备驱动程序。

37

排除剪贴矩形

创建一个由现有剪切区域减去指定矩形组成的新剪切区域。

38

排除更新Rgn

通过从剪切区域中排除窗口中的更新区域,防止在窗口的无效区域内进行绘制。

39

外部洪水填充

用当前画笔填充一个区域。提供比FloodFill成员函数更大的灵活性。

40

外部文本输出

使用当前选择的字体在矩形区域内写入字符串。

41

填充路径

关闭当前路径中所有打开的图形,并使用当前画笔和多边形填充模式填充路径的内部。

42

填充矩形

使用特定的画笔填充给定的矩形。

43

填充区域

使用指定画笔填充特定区域。

44

填充实心矩形

用纯色填充矩形。

45

展平路径

将所选路径中的任何曲线转换到当前设备上下文中,并将每条曲线转换为一系列直线。

46

洪水填埋

用当前画笔填充一个区域。

47

框架矩形

围绕矩形绘制边框。

48

帧Rgn

使用画笔在特定区域周围绘制边框。

49

句柄

当给定设备上下文的句柄时,返回指向 CDC 对象的指针。如果 CDC 对象未附加到句柄,则会创建并附加临时 CDC 对象。

50

获取圆弧方向

返回设备上下文的当前弧方向。

51

获取纵横比过滤器

检索当前纵横比滤镜的设置。

52

获取背景颜色

检索当前背景颜色。

53

获取背景模式

检索后台模式。

54

获取边界矩形

返回指定设备上下文的当前累积边界矩形。

55

获取画笔组织

检索当前画笔的原点。

56

获取CharABC宽度

检索当前字体给定范围内连续字符的宽度(以逻辑单位表示)。

57

获取CharABC宽度I

从当前 TrueType 字体中检索指定范围内的连续字形索引的宽度(以逻辑单位表示)。

58

获取角色位置

检索字符串的各种类型的信息。

59

获取字符宽度

检索当前字体给定范围内连续字符的分数宽度。

60

获取字符宽度I

检索当前字体指定范围内连续字形索引的宽度(以逻辑坐标表示)。

61

获取剪辑框

检索当前剪切边界周围最紧密的边界矩形的尺寸。

62

获取颜色调整

检索设备上下文的颜色调整值。

63

获取当前位图

返回指向当前选定的CBitmap对象的指针。

64

获取当前画笔

返回指向当前选定的CBrush对象的指针。

65

获取当前字体

返回指向当前选定的CFont对象的指针。

66

获取当前调色板

返回指向当前选定的CPalette对象的指针。

48

获取当前笔

返回指向当前选定的CPen对象的指针。

67

获取当前位置

检索笔的当前位置(以逻辑坐标表示)。

68

获取DC画笔颜色

检索当前画笔颜色。

69

获取DCPenColor

检索当前的笔颜色。

70

获取设备上限

检索有关给定显示设备功能的指定类型的设备特定信息。

71

获取字体数据

从可缩放字体文件中检索字体规格信息。通过指定字体文件中的偏移量和要返回的信息的长度来标识要检索的信息。

72

获取字体语言信息

返回有关指定显示上下文的当前所选字体的信息。

73

获取字形轮廓

检索当前字体中轮廓字符的轮廓曲线或位图。

74

获取图形模式

检索指定设备上下文的当前图形模式。

75

获取半色调画笔

检索半色调画笔。

76

获取字距对

检索当前在指定设备上下文中选择的字体的字符字距调整对。

77

获取布局

检索设备上下文 (DC) 的布局。布局可以是从左到右(默认)或从右到左(镜像)。

78

获取地图模式

检索当前的映射模式。

79

获取斜接限制

返回设备上下文的斜接限制。

80

获取最近的颜色

检索与给定设备可以表示的指定逻辑颜色最接近的逻辑颜色。

81

获取大纲文本指标

检索 TrueType 字体的字体规格信息。

82

获取输出字符宽度

使用输出设备上下文从当前字体中检索连续字符组中各个字符的宽度。

83

获取输出选项卡文本范围

计算输出设备上下文上字符串的宽度和高度。

84

获取输出文本范围

使用当前字体计算输出设备上下文上文本行的宽度和高度以确定尺寸。

85

获取输出文本指标

从输出设备上下文中检索当前字体的规格。

86

获取路径

检索定义在设备上下文中选择的路径中找到的直线端点和曲线控制点的坐标。

87

获取像素

检索指定点处像素的 RGB 颜色值。

88

获取多边形填充模式

检索当前的多边形填充模式。

89

获取ROP2

检索当前绘图模式。

90

获取安全HDC

返回m_hDC,输出设备上下文。

91

获取StretchBltMode

检索当前位图拉伸模式。

92

获取选项卡文本范围

计算属性设备上下文上字符串的宽度和高度。

93

获取文本对齐

检索文本对齐标志。

94

获取额外文本字符

检索字符间距量的当前设置。

95

获取文本颜色

检索当前文本颜色。

96

获取文本范围

使用当前字体计算属性设备上下文上文本行的宽度和高度以确定尺寸。

97

获取文本范围ExPointI

检索指定字符串中适合指定空间的字符数,并使用每个字符的文本范围填充数组。

98

获取文本范围点I

检索指定字形索引数组的宽度和高度。

99

获取文本人脸

将当前字体的字体名称作为空终止字符串复制到缓冲区中。

100

获取文本指标

从属性设备上下文中检索当前字体的规格。

101

获取视口扩展

检索视口的 x 和 y 范围。

102

获取ViewportOrg

检索视口原点的 x 和 y 坐标。

103

获取窗口

返回与显示设备上下文关联的窗口。

104

获取窗口扩展

检索关联窗口的 x 和 y 范围。

105

获取窗口组织

检索关联窗口原点的 x 和 y 坐标。

106

获取世界变换

检索当前世界空间到页面空间的转换。

107

渐变填充

用渐变颜色填充矩形和三角形结构。

108

灰弦

在给定位置绘制暗淡(灰色)文本。

109

HIMETRIC转DP

将 HIMETRIC 单位转换为设备单位。

110

HIMETRICTOLP

将 HIMETRIC 单位转换为逻辑单位。

111

相交剪贴矩形

通过形成当前区域和矩形的交集来创建新的剪切区域。

112

反转矩形

反转矩形的内容。

113

反转Rgn

反转区域中的颜色。

114

正在打印

确定设备上下文是否用于打印。

115

线路至

从当前位置到(但不包括)点绘制一条线。

116

LP到DP

将逻辑单元转换为设备单元。

117

LP 到HIMETRIC

将逻辑单位转换为 HIMETRIC 单位。

118

掩码Blt

使用给定的蒙版和光栅操作组合源位图和目标位图的颜色数据。

119

修改世界变换

使用指定模式更改设备上下文的世界变换。

120

搬去

移动当前位置。

121

偏移剪辑Rgn

移动给定设备的剪切区域。

122

偏移视口组织

修改相对于当前视口原点坐标的视口原点。

123

偏移窗口组织

修改相对于当前窗口原点坐标的窗口原点。

124

绘制Rgn

使用选定的画笔填充区域。

125

帕特·布莱特

创建位模式。

126

馅饼

绘制一个饼形楔形。

127

播放元文件

在给定设备上播放指定图元文件的内容。PlayMetaFile 的增强版本显示存储在给定增强格式图元文件中的图片。图元文件可以播放任意多次。

128

血小板

将颜色数据位从源设备上下文中的指定矩形执行位块传输到给定设备上下文中的指定平行四边形。

129

聚贝塞尔曲线

绘制一条或多条 Bzier 样条线。当前位置既未使用也未更新。

130

聚贝塞尔曲线

绘制一个或多个 Bzier 样条线,并将当前位置移动到最后一个 Bzier 样条线的终点。

131

多边形绘图

绘制一组线段和 Bzier 样条线。该函数更新当前位置。

132

多边形

绘制由通过线连接的两个或多个点(顶点)组成的多边形。

133

折线

绘制一组连接指定点的线段。

134

折线至

绘制一条或多条直线并将当前位置移动到最后一条线的终点。

135

多边形多边形

创建两个或多个使用当前多边形填充模式填充的多边形。多边形可以是不相交的,也可以是重叠的。

136

多段线

绘制多个系列的连接线段。该函数既不使用也不更新当前位置。

137

可见光点

指定给定点是否在剪切区域内。

138

实现调色板

将当前逻辑调色板中的调色板条目映射到系统调色板。

139

长方形

使用当前笔绘制一个矩形并使用当前画笔填充它。

140

矩形可见

确定给定矩形的任何部分是否位于剪切区域内。

141

发布属性DC

释放m_hAttribDC,属性设备上下文。

142

释放输出DC

释放m_hDC,输出设备上下文。

143

复位DC

更新 m_hAttribDC 设备上下文。

144

恢复DC

将设备上下文恢复到使用SaveDC保存的先前状态。

145

圆角矩形

使用当前笔绘制一个圆角矩形并使用当前画笔进行填充。

146

保存DC

保存设备上下文的当前状态。

147

缩放视口扩展

修改相对于当前值的视口范围。

148

缩放窗口扩展

修改相对于当前值的窗口范围。

149

滚动DC

水平和垂直滚动位矩形。

150

选择剪辑路径

选择当前路径作为设备上下文的剪切区域,使用指定的模式将新区域与任何现有剪切区域组合。

151

选择剪辑Rgn

使用指定模式将给定区域与当前剪切区域组合。

152

选择对象

选择 GDI 绘图对象,例如笔。

153

选择调色板

选择逻辑调色板。

154

选择库存对象

选择 Windows 提供的预定义笔、画笔或字体之一。

155

设置中止过程

设置程序员提供的回调函数,Windows 在必须中止打印作业时调用该函数。

156

设置圆弧方向

设置用于圆弧和矩形函数的绘图方向。

157

设置属性DC

设置 m_hAttribDC,属性设备上下文。

158

设置背景颜色

设置当前背景颜色。

159

设置背景模式

设置背景模式。

160

设置边界矩形

控制指定设备上下文的边界矩形信息的累积。

161

设置画笔组织

指定设备上下文中选择的下一个画笔的原点。

162

设置颜色调整

使用指定的值设置设备上下文的颜色调整值。

163

设置DC画笔颜色

设置当前画笔颜色。

164

设置DC笔颜色

设置当前画笔颜色。

165

设置图形模式

设置指定设备上下文的当前图形模式。

166

设置布局

更改设备上下文 (DC) 的布局。

167

设置地图模式

设置当前映射模式。

168

设置映射器标志

更改字体映射器将逻辑字体映射到物理字体时使用的算法。

169

设置斜接限制

设置设备上下文的斜接长度限制。

170

设置输出DC

设置 m_hDC,输出设备上下文。

171

设置像素

将指定点处的像素设置为指定颜色的最接近值。

172

设置像素V

将指定坐标处的像素设置为指定颜色的最接近值。SetPixelV比SetPixel更快,因为它不需要返回实际绘制的点的颜色值。

173

设置多边形填充模式

设置多边形填充模式。

175

设置ROP2

设置当前绘图模式。

176

设置拉伸Blt模式

设置位图拉伸模式。

177

设置文本对齐

设置文本对齐标志。

178

设置额外文本字符

设置字符间距量。

179

设置文本颜色

设置文本颜色。

180

设置文本对齐方式

向字符串中的分隔符添加空格。

181

设置视口扩展

设置视口的 x 和 y 范围。

182

设置视口组织

设置视口原点。

183

设置窗口扩展

设置关联窗口的 x 和 y 范围。

184

设置窗口组织

设置设备上下文的窗口原点。

185

设置世界变换

将当前世界空间设置为页面空间转换。

186

开始文档

通知设备驱动程序新的打印作业正在开始。

187

首页

通知设备驱动程序新页面正在开始。

188

拉伸Blt

将位图从源矩形和设备移动到目标矩形,并根据需要拉伸或压缩位图以适合目标矩形的尺寸。

189

描边和填充路径

关闭路径中所有打开的图形,使用当前笔绘制路径轮廓,并使用当前画笔填充其内部。

190

笔划路径

使用当前笔渲染指定路径。

191

选项卡式文本输出

在指定位置写入字符串,将制表符扩展为制表符停止位置数组中指定的值。

192

文本输出

使用当前选择的字体在指定位置写入字符串。

193

透明Blt

将颜色数据的位块从指定的源设备上下文传输到目标设备上下文,在传输中呈现指定的颜色透明。

194

更新颜色

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

195

加宽路径

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

线路

步骤 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_逆时针

该图是逆时针绘制的

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

弧线

Concordion

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

Concordion

要绘制Concordion,可以使用 CDC::Chord() 方法。

BOOL Concordion(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
}

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

Concordion

本例中的圆弧方向设置为顺时针方向。

颜色

色彩是增强物体外观美感的最基本物体之一。颜色是一种非空间对象,添加到对象中以修改其某些视觉方面。MFC 库与 Win32 API 相结合,提供了各种操作,可用于充分利用颜色的各个方面。

RGB 宏的Behave类似于函数,允许您传递以逗号分隔的三个数值。每个值必须介于 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
}

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

钢笔

刷子

画笔是一种绘图工具用于填充封闭形状或线条内部。画笔的Behave就像拿起一桶油漆并将其倒在某个地方。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
}

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

刷子