VC之GDI(一)

以前在Delphi下用Canvas用惯了,很少直接使用GDI API,今天转换到VC下了,哪只有重新温习GDI了,首先先简单说说GDI体系结构。

GDI是微软设计的一套API,为应用程序提供设备无关的接口,包括视频显示、打印机、画图仪和传真机。GDI提供几百个Windows程序可以调用的函数。这些函数大多数是从Win32的子系统GDI32.DLL中导出。有兴趣的话找个工具看看GDI32.Dll的导出函数。

GDI的功能太多了,MSDN库就将GDI API分为17个领域(位图、画刷、剪裁、颜色、坐标和变换、设备上下文、填充形状、字体和文本、直线和曲线、元文件、多显示监视器、画图和绘图、路径、画笔、打印和打印池、矩形、区域)。除了这些分类外,还有一些没有文档记载的函数。有一些在DDK中说明,还有一些没文档但系统DLL使用的函数。

主要的Windows图形编程API就是GDI,这些API与设备无关,编写出来的程序可在不同的设备上运行。哪GDI怎样实现设备无关的呢?为了与图形设备驱动程序交互,windows图形系统采用了了称之为设备上下文的内部数据结构,是用指针链接在一起的结构和对象组成的网状结构。设备上下文有两个重要的作用,最主要的用途在于提供图形设备逻辑,使的设备驱动程序以上的事物,包括图形引挚、win32客户端以及用户应用程序都独立于设备。另一个用途是存储常用的绘图属性,比如前景色,画笔、刷子......,这样不同的绘图调用就不需要重复这些设置。Win32 GDI的客户端向用户应用程序屏蔽了真正的设备上下文,应用只得到了设备上下文的句柄,GDI在创建设备上下文时返回句柄,然后将句柄反馈给GDI,以查询新的绘图操作。

 

// 通过使用指定的名字为一个设备创建设备上下文环境
/*

CreateDC(LPCTSTR pszDriver,只能是"DISPLAY"、NULL、"WINSPOOL"            
           LPCTSTR pszDevice,可以是EnumDisplayDevices返回的显示设备名,也可是打印名(如.//DISPLAY1)或NULL
           LPCTSTR pszOutput,用于可以接收打印作业的端口名,win32 API使用新的函数调用StartDoc传递端口名,因此必须为NULL
           CONST DEVMODE *pdvmInit  指向DEVMODE结构的指针,DocumentProperties函数检索指定设备获取已填充的结构,如果设备驱动程序使用用户指定的缺省初始化值。则lplnitData参数必须为Null
         );  
*/
  HDC hdc 
=  CreateDC(_T( " DISPLAY " ), NULL, NULL, NULL); // 整个屏幕的设备上下文句柄
  MoveToEx(hdc, 0 , 0 ,NULL);
  LineTo(hdc,
100 , 100 );    // 绘制一条直线
  DeleteDC(hdc);

  

// 获取指定窗口客户区设备上下文句柄
/*

GetDC(HWND hWnd);
*/

   hdc 
=  ::GetDC( this -> m_hWnd);
   MoveToEx(hdc,
0 , 0 ,NULL);
   LineTo(hdc,
100 , 100 );
   ::ReleaseDC(
this -> m_hWnd,hdc);

 

 

// 获取指定窗口设备上下文件句柄
/*

BeginPaint(HWND hWnd,//窗口句柄
           CONST PAINTSTRUCT *lpPaint  //获取显示参数
          )

PAINTSTRUCT结构定义
typedef struct tagPAINTSTRUCT { 
 HDC hdc; 
 BOOL fErase; 
 RECT rcPaint; 
 BOOL fRestore; 
 BOOL fIncUpdate; 
 BYTE rgbReserved[32]; 
} PAINTSTRUCT, *PPAINTSTRUCT
*/

  PAINTSTRUCT ps;
  hdc 
=  ::BeginPaint( this -> m_hWnd,  & ps);
  MoveToEx(hdc,
200 , 200 ,NULL);
  LineTo(hdc,
1300 , 1300 );
  ::EndPaint(
this -> m_hWnd,  & ps);

 

转自:http://www.cnblogs.com/sxysq/archive/2009/01/28/1381251.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值