有人可以向我解释CDC :: SelectObject吗?

时间:2012-10-17 14:12:25

标签: mfc

http://msdn.microsoft.com/en-us/library/sa8ahz7h(v=vs.80).aspx

//Border
        CPen pen;
        pen.CreatePen(PS_DASH, 20, RGB(0, 0, 0));
        CPen* penOld = dc.SelectObject(&pen);

        dc.Rectangle(rect);
        dc.FillRect(rect, &brush);

此代码如何工作?它绘制一个矩形,然后围绕它绘制边框。我只是无法理解它。

2 个答案:

答案 0 :(得分:2)

当您要求设备上下文绘制矩形时,它将使用当前Pen

您可以使用Pen方法设置当前BrushSelectObject(),裁剪区域等。你基本上是在说“从现在开始使用这支笔”。

SelectObject()也会返回之前使用过的项目,这样它就不会丢失并泄漏内存,如果需要,可以稍后再将其恢复。这就是为什么penOld被保存到代码中的变量的原因。它可能会在以后再次被选中。

CPen pen;                                  //declare a new Pen object
pen.CreatePen(PS_DASH, 20, RGB(0, 0, 0));  //Create the GDI Pen, dashed, 20 pixels wide, black.
CPen* penOld = dc.SelectObject(&pen);      //Tell the DC to use this pen from now on.

dc.Rectangle(rect);                        //Draw a rectangle (using the current pen)
dc.FillRect(rect, &brush);                 //Fill a rectangle (using the current brush)

答案 1 :(得分:0)

创建一支笔,将其选入DC,然后指示DC使用笔(宽度为20像素)在指定坐标处绘制一个矩形。然后用刷子填充那个矩形的内部。