关于SelectObject()本人菜鸟一个,有一问题琢磨了很久不知道怎么回事,希望高人解答C/C++ codevoid Cexampl
关于SelectObject();
本人菜鸟一个,有一问题琢磨了很久不知道怎么回事,希望高人解答
C/C++ codevoid CexampleView::OnDraw(CDC* pDC){ CexampleDoc* pDoc = GetDocument();//自动生成的 ASSERT_VALID(pDoc);//自动生成的 //TODO CPen * OldPen, * NewPen; NewPen = new CPen; NewPen->CreatePen(PS_DASHDOT,1,RGB(0,0,255)); OldPen = pDC->SelectObject(NewPen);//指定画笔选入设备上下文 pDC -> MoveTo(100,100); pDC -> LineTo(300,100); pDC -> SelectObject(OldPen);//将默认画笔选入设备上下文 delete NewPen;}
其中解释的是选入设备上下文,但是这个设备上下文我就不明白什么意思,还有这个OldPen不是自己定义的吗,怎么成了默认了???
[解决办法]pDC->SelectObject(NewPen);//指定画笔选入设备上下文
这句返回的是系统默认的画笔,
先保存再恢复
[解决办法]其中解释的是选入设备上下文,但是这个设备上下文我就不明白什么意思,还有这个OldPen不是自己定义的吗,怎么成了默认了???
///////////////////////
设备上下文(Device Context(DC))包含了硬件相关的属性描述信息,所有绘制调用都通过设备上下文对象(句柄)进行。
至于OldPen是自定义变量,它存储的是SelectObject返回值,此返回值是所选新画笔之前的画笔,打个比方:一个抽屉只能放一支笔,现在想要把一支笔放进此抽屉里,可是抽屉里已经有一支笔了,为了把笔放进抽屉,得先把之前的笔从抽屉里拿出来并保存到另一个地方,在这里的OldPen里存的就是原来的笔。打此比方帮助理解,可能有些不当。
[解决办法]1.可以先看看MSDN的解释
2.SelectObject()返回当前的object然后再把新的newObject选入
OldPen = pDC->SelectObject(NewPen);//指定画笔选入设备上下文
=========================================================
3.oldPen是自己定义的指针,但是它的值来自于SelectObject()的返回值,也就是系统当前的默认值
[解决办法]设备上下文,字面来看,Device Context(DC)就是这个意思,翻译为“设备中介”应该更容易理解。它的作用是作为计算机设备和程序之间的中介,比如显示器和程序之间,或者打印机和程序之间。在对这些设备操作的时候,是需要通过这个中介操作的(与句柄相似)。
至于OldPen为何是默认画笔,查阅MSDN可知CDC::SelectObject的返回值为:
A pointer to the object [color=#FF0000]being replaced. [/color]
[解决办法]OldPen = pDC->SelectObject(NewPen);
返回的就是你原来的Pen,你去看下SelectObject这个函数