📄 chap8_2.htm
字号:
<p>#ifndef _COLORS_H</p>
<p>#define _COLORS_H</p>
<p>//Main Colors</p>
<p>#define WHITE RGB(255,255,255)</p>
<p>#define BLACK RGB(0,0,0)</p>
<p>#define DK_GRAY RGB(128,128,128)</p>
<p>#define LT_GRAY RGB(192,192,192)</p>
<p>//dark colors</p>
<p>#define DK_RED RGB(128,0,0)</p>
<p>#define DK_GREEN RGB(0,128,0)</p>
<p>#define DK_BLUE RGB(0,0,128)</p>
<p>#define DK_PURPLE RGB(128,0,128)</p>
<p>#define DK_YELLOW RGB(128,128,0)</p>
<p>#define DK_CYAN RGB(0,128,128)</p>
<p>//bright colors</p>
<p>#define BR_RED RGB(255,0,0)</p>
<p>#define BR_GREEN RGB(0,255,0)</p>
<p>#define BR_BLUE RGB(0,0,255)</p>
<p>#define BR_PURPLE RGB(255,0,255)</p>
<p>#define BR_YELLOW RGB(255,255,0)</p>
<p>#define BR_CYAN RGB(0,255,255)</p>
<p>#endif</p>
<p></font><font SIZE="3">这样,要指定一个淡黄色的宽度为逻辑单位</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">的实心笔,可以调用:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>pen.CreatePen(PS_SOLID,1,BR_YELLOW);</p>
<p></font><font SIZE="3">创建笔的另一个方法是使用库存对象。</font><font FACE="Times New Roman" SIZE="3">SelectStockObject</font><font SIZE="3">可从以下库存笔中选择一个:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>BLACK_PEN </font><font SIZE="3">黑笔</font><font FACE="Times New Roman" SIZE="3"></p>
<p>NULL_PEN </font><font SIZE="3">空笔(不画线或边框)</font><font FACE="Times New Roman" SIZE="3"></p>
<p>WHITE_PEN </font><font SIZE="3">白笔<b></p>
<div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="100%" bgcolor="#84D7FF">
<tr>
<td width="100%"></b>注:库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔、刷子、字体等。</font><b></b></td>
</tr>
</table>
</center></div><font FACE="Times New Roman" SIZE="3"><p></font><b><font SIZE="3">刷子</font><font FACE="Times New Roman" SIZE="3">(CBrush)</font></b><font SIZE="3">:封装</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">刷子,可用作设备上下文中当前刷子。刷子用来填充一个封闭图形对象(如矩形、椭圆)的内部区域。缺省的刷子将封闭图形的内部填充成全白色。我们以前所创建的窗口内部都是白色就是窗口使用缺省刷子填充的结果。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">可以用以下几种方法创建刷子:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>(1)CreateSolidBrush(DWORD crColor)</font><font SIZE="3">创建一个实心刷子,用一种颜色填充一个内部区域。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>(2)CreateHatchBrush(int nIndex,DWORD crColor)</font><font SIZE="3">;创建一个带阴影的刷子,</font><font FACE="Times New Roman" SIZE="3">nIndex</font><font SIZE="3">代表一种影线模式:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">8-2</font><font SIZE="3">刷子的各种影线效果</font><font FACE="Times New Roman" SIZE="3"></p>
<p>(3)</font><font SIZE="3">用</font><font FACE="Times New Roman" SIZE="3">CreatePatternBrush(CBitmap*
pBitmap)</p>
<p></font><font SIZE="3">用一个位图作刷子,一般采用</font><font FACE="Times New Roman" SIZE="3">8X8</font><font SIZE="3">的位图,因为刷子可以看作</font><font FACE="Times New Roman" SIZE="3">8X8</font><font SIZE="3">的小位图。当</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">桌面背景采用图案(如</font><font FACE="Times New Roman" SIZE="3">weave</font><font SIZE="3">)填充时,使用的就是这种位图刷子。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>(4)</font><font SIZE="3">同样可以使用</font><font FACE="Times New Roman" SIZE="3">SelectStockObject()</font><font SIZE="3">从库存刷子中选取一个:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>BLACK_BRUSH </font><font SIZE="3">黑色刷子</font><font FACE="Times New Roman" SIZE="3"></p>
<p>WHITE_BRUSH </font><font SIZE="3">白色刷子</font><font FACE="Times New Roman" SIZE="3"></p>
<p>DKGRAY_BRUSH </font><font SIZE="3">暗灰刷子</font><font FACE="Times New Roman" SIZE="3"></p>
<p>GRAY_BRUSH </font><font SIZE="3">灰色刷子</font><font FACE="Times New Roman" SIZE="3"></p>
<p>LTGRAY_BRUSH </font><font SIZE="3">淡灰色刷子</font><font FACE="Times New Roman" SIZE="3"></p>
<p>NULL_BRUSH </font><font SIZE="3">空刷子,内部不填充</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3">字体</font><font FACE="Times New Roman" SIZE="3">(CFont)</font></b><font SIZE="3">:封装了</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">字体对象,用户可以建立一种</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">字体,并使用</font><font FACE="Times New Roman" SIZE="3">CFont</font><font SIZE="3">的成员函数来访问它。关于</font><font FACE="Times New Roman" SIZE="3">CFont</font><font SIZE="3">类,我们在前面已经作了一些介绍,这里不再赘述,读者可以参见前一章内容。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3">位图</font><font FACE="Times New Roman" SIZE="3">(CBitmap)</font></b><font SIZE="3">:封装一</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">位图,它提供成员函数装载和操作位图。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3">调色板</font><font FACE="Times New Roman" SIZE="3">(CPalette)</font></b><font SIZE="3">:封装</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">调色板,它保存着系统可用的色彩信息,是应用程序和彩色输出设备上下文的接口。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3">区域</font><font FACE="Times New Roman" SIZE="3">CRgn</font><font SIZE="3">类</b>:封装</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">区域。区域是窗口内的一块多边形或椭圆形的区域。</font><font FACE="Times New Roman" SIZE="3">CRgn</font><font SIZE="3">用于设备环境(通常是窗口)内的区域操作。</font><font FACE="Times New Roman" SIZE="3">CRgn</font><font SIZE="3">通常与</font><font FACE="Times New Roman" SIZE="3">CDC</font><font SIZE="3">的有关剪裁</font><font FACE="Times New Roman" SIZE="3">(clipping)</font><font SIZE="3">的成员函数配合使用。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">有关位图和调色板的使用在第十一章“多媒体编程”还要再作详细阐述。</font><b><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font></b><font color="#3973DE" FACE="Times New Roman" SIZE="3">8.2.3</font><font SIZE="3" color="#3973DE">常见的绘图任务</font><font FACE="Times New Roman" SIZE="3"></p>
<b><p></b></font><font SIZE="3" color="#3973DE">输出文本</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">字体大小计算:通过调用</font><font FACE="Times New Roman" SIZE="3">GetTextMetrics()</font><font SIZE="3">返回当前使用字体的尺寸描述,如前面文
本编辑所演示的那样。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">字体颜色设置:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">设置前景色:</font><font FACE="Times New Roman" SIZE="3">CDC::SetTextColor(int
nColor)</font><font SIZE="3">;</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">设置背景色:</font><font FACE="Times New Roman" SIZE="3">CDC::SetBkColor(int
nColor)</font><font SIZE="3">;</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">例如:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>dc.SetTextColor(WHITE);</p>
<p>dc.SetBkColor(DK_BLUE);</p>
<p>dc.TextOut(10,10,</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">White
Text on blue background</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">,30);</p>
<p></font><font SIZE="3">文字输出:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">除了我们前面介绍的文本输出函数</font><font FACE="Times New Roman" SIZE="3">TextOut()</font><font SIZE="3">之外,还有其他几个函数可用于文本输
出:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>TabbedTextOut</font><font SIZE="3">:象</font><font FACE="Times New Roman" SIZE="3">TextOut</font><font SIZE="3">一样显示正文,但用指定的制表间隔扩充制表键</font><font FACE="Times New Roman" SIZE="3">Tab</font><font SIZE="3">。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -