GDI(Graphics Device Interface):
图形设备接口:
负责在显示器和打印机上显示图形 。
我们的重点是在显示器上显示图形。
计算机图形输出设备分为两大类:
光栅设备(Raster devices)
矢量设备(Vector devices) 。
我们的重点是在光栅设备上显示图形
GDI函数(约几百个)
从功能上分为几大类:
取得设备描述表句柄
1.在处理WM_PAINT消息时,使用BeginPaint()和EndPaint()调用:
hdc = BeginPaint (hwnd, &ps) ;
……
……
EndPaint (hwnd, &ps) ;
变量ps是型态为PAINTSTRUCT的结构(见MSDN),该结构的hdc字段是BeginPaint传回的设备内容句柄。 PAINTSTRUCT结构又包含一个名为rcPaint的RECT(矩形)结构,rcPaint定义一个包围窗口显示区域无效范围的矩形。使用从BeginPaint获得的设备描述表句柄,只能在这个区域内绘图。BeginPaint调用使该区域有效。
2.在处理非WM_PAINT消息时取得设备描述表句柄:
hdc = GetDC (hwnd) ;
……
……
ReleaseDC (hwnd, hdc) ;
这个设备描述表适用于窗口句柄为hwnd的显示区域。这些调用与BeginPaint和EndPaint组合之间的基本区别是,利用从GetDC传回的句柄可以在整个显示区域上绘图。
GetDC和ReleaseDC不使显示区域中任何可能的无效区域变成有效。
3. 取得适用于整个窗口(而不仅限于窗口的显示区域)的设备内容句柄:
hdc = GetWindowDC (hwnd) ;
……
……
ReleaseDC (hwnd, hdc) ;
这个设备描述表除了显示区域之外,还包括窗口的标题列、菜单、滚动条和框架(frame)。
GetWindowDC函数很少使用,如果想尝试用一用它,则必须拦截处理WM_NCPAINT消息,Windows使用该消息在窗口的非显示区域上绘图。
4. 取得设备描述表句柄的更常用的函数是CreateDC:
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
……
……
DeleteDC (hdc) ;
可以通过下面的调用来取得整个屏幕的设备描述表句柄(可以作出汉王手写板的效果)
hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
5. 使用位图时,取得一个“内存设备描述表”有时是有用的(扫雷就可以用此方法):
hdcMem = CreateCompatibleDC (hdc) ;
……
……
DeleteDC (hdcMem) ;