如何GDI对象选择和选择对象的功能被破坏(How are GDI objects selected

2019-07-30 17:25发布

由于我是新来的Visual C ++,这可能是与选择GDI对象一个非常基本的问题。

下面的代码片段绘制一个无边框浅灰色圆圈。

cPen pen(PS_NULL, 0, (RGB(0,0,0)));
dc.SelectObject(& pen);
CBrush brush (RGB (192,192,192));
dc.SelectObject (&brush);
dc.Ellipse(0,0, 100,100);

所有我从代码片段明白的是首先是创建笔的对象,它是一个NULL笔这将使边界消失,刷然后创建灰色的圆,而是如何做dc如果已经使用刷子使用的笔? 这是一个有点混乱。

如何使用dc.SelectObject()两次帮助吗? 如果固体刷对象用于创建灰色圆圈,如何创建对象笔的帮助,如果是无论如何销毁创建画笔对象? 究竟怎样完成这件事情的工作?

Answer 1:

SelectObject函数用于选择五种不同类型的对象转换为直流

  1. 钢笔
  2. 字形
  3. 位图和
  4. 区域

该文件指出, The newly selected object replaces the previous object of the same type 。 因此,这意味着您可以选择画笔和画刷,没有任何问题,但你不能两次选择笔。

而且为了避免资源泄漏,你需要选择不管你刚才选择的旧笔/刷

CPen pen(PS_NULL, 0, (RGB(0,0,0)));
CPen *oldPen = dc.SelectObject(& pen);
CBrush brush (RGB (192,192,192));
CBrush *oldBrush = dc.SelectObject (&brush);
dc.Ellipse(0,0, 100,100);

dc.SelectObject(oldPen);
dc.SelectObject(oldBrush);


Answer 2:

DC对象有电流刷,当前笔,当前字体等。即,特定类型的当前对象。 所以,你可以选择笔和刷同时,但你不能选择两笔在一起。 SelectObject内部看到手柄的类型。

另外, SelectObject将返回之前的电流相同的类型,这是未选择与选择您所提供的手柄的对象。 你应该保存它,当你完成恢复。



文章来源: How are GDI objects selected and destroyed by SelectObject function