5-2 设备环境
引言
如果希望在屏幕上绘制图形,则必须获取设备环境的句柄。当windows把这个句柄交给你的程序,就说明赋予你了这个设备的使用权限。
5-2-1获取设备环境句柄
1.使用BeginPaint和EndPaint函数。
hdc = BeginPaint(hwnd,&ps);
...
EndPaint(hwnd,&ps);
ps结构体中有一个名为rcPaint的矩形结构,代表无效范围,也就是可以绘图的区域
2.处理非WM_PAINT消息时
hdc = GetDC(hwnd);
...
ReleaseDC(hwnd,hdc);
GetDC返回的句柄可以在整个客户区内绘制
3.更通用的函数
hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);
...
DeleteDC(hdc);
5-2-2 获取设备环境的信息
1、
iValue = GetDeviceCaps(hdc, iIndex);
根据iIndex的值不同返回不同的信息。例如,当iIndex为HORZRES时,返回显示器宽度像素,或者打印机显示区域的宽度。
5-2-4 设备的尺寸
1、调用GetSystemMetrics(SM_CXSCREEN或SM_CYSCREEN)获得显示器的像素规模
2、传统的排版中,字体一磅即1/72英寸,字体的大小就是头到脚的距离(不包括重音符号),10磅即10/72英寸高度。
3、小字体和大字体。
小字体表示每英寸96像素,大字体表示每英寸120个像素,所以10磅的字体可能有不同像素数。
小字体是96 x 10/72像素, 大字体是120 x 10/72像素。
4、GetDeviceCaps可以获得以每英寸像素点数为单位的假定分辨率。
需要使用两个参数,LOGPIXELSX,LOGPIXELSY,基本含义是以每英寸像素数计算的非实际分辨率。
5、计算字体大小公式 : 水平尺寸 = 25.4 x (/(第4步计算出来的像素数))
5-2-5 色彩ABC
1、每个像素的颜色位数可以用iBitsPixel = GetDeviceCaps(hdc, BITSPIXEL)来获得
5-2-6 设备环境属性
5-2-7保存设备环境
1、idSaved = SaveDC(hdc);
保存设备环境
RestoreDC(hdc,idSaved);
可以返回保存的设备环境
2、可以不用返回值SaveDC(hdc)
然后使用RestoreDC(hdc,-1)使设备环境恢复到最近一次保存的状态
5-3点和线的绘制
5-3-1设定像素
1.SetPixel(hdc, x, y, crColor)将x,y点设置为某个特定的颜色
相对应的 ceColor = GetPixel(hdc,x,y );
5-3-2 直线
- 为了画一条直线,需要调用两个函数,一个用来确定起点,一个用来确定终点.
MoveToEx(hdc, xBeg, yBeg, NULL);
LineTo(hdc, xEnd, yEnd);
- 获取当前位置
GetCurrentPositionEx(hdc, &pt)
- Draw lines over an array of points
POINT apt[5] = {100, 100, 200, 100, 200, 200, 100, 200, 100, 100}