概述
设备环境类
(1) CPaintDC
CPaintDC类的构造函数会自动调用BeginPaint,而它的析构函数则会自动调用EndPaint。
(2) CClientDC 和CWindowDC
lientDC构造函数分别调用GetWindowDC和GetDC,但它们的析构函数 都是调用ReleaseDC函数。
(3) CMetaFileDC
CMetaFileDC封装了在一个Windows图元文件中绘图的方法。
坐标映射
为了能保证打印的结果不受设备的影响,Windows定义了一些映射模式,这些映射模式决
定了设备坐标和逻辑坐标之间的关系。它们是:
MM_TEXT 每个逻辑单位等于一个设备像素,x向右为正,y向下为正
MM_HIENGLISH ,x向右为正,y向上为正
MM_HIMETRIC ,x向右为正,y向上为正
MM_ANISOTROPIC x,y可变比例
MM_ISOTROPIC x,y等比例
MM_LOENGLISH ,x向右为正,y向上为正
MM_LOMETRIC ,x向右为正,y向上为正
MM_TWIPS 每个逻辑单位为一个点的1/20(一个点是1/72 英寸),
x向右为正,y向上为正。
概述
在MM_ISOTROPIC映射模式下,纵横比总是1:1,换句话说,无论比例因子如何变化,圆总是圆的;但在MM_ANISOTROPIC映射模式下,x和y的比例因子可以独立地变化,即圆可以被拉扁成椭圆形状。
将一个椭圆绘制在视窗中央,且当视图的大小发生改变时,椭圆的形状也会随之改变:
void CMyView::OnDraw(CDC* pDC)
{ CRect rectClient;
GetClientRect(rectClient); // 获得当前窗口的客户区大小
pDC->SetMapMode(MM_ANISOTROPIC);// 设置MM_ANISOTROPIC映射模式
pDC->SetWindowExt(1000,1000); // 设置窗口范围
pDC->SetViewportExt(,-);// 设置视口范围
pDC->(,);// 设置视口原点
pDC->Ellipse(CRect(-500,-500,500,500));
}
图形设备接口
1. 使用GDI对象
在选择GDI对象进行绘图时,往往遵循着下列的步骤:
(1) 在堆栈中定义一个GDI对象(如CPen、CBrush对象),然后用相应的函数(如CreatePen、 CreateSolidBrush)创建此GDI对象。
概述
(2) 将构造的GDI对象选入当前设备环境中,但不要忘记将原来的GDI对象保存起来。
(3) 绘图结束后,恢复当前设备环境中原来的GDI对象。
(4) 由于GDI对象是在堆栈中创建中,当程序结束后,框架会自动删除程序创建的GDI对象。
具体操作可像下面的代码过程:
void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // 定义一个画笔变量
( PS_SOLID, 2, RGB(0,0,0)); // 创建画笔
// 将此画笔选入当前设备环境并保存原来的画笔
CPen* pOldPen = pDC->SelectObject( &penBlack );
// 用此画笔绘图
pDC->MoveTo(...);
pDC->o(...);
pDC->SelectObject( pOldPen ); // 恢复设备环境中原来的画笔
}
2. 库存的GDI对象
Windows包含了一些库存的可以利用的GDI对象。CDC的成员函数SelectStockObject可以把一个库存对象选入当前设备环境中,并返回原先被选中的对象指针,同时使原先被选中的对象从设备环境中分离出来。如下面的代码:
概述
void CMyView::OnDraw( CDC* pDC )
{
CPen newPen( PS_SOLID, 2, RGB(0,0,0) ) )
pDC->SelectObject( &newPen );
pDC->MoveTo(...);
pDC->o(...);
pDC->
第08章绘图字体和位图 来自淘豆网www.taodocs.com转载请标明出处.