获取释放DC(设备上下文)

来源:互联网 发布:东莞广电网络 编辑:程序博客网 时间:2024/06/01 09:45

                                                                                 获取释放DC(设备上下文)

  获取设备上下文句柄有多种方法。

  1. 当处理一条消息时获得了设备上下文、并在退出窗口之前释放它。一般的处理方法如下:     

  在处理WM_PAINT消息时     
  case   WM_PAINT:     
  hdc=BeginPaint(hwnd,&ps)     
  EndPaint   (hwnd,&ps);     
  其数据结构为:     
  HDC   hWnd;     

  PAINTSTRUCT   ps;  

 在windows.h中定义了PAINTSTRUCT的数据结构。     
  type   struct   tagPAINTSTRUCT   {     
  HDC   hdC;     
  BOOL   fErase;     
  RECT   rcPaint;     
  BOOL   fRestore;     
  BOOL   flncUpdate;     

  BYTE   rgbReserved[16]; 

}PAINTSTRUCT;     

  其中,hdc用于标识显式上下文,fErase指出背景是否重画,rcPaint是涂色矩形,其余的域均为保留。

这里的hdc是BeginPaint返回的设备上下文句柄,有了从DeginPaint获取的设备上下文句柄,就可以也只能在ps指出的rcPaint的矩形内绘图,EndPaint调用使这一区域有效。    


  2.获取和释放设备上下文可以在整个用户区内画图,图形在整个用户区域内都有效:     
  hdC=GetDc   (hwnd   );     
  …画图操作…     

  ReleaseDC   (hwnd   ,   hdc   );


  3.在整个窗口内画图,图形在整个窗口内有效:     
  hdC=GetWindowDc(hwnd);     
  …画图操作…     

  ReleaseDc(hwnd,hdc);     


  4.在整个显示器区域内画图,图形在整个显示器区域内部有效:     
  hdc=CreateDC   (lpszDriver   ,lpszDevice   ,lpszOutput   ,   lpData);     
  …画图操作…     

  ReleaseDC(hdc);    

 其中:  lpszDriver指向设备驱动程序的DOS文件名(不带扩展名),

           lpszDevice指向专用设备名(例如Epson   Fx-80),

           lpszOutput指向物理输出介质(文件或输出端口)的DOS文件名或设备名,

           lpData指向含有设备驱动程序的设备专用的初始化数据的DEVMODE数据结构。

例如:   

  1)如果要使用屏幕画图:

  hdc = CreateDC("DISPLAY",NULL,NULL,NULL);     
  2)如果要在打印机上输出图形:
  hdc =  CreateDC   ("IBMGRX","IBM   Graphics","LPT1",NULL   );     
  这里的lpData置为默认值,可以在WIN.INI中找到初始化值。     
  3)如果不需要获取设备上下文,即不需要在设备上下文中操作,只需了解有关设备上下文的信息:     
  hdcInfo =  CreateDC(lpszDriver,   lpszDevice,lpszOutput,   lpData   );     
  ……     
  DeteteDC   (hdcInfo);     
0 0