您的位置:首页 > 理论基础 > 数据结构算法

GDI 图形设备接口

2010-11-03 10:29 288 查看
DC-设备环境:一种WINDOWS的数据结构,包括了与一个设备(如显示器或打印机)的绘制属性相关的信息。

    所有的绘制操作通过一个设备环境对象来进行。

DC基本构成:

1.CDC类 封装了所有图形输出函数,包括矢量、光栅、文本输出。

2.CClientDC类 客户区设备环境,调用时使用GetDC(),释放时使用ReleaseDC().

3.CPaintDC类 响应窗口重绘消息(WM_PAINT)时的绘画输出。在构造是调用BeginPaint(),释放时调用EndPaint();

4.CMetaFileDC类 专门用于图元文件的绘制。图元文件记录了一组GDI命令,可通过这一组GDI命令重建图形输出。

 

获得DC的方法:

1.在处理WM_PAINT消息时,使用BeginPaint和EndPaint,函数定义:

CDC* BeginPaint(LPPAINTSTRUCT lpPaint);

void EndPaint(LPPAINTSTRUCT lpPaint);

lpPaint是指向PAINTSTRUCT结构的指针。

使用BeginPaint获得设备句柄,只能在返回的区域内绘图。

2.处理非WM_PAINT消息时,用GetDC()和ReleaseDC()函数

可以在整个显示区域上绘图,同样使用GetDC()和ReleaseDC()不会使显示区域中的无效区域变有效。

3.Windows程序还可以取得适用于整个窗口(而不局限于窗口显示区域)的设备环境句柄:

CDC* GetWindowDC();

使用它,必须拦截WM_NCPAINT消息,Windows使用该消息在窗口的非显示区域上绘图。

4.取得设备句柄的另一个更通用的函数是CreateDC:

BOOL CreateDC(LPCTSTR lpszDriverName,LPCTSTR lpszDeviceName,

     LPCTSTR lpszOutput,const void * lpInitData);

为专门设备创建设备场景。

释放掉:BOOL DeleteDC(HDC hdc);

eg.通过调用下面函数获得这个屏幕的设备环境句柄

hdc = CreateDC(Text("DISPLAY"),NULL,NULL,NULL);

5.--使用CreateIC也可取得DC句柄

hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);

6.使用位图时,取得一个内存设备环境:

BOOL CreateCompatibleDC(CDC* pDC);

 

DC属性

在建立一个DC之后,使用ReleaseDC或EndPaint后,对新的设备环境信息的改变会丢失,要使其不变可在登陆窗口类别时:

wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;

知道窗口被删除,才会丢失。

有时想改变DC属性,然后又想恢复原来的DC。可以使用下面函数保存DC状态:

int SavaDc();

绘图完成后,回到修改属性前存在的设备环境,使用下面函数:

BOOL RestoreDC(int nSavedDC);

图形映射模式

Windows定义了8中映射方式。映射方式定义了图像模式的 逻辑单位和增加方向--MM_TEXT/MM_LOMETRIC/MM_HIMETRIC/...

可以使用下面的方式设定映射的方式:

int SetMapMode(int nMapMode);

获得当前映射方式:

int GetMapMode(void) const;

 

--------------几乎所有的绘图函数中,坐标值都是使用逻辑单位---------厘米、英寸等。Windows必须将逻辑单位转换为设备单位即像素

 

Windows默认映射方式为MM_TEXT。这种映射方式下,逻辑单位与实际单位相同,这样可以直接以像素为单位进行操作。

 

Windows为实现设备点与逻辑点之间的转换提供了两个函数。

设备点转换为逻辑点:

void DPtoLP(LPPOINT lpPoints,int nCount = 1) const;

逻辑点转换为设备点:

void LPtoDP(LPPOINT lpPoints,int nCount = 1) const;

 

eg.

CRect rect;

GetClientRect(&rect);

pDC->DPtoLP((LPPOINT) &rect,2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息