Windows程序设计笔记(4)

设备描述表
1.在WM_PAINT消息时
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);

PAINTSTRUCT中包含一个rcPaint的矩形结构,定义为包含窗口客户区的无效范围矩形
2.非WM_PAINT消息时
2.1
hdc=GetDC(hwnd);    //整个绘图区的句柄
ReleaseDC(hwnd,hdc);
不使客户区任何可能的无效区域变为有效  (不刷新窗口显示?)
2.2适用于整个窗口,而非客户区,必须捕获WM_NCPAINT消息
hdc=GetWindowDC(hwnd);
ReleaseDC(hwnd,hdc);

3.获取整个屏幕的设备描述表
以上2种方式获得的句柄都和某个窗口有关,而想获取整个屏幕的设备描述句柄则应使用
hdc = CreateDC(pszDriver,pszDevice,pszOutput,pData);
DeleteDC(hdc);

4.内存设备描述表
hdcmem = CreateCompatibleDC(hdc);
DeleteDC(hdcmem);

5.元文件设备描述表
hdcMeta = CreateMetaFile(pszfilename);
hmf = CloseMetaFile(hdcMeta);

获取设备描述表信息
GetDeviceCaps(hdc, index);

水平/垂直大小(mm) = 25.4 * 水平/垂直分辨率(像素) / 逻辑像素X/Y(每英寸的点数)
25.4用于将英寸转为mm


6种GDI对象:
画笔,刷子,位图,区域,字体,调色板. 这些对象都是通过SelectObject选进设备描述表的.在使用时应遵守以下三条原则:
1.最后要删除自己创建的所有GDI对象
2.当GDI对象正在一个有效的设备描述表中时,不要删除它
3.不要删除现有对象

背景模式OPAQUE,TRANSPARENT(忽略背景色,且不填充空隙)

逻辑坐标和设备坐标
ClientToScreen()  ScreenToClient() 客户区坐标与屏幕坐标的转换
GetWindowRect获取屏幕坐标下的整个窗口的位置和大小

Viewport和Windowport
GetClientRect()获取客户区大小  
DPToLP() 设备点转逻辑点
LPToDP() 逻辑点转设备点

注:在改变viewport或者windowport后并不能立即刷新显示输出,而必须在改变原点之后刷新输出



原文地址:https://www.cnblogs.com/neking/p/2534698.html