VC++ (3) GDI绘图

GDIGraphics Device Interface):

图形设备接口:

    负责在显示器和打印机上显示图形 。

    我们的重点是在显示器上显示图形。

计算机图形输出设备分为两大类:

    光栅设备(Raster devices)

    矢量设备(Vector devices)

    我们的重点是在光栅设备上显示图形

 

GDI函数(约几百个)

      从功能上分为几大类:

  1.取得(或者建立)和释放(或者清除)设备描述表的函数。
  2.取得有关设备描述表信息的函数。
  3.绘图函数 。
  4.设置和取得设备描述表参数的函数。
  5.使用GDI对象的函数 。
 

取得设备描述表句柄

1.在处理WM_PAINT消息时,使用BeginPaint()EndPaint()调用: 

hdc = BeginPaint (hwnd, &ps) ;

……

……       

EndPaint (hwnd, &ps) ;

变量ps是型态为PAINTSTRUCT的结构(见MSDN),该结构的hdc字段是BeginPaint传回的设备内容句柄。   PAINTSTRUCT结构又包含一个名为rcPaintRECT(矩形)结构,rcPaint定义一个包围窗口显示区域无效范围的矩形。使用从BeginPaint获得的设备描述表句柄,只能在这个区域内绘图。BeginPaint调用使该区域有效。

2.在处理非WM_PAINT消息时取得设备描述表句柄:

 

hdc = GetDC (hwnd) ;

……

……       

ReleaseDC (hwnd, hdc) ;

这个设备描述表适用于窗口句柄为hwnd的显示区域。这些调用与BeginPaintEndPaint组合之间的基本区别是,利用从GetDC传回的句柄可以在整个显示区域上绘图。

   GetDCReleaseDC不使显示区域中任何可能的无效区域变成有效。

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) ;

 

 
 

VC++ (3) GDI绘图,布布扣,bubuko.com

VC++ (3) GDI绘图

上一篇:SSL握手通信详解及linux下c/c++ SSL Socket代码举例


下一篇:深入理解C语言-----副作用(Side Effect)和顺序点(Sequence Point)