background image

要关心的就是在客户区如何把自己的东西绘制好

.

     正如上面所提到的,我们可以自由绘制的区域是"客户区".除客户区以外的任何区域都属
于非客户区

.任何时候我们想重新绘制客户区的话都可以通过发送 WM_PAINT 消息来实现.

     GetClientRect()
     这个函数用于得到客户区的大小,并把它保存到一个矩形里面.
     GetWindowRect()
     这个函数用于得到整个窗口的大小,并把结果村到一个矩形里面.
     以上两个函数的具体定义请参阅 MSDN.
     AdjustWindowRect()  &  AdjustWindowRectEx()
     这两个函数用于让客户区适应窗口的大小,使用哪个取决于你创建窗口时使用的

:CreateWindow()还是 CreateWindowEx()

   
设备环境

:

    

Windows  

可以向多种设备上绘制图形

,比如显示器,打印机等.这是通过使用设备环境来

实现的

.设备环境是对具体设备的抽象.设备环境为我们屏蔽了诸多

硬件

的不同

,让我们以同

一种方式向所有的设备上绘制图形

.项具体设备上转化的工作就交给了设备环境. 这就是所

谓的设备无关性

.

    当然,设备无关性是有代价的.使用设备环境要比直接跟硬件交互慢得多,因为绘制命令要
经过好几层才能到达所要求的硬件

.这个问题解决的方案就是 DirectX,它提供了一种更为底

层的操作硬件的方式

(DirectX 直接跟设备

驱动

序交互

).

     下面是有关设备环境的函数:
      GetDC()  这个函数为特定的窗口向系统"借"设备环境,大家记清楚了,是借,要还的!
      ReleaseDC() 这个函数是将设备环境还给系统.
      以上函数的具体定义请参阅 MSDN.
      
      难道所有的设备环境都必须跟窗口相关吗?答案是否定的,内存设备环境将是这个问题
的最好的例子

:

      内存设备环境:本质上就是一块内存,但你可以象是对待设备一样对待这块内存.大家可
能会问这有什么用处呢

?这当然有用处,大多数游戏都是使用双缓冲以消除闪烁,为显示器创

建一块内存设备环境就能消除闪烁

.在以后的学习中我们会逐步介绍.

      相关函数: 
      CreateCompatibleDC()  创建内存环境,实质上就是申请一块内存
      DeleteDC()            释放内存
      对于这块刚刚申请的内存环境里面有什么呢?如果你非要问个究竟的话那我只能告诉你:
里面只有一个

1*1 的单色位图.1*1 单色位图有什么用处呢?答案是为了内存设备环境的存

,因为空的设备环境是没有办法存活的. 

GDI 对象
      一提到对象大家马上就想到了 OO,但是这些 GDI 对象跟现在的面向对象里面的对象
是有区别的,当然也有相同的地方。我
们是通过句柄来操作对象的。
      有五种 GDI 对象是需要我们学习的,他们分别是:
HBITMAP,HBRUSH,HPEN,HFONT,HRGN,以下就是对他们的详细介绍:
      .HBITMAP 位图对象  它是由一个二维的图像组成的,在 Windows 中,它通常是利用
一个位图创建的。