关于SelectObject的使用

王朝other·作者佚名  2006-01-10
宽屏版  字体: |||超大  

void CMy10View::OnDraw(CDC* pDC)

{

pDC->MoveTo (10,10);

pDC->LineTo (110,10);

CPen newPen(PS_DASHDOTDOT,10,(COLORREF) 192); //红色的笔宽度为10

CPen * pOldPen=pDC->SelectObject (&newPen);

//在将新对象选进设备环境的同时返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它。

。。。

pDC->SelectObject (pOldPen);//把原来的对象恢复

}

由于SelectObject函数返回的GDI C++对象指针具有临时性,当程序的空闲处理阶段或者控制函数返回时应用程序框架会将临时的C++对象删除,我们不能简单的把这一指针保存在类的数据成员中,而应该借助GetSafeHdc函数将它转化为Windows的句柄,以便持久的保存GDI的标识。 (不太理解)

通过句柄保存gdi对象

void CMy10View::OnDraw(CDC* pDC)

{

HPEN m_hPen; //一个指向CPen对象的指针

pDC->MoveTo (10,10);

pDC->LineTo (110,10);

CPen newPen(PS_DASHDOTDOT,10,(COLORREF) 192); //红色的笔宽度为10

CPen * pOldPen=pDC->SelectObject (&newPen); //在将新对象选进设备环境的同时返回指向前一次被选对象的指针。作用保存原来的对象,以便完成任务时恢复它。

m_hPen=(HPEN)pOldPen->GetSafeHandle ();//获得并保存原来对象的句柄

pDC->MoveTo (10,20);

pDC->LineTo (110,20);

pDC->SelectObject (CPen::FromHandle (m_hPen));//把原来的对象恢复,和例子7-2不同的是通过句柄

pDC->MoveTo (10,30);

pDC->LineTo (110,30);

}

恢复gdi对象句柄是为了以后的操作仍然使用原来的gdi对象。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有