初学 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:

猜你喜欢

转载自blog.csdn.net/weixin_42452990/article/details/82585044
今日推荐