首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SelectObject函数如何选择和销毁GDI对象

SelectObject函数如何选择和销毁GDI对象
EN

Stack Overflow用户
提问于 2012-07-31 14:45:31
回答 2查看 3.4K关注 0票数 1

因为我是Visual GDI的新手,所以这可能是一个与选择C++对象相关的非常基本的问题。

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

代码语言:javascript
代码运行次数:0
运行
复制
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);

我从代码片段中了解到的是,首先创建了一个笔的对象,它是一个空的笔,它会使边框消失,然后画笔会创建一个灰色的圆圈,但是如果dc已经在使用画笔,它如何使用笔呢?这有点令人困惑。

使用两次dc.SelectObject()有什么帮助吗?如果实体画笔对象被用来创建一个灰色的圆,那么创建画笔对象有什么帮助呢,如果它在创建画笔对象时被销毁了?这东西到底是怎么工作的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-31 14:54:20

SelectObject函数用于将五种不同类型的对象选择到DC中

  1. Pen
  2. Brush
  3. Font
  4. Bitmap和
  5. Region

文档说明了The newly selected object replaces the previous object of the same type。所以这意味着你可以选择钢笔和画笔没有任何问题,但你不能选择钢笔两次。

此外,为了避免资源泄漏,您需要选择旧的钢笔/画笔,无论您之前选择了什么

代码语言:javascript
代码运行次数:0
运行
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2012-07-31 14:54:30

DC对象有当前画笔、当前笔、当前字体等,即特定类型的当前对象。因此,您可以同时选择钢笔和画笔,但不能同时选择两支钢笔。SelectObject在内部看到句柄的类型。

此外,SelectObject将返回相同类型的上一个当前对象,该对象在选择您提供的句柄时处于未选中状态。您应该保存它,并在完成后恢复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11734553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档