CPen *pOldPen=pDC->SelectObject(&Pen);和CPen *pOldPen=&Pen有什么区别,该如何处理

CPen *pOldPen=pDC->SelectObject(&Pen);和CPen *pOldPen=&Pen有什么区别

CDC *DC =GDC();
CPen Pen;
Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=pDC->SelectObject(&Pen);

问题如下:

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

CPen *pOldPen=&Pen;

有什么区别 ,为什么不直接用 CPen *pOldPen=&Pen;

------解决方案--------------------
CPen *pOldPen=pDC->SelectObject(&Pen);
SelectObject返回的是前面正在使用的Pen,所以叫oldpen。也就是说SelectObject用参数Pen替换了原来使用的pen,替换后把原来使用的pen返回备份,当新的pen不再使用后再用SelectObject替换回来。
------解决方案--------------------
CPen *pOldPen=pDC->SelectObject(&Pen);//把画笔(Pen)与DC关联,并返回原来与DC关联的画笔。
所以pDC->SelectObject(&Pen)返回的并不是&Pen,而是原来与之关联的画笔。
------解决方案--------------------
SelectObject(&pen);返回先前的CPen类对象的指针
A pointer to the object being replaced. This is a pointer to an object of one of the classes derived from CGdiObject, such as CPen, depending on which version of the function is used. The return value is NULL if there is an error. This function may return a pointer to a temporary object. This temporary object is only valid during the processing of one Windows message. For more information, see CGdiObject::FromHandle.
------解决方案--------------------
2楼说的准确:
CPen *pOldPen=pDC->SelectObject(&Pen);//把画笔(Pen)与DC关联,并返回原来与DC关联的画笔。
而CPen *pOldPen=&Pen; 只是取Pen,功能完全不同。
------解决方案--------------------
你没看懂程序的目的啦
看懂了就不会有这样的疑问了

------解决方案--------------------
系统中总会有一个画笔
当你选入新笔的时候会把老笔返回
用完后你要把老笔回复
这样别的程序会继续使用
否则会造成混乱
------解决方案--------------------
CPen *pOldPen=pDC->SelectObject(&Pen);
是把当前设备描述表使用的pen返回给你,并设置你传入的pen.