由于我是新来的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()
两次帮助吗? 如果固体刷对象用于创建灰色圆圈,如何创建对象笔的帮助,如果是无论如何销毁创建画笔对象? 究竟怎样完成这件事情的工作?
SelectObject函数用于选择五种不同类型的对象转换为直流
- 钢笔
- 刷
- 字形
- 位图和
- 区域
该文件指出, 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);
DC对象有电流刷,当前笔,当前字体等。即,特定类型的当前对象。 所以,你可以选择笔和刷同时,但你不能选择两笔在一起。 SelectObject
内部看到手柄的类型。
另外, SelectObject
将返回之前的电流相同的类型,这是未选择与选择您所提供的手柄的对象。 你应该保存它,当你完成恢复。