天天看点

初学 win32 GDI绘图

mfc封装设备上下文类(CDC),及其派生类CPaintDC,CClientDc,CWindowDC,CMetaFileDC

客户区绘制:CPaintDC(OnPaint()处理程序使用),CClientDC(除OnPaint外的其他处理程序)

窗口内任意区域绘制:CWindowDC

GDI元文件绘制:CMetaFileDC

设备上下文mfc类(CDC),封装了所有绘图方法,支持各种类型的设备绘制

:该类有两个上下文句柄:m_hDC:输出句柄,m_hAttribDC:属性调用句柄

设备上下文(DC)是一种windows数据结构,包含某个设备的绘制属性,一般来说,绘制调用都是使用设备上下文对象(设备上下文(操作类)类对象)

设备上下文类型:

1.显示设备上下文

2.打印机设备上下文

3.内存设备上下文

4.信息设备上下文

图形对象(GDI对象):

windows提供一些预定义的GDI对象(库存对象),例如:BLACK_BRUSH(黑色画刷),DKGRAY_BRUSH(灰色画刷)等,使用调用CreateStockObject(),只是取库存对象的句柄,没有创建。

图形对象的选择和删除:

1.创建图形对象

2.调用selectObject替换原对象对象

3.进行相关绘制工作

4.绘制结束恢复默认图像对象(selectObject),且释放创建的图形对象deleteObject()

(注意:选择调色板时,使用selectPalette(),非SelectObject())

设备上下文的保存和恢复:

通常用来保存绘制属性(设备上下文的属性),便于再次使用;

SaveDC()进行属性保存·,RestoreDC()进行属性恢复

可以保存任意次数属性,相应的属性使用时按照先存后取进行调用

windows的映射模式:

对于所有映射模式,Windows都用下面两个公式将窗口坐标转换成视口坐标:

xViewport = (xWindow - xWinOrg) * (xViewExt / xWinExt) + xViewOrg

yViewport = (yWindow - yWinOrg) * (yViewExt / yWinExt) + yViewOrg

其中,(xWindow,yWindows)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备点。如果设备坐标是客户区域坐标或全窗口坐标,则Windows在画一个对象前,还必须将这些坐标转换成屏幕坐标。

这两个公式使用了分别指定窗口和视口原点的点:(xWinOrg,yWinOrg)是逻辑坐标的窗口原点;(xViewOrg,yViewOrg)是设备坐标的视口原点。在缺省的设备环境中,这两个点均设置为(0,0),但它们可以改变。此公式意味着,逻辑点(xWinOrg,yWinOrg)总被映射为设备点(xViewOrg,yViewOrg)。

Windows还能将视口(设备)坐标转换为窗口(逻辑)坐标:

xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrg

yWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg

可以使用Windows提供的两个函数DPtoLP和LPtoDP在设备坐标及逻辑坐标之间互相转换。

模式:

文本映射模式:

MM_TEXT:文本映射模式,1像素1单位,在设备和逻辑坐标不存在任何缩放,可以使用CDC::SetViewportOrg(视图窗口)和CDC::SetWindowOrg(窗口)来改变视口或窗口原点;

固定比例映射模式:

MM_LOMETRIC:

MM_HIMETRIC:

MM_LOENGLISH:

MM_HIENGLISH:

MM_TWIPS:

可变比例映射模式:

MM_ISOTROPIC:

MM_ANISOTROPIC:

继续阅读