简单问题请教:关于newPen的创建 首先需要创建一个合法的对象,不同的对象创建方法不同。然后需要将该GUI对象选入DC中,同时保存DC中原来的GUI对象。如果选入一个非法的对象将会引起异常。在使用完后应该恢复原来的对象,这一点特别重要,如果保存一个临时对象在DC中,而在临时对象被销毁后可能引起异常。有一点必须注意,每一个对象在重新创建前必须销毁,下面的代码演示了这一种安全的使用方法: 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 OnDraw(CDC* pDC){ CPen pen1,pen2; pen1.CreatePen(PS_SOLID,2,RGB(128,128,128));//创建对象 pen2.CreatePen(PS_SOLID,2,RGB(128,128,0));//创建对象 CPen* pPenOld=(CPen*)pDC->SelectObject(&pen1);//选择对象进DC drawWithPen1... (CPen*)pDC->SelectObject(&pen2);//选择对象进DC drawWithPen2... pen1.DeleteObject();//再次创建前先销毁 pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));//再次创建对象 (CPen*)pDC->SelectObject(&pen1);//选择对象进DC drawWithPen1... pDC->SelectObject(pOldPen);//恢复} concrete sample://CPen CPen newPen; newPen.CreatePen(PS_GEOMETRIC,2,RGB(128,128,128)); CPen* oldpen; oldpen=(CPen*)pDC->SelectObject(&newPen);//选择对象进行DC pDC->MoveTo(10,10); pDC->LineTo(110,10); pDC->SelectObject(oldpen);//恢复 问题代码如下m_LineColor=RGB(0,0,0);m_LineStyle=PS_SOLID;m_LineWidth=1; CPen newPen(m_LineStyle,m_LineWidth,m_LineColor); CPen* pOldPen=pDC->SelectObject(&newPen); pDC->MoveTo(10,10);pDC->LineTo(110,10);pDC->SelectObject(pOldPen); 编译没问题,执行时非法操作,何故? pDC为NULL?这段代码在什么地方? 我帮你看了一下,好象没有什么问题,你把我上面的代码copy 下来看看 代码在自己建的CImg类的DrawImg(CDC *pDC)函数里,从CExeciseView的OnDraw(CDC *pDC)调用的: m_spectralimage.DrawImg(pDC); 谢谢,好像确实不是这一段的问题,不好意思。还想问一下:CPen newPen; newPen.CreatePen(PS_GEOMETRIC,2,RGB(128,128,128));和CPen newPen(PS_GEOMETRIC,2,RGB(128,128,128));有何区别? 打包的问题!!! 请教,关于动态创建WMPlayer控件的问题 如何用SQL语句写入到Oracle的 NUMBER字段中? 急问opengl问题,在线等!!! [文件打包]有什么好的代码?实现读写一个打包文件? 我想学习如何运用vc++6.0,有什么好的教材吗? 接受教育、散尽家财!! 为什么我在 WATCH窗口里看不到值 长方形使用glTranslatef可以实现放大与缩小//而换成圆柱就不行了,要使用glScaled.什么原因? VS2010状态栏 如果想用vc操作access数据库,有几种方法,各有什么优缺点? 如何添加一个IE控件的事件???????
{
CPen pen1,pen2;
pen1.CreatePen(PS_SOLID,2,RGB(128,128,128));//创建对象
pen2.CreatePen(PS_SOLID,2,RGB(128,128,0));//创建对象
CPen* pPenOld=(CPen*)pDC->SelectObject(&pen1);//选择对象进DC
drawWithPen1...
(CPen*)pDC->SelectObject(&pen2);//选择对象进DC
drawWithPen2...
pen1.DeleteObject();//再次创建前先销毁
pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));//再次创建对象
(CPen*)pDC->SelectObject(&pen1);//选择对象进DC
drawWithPen1...
pDC->SelectObject(pOldPen);//恢复
}
//CPen
CPen newPen;
newPen.CreatePen(PS_GEOMETRIC,2,RGB(128,128,128));
CPen* oldpen;
oldpen=(CPen*)pDC->SelectObject(&newPen);//选择对象进行DC
pDC->MoveTo(10,10);
pDC->LineTo(110,10);
pDC->SelectObject(oldpen);//恢复
m_LineColor=RGB(0,0,0);
m_LineStyle=PS_SOLID;
m_LineWidth=1;
CPen newPen(m_LineStyle,m_LineWidth,m_LineColor);
CPen* pOldPen=pDC->SelectObject(&newPen);
pDC->MoveTo(10,10);
pDC->LineTo(110,10);
pDC->SelectObject(pOldPen); 编译没问题,执行时非法操作,何故?
这段代码在什么地方?
从CExeciseView的OnDraw(CDC *pDC)调用的: m_spectralimage.DrawImg(pDC);
还想问一下:CPen newPen;
newPen.CreatePen(PS_GEOMETRIC,2,RGB(128,128,128));
和
CPen newPen(PS_GEOMETRIC,2,RGB(128,128,128));有何区别?