5、绘图基础

设备环境 1、
《4、文本输出》中介绍了设备环境句柄的获取方法 。但有时并不需要绘图,只是获取一些设备环境句柄相关的信息,可以使用 。也是返回一个HDC,但是不能对其进行绘制 。
2、
用于获取设备环境的一些显示能力,比如:
- HORZSIZE:以毫米为单位的物理屏幕宽度- VERTSIZE:以毫米为单位的物理屏幕高度- HORZRES:水平方向像素数- VERTRES:垂直方向像素数- LOGPIXELSX:水平方向每英寸像素数- LOGPIXELSY:垂直方向每英寸像素数
和的值并不可靠 。它们并不等于实际的物理屏幕尺寸,在win10系统中测试也不满足书本中提供的公式:
书中还提到,在 NT中,和是固定的值,用来表示标准的显示器尺寸 。
3、字号和字体在屏幕显示大小
字号(字体大小)是用“点值”(也称“磅”)来表示的,1磅大约是1/72英寸 。通过获取到的表示垂直方向每英寸像素数,那么 / 72就是1磅的字体高度,这个值和中的 - 相等 。
我们可以在系统设置中改变屏幕分辨率 。如果减小屏幕分辨率, 并不会改变,只是总像素数减少了,单个像素的面积变大,所以同样的字号显示得更大 。
4、色彩
在GDI函数中,使用来表示一个颜色值,是一个32位无符号整型 。最高8位是0,其后每8位分别用于指定红、绿、蓝 。所以实际只有24位被实际用于表示颜色 。提供了几个宏用于:
#define RGB(r,g,b)((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))#define GetRValue(rgb)(LOBYTE(rgb))#define GetGValue(rgb)(LOBYTE(((WORD)(rgb)) >> 8))#define GetBValue(rgb)(LOBYTE((rgb)>>16))
5、保存设备环境
默认情况下,设备环境句柄被释放后,对设备环境属性所做的所有改变都会丢失 。如果想保存这些修改,可以:
绘制点和线 1、点
虽然一般不会直接操作像素,但GDI提供了相关函数
2、线
3、GDI对象–画笔
有6种GDI对象:画笔、画刷、位图、区域、字体和调色板 。
使用GDI对象时,需要调用把GDI对象选入设备环境中,调用可以获取设备环境中当前使用的GDI对象 。不再使用的GDI对象需要调用删除GDI 。提供了一些预定义好的GDI对象,可以调用来获取预定义的GDI对象 。
画笔决定了线条的颜色、宽度和样式 。提供了3种预定义画笔:
是设备环境中的默认画笔 。需要使用其他画笔时,可以调用把画笔选入设备环境中 。
除了预定义画笔,还可以自定义画笔:
使用完毕后,应该删除所有创建的画笔对象 。但不能在被选入设备环境时删除,也不能删除预定义的画笔对象 。
调用可以从画笔对象句柄中读取画笔属性到逻辑画笔中:
【5、绘图基础】GetObject(hPen, sizeof(LOGPEN), (LPVOID)&logpen);
的返回值是设备环境中上一个GDI对象,这一特性可以用于中:
SelectObject(hdc, CreatePen(PS_DASH, 0 RGB(255, 0, 0)));DeleteObject(SelectObject(hdc, GetStockObject(BLACK_PEN)));
或者
hPen = SelectObject(hdc, CreatePen(PS_DASH, 0 RGB(255, 0, 0)));DelectObject(SelectObject(hdc, hPen));
4、填充间隙
绘制中,很多地方存在间隙,比如虚线间或者文本输出间的空白部分 。
这些间隙是由设备环境的背景模式和背景颜色共同控制的
只有两种背景模式

5、绘图基础

文章插图
背景模式默认是不透明,背景颜色默认是白色 。