CPen* SelectObject( CPen* pPen );
CBrush* SelectObject( CBrush* pBrush );
virtual CFont* SelectObject( CFont* pFont );
CBitmap* SelectObject( CBitmap* pBitmap );
int SelectObject( CRgn* pRgn );
CGdiObject* SelectObject( CGdiObject* pObject );
函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
参数:
hdc:设备上下文环境的句柄。
hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。
位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。
画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字体:CreateFont, CreateFontIndirect。
笔:CreatePen, CreatePenIndirect。
区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。
返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;
SIMPLEREGION:区域由单个矩形组成;COMPLEXREGION:区域由多个矩形组成。NULLREGION:区域为空。
如果发生错误并且选择对象不是一个区域,那么返回值为NULL,否则返回GDI_ERROR。
注释:该函数返回先前指定类型的选择对象,一个应用程序在它使用新对象进行绘制完成之后,应该用原始的缺省的对象替换新对象。
应用程序不能同时选择一个位图到多个设备上下文环境中。
ICM:如果被选择的对象是画笔或笔,那么就执行颜色管理。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。

<span editable-title"="" data-edit-id="1080552:1080552:2" style="line-height: 1.5; font-size: 12px; float: right; display: block; margin: 10px 0px 0px; color: rgb(51, 102, 204); font-weight: normal;">编辑本段示例

HDC hdc=GetDC(hwnd);
HDC memdc=CreateCompatibleDC(hdc);
RECT rc;
BITMAP bmp;
HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//从资源加载位图
holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//这里把hbmp的位图选择到兼容DC memdc,之后这个兼容DC就拥有和
//hbmp同样大小的绘图区域,注意超出位图返回的GDI输出都是无效的.
GetObject(hbmp,sizeof(BITMAP),&bmp);//这里获取位图的大小信息,事实上也是兼容DC绘图输出的范围
SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight);
DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中间位置输出字符串
//这样以来我们就相当于把hbmp这个位图加上了文字标注,我们可以把这个增加了文字标注的位图保存起来.一个简单的图像处理基本就OK了.
SelectObject(memdc,holdbmp);//复原兼容DC数据.

DeleteDC(memdc);

CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObject( CFont* pFont ); CBitmap* SelectObject( CBitmap* pBitmap ); int SelectObject( CRgn* pRgn ); CGdiObject* SelectObject( CGdiObject* pObject ); Selects an object into the device context. 把以对象选入设备环境 谁是设备环境??? DC? 谢谢啊。

回答

在GDI中,DC(Device context)是一个非常重要的概念。 有的书中,将DC翻译为设备描述表(《Windows 程序设计 第五版》作者Charles Petzold), 也有的书将DC翻译为设备上下文。 到底什么是DC? 用现实中的例子来理解可能更容易些。 如果你喜欢画画,你得先准备了画布,画笔,颜料…… 画画的环境搭建好了,你就可以画画了。 这个画画的环境,就是DC。 在图形环境下,一切都是画出来的,所以,你要准备好一个DC,才能在屏幕上画画。——写字也是画画。 在画画的环境中,有哪些对象呢? 画布——GDI对象之一:区域 画笔——GDI对象之一:画笔 颜料盒——GDI对象之一:调色板 如果要在画笔上写字的话,写什么样的字体呢?方正字体?徐静蕾字体?——字体也是GDI对象之一。 有的画笔比较粗,专用来刷大面积背景色的,这是刷子——GDI对象之一:刷子 如果你不想画了,只想把别人画好的画,贴到你的画布上,这也是可以的。——GDI对象之一:位图。 所以,这里就有6种GDI对象可以用于DC。 现在开始画画了,你拿起了一只笔。——在Windows环境里,这叫选择了一个画笔对象:使用SelectOBject函数。当然,如果你没带笔也没关系,Windows为你准备了几只画笔,你可以这样申请系统提供的缺省画笔:hPen = GetStockObject(WHITE_PEN); 如果你画着画着,觉得手中的笔用着不爽,可以换一只啊,没关系的。——依旧是SelectObject()换笔。 当然,如果你走出了画室,别完了把你的画笔清除掉,要不画室里全是笔啊,刷子啊,太乱了。——DeleteObject()

c++ GDI 中SelectObject使用方法和注意事项相关推荐

  1. VC++的GDI+中,DrawImage方法的应用入门

    一.概述 DrawImage方法是GDI+的Graphics类显示图像的核心方法,它的重载函数16个.本文讲解和测试常用的4类: 1. 通用说明 DrawImage方法将形参image指针指向的图像拷 ...

  2. php获取表单$_files,PHP中$_FILES的使用方法及注意事项说明

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  3. 图像对象paip.Image对象出现“对象当前正在其他地方使用或者GDI+中发生一般性错误的解决...

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ paip.Image对象现出"对象以后正在其他地方用使或者GDI+中产生一般性误错的决解 作者Attilax ,   ...

  4. Image.Save()发生“GDI+ 中发生一般性错误”

    从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生"GDI+ 中发生一般性错误". public static Sy ...

  5. GDI+中发生一般性错误的解决办法 from http://www.cnblogs.com/winzheng/archive/2008/12/23/1360440.html...

    GDI+中发生一般性错误的解决办法 这个错误经常发生,代码如下:    private  static  byte[] GetBytes (Image image)         {         ...

  6. GDI+中发生一般性错误的解决办法(转帖)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误" ...

  7. GDI+中发生一般性错误 以及发布时候需要配置的文件

    mxcms在本地测试完毕.搬家到服务器上,修改测试数据新闻的时候,提示"GDI+中发生一般性错误". 找了下,发现是缩略图的原因. 解决方法:将缩略图文件夹里的文件全部删除. fi ...

  8. GDI+入门(5、在GDI+中绘制带动画效果的图片)

    五.在GDI+中绘制带动画效果的图片 private void Form2_Load(object sender, EventArgs e) { SetStyle(ControlStyles.Doub ...

  9. GDI+ 中图片的绘制

    背景 GDI+ 中使用 Graphics 类的成员函数 DrawImage 来绘制图片. 原样绘制 使用 Graphics 类的 成员函数 DrawImage 来绘制图片,当仅指定绘制起始位置时按照图 ...

最新文章

  1. BF算法优化-------KMP算法
  2. 深入掌握JMS(一):JMS基础
  3. Oracle Database 11.2.0.1(静默安装)
  4. vs2013update4 vs-mda-remote cordova真机测试ios
  5. C++ Primer笔记 容器和算法(2)
  6. java求阶乘的程序_按要求编写Java程序(阶乘)
  7. Esri Maps For Office制作漂亮的地图
  8. 您是否真的要加快Maven的编译/打包速度? 那么takari生命周期插件就是答案。
  9. freewheel现场宣讲笔试回忆篇
  10. Qt4_简单的图表编辑器
  11. xticks函数--Matplotlib
  12. (1)快速了解Redis
  13. Datalogic得利捷携最新技术与设备亮相2019两大工业展
  14. 数组转为集合的方法解析
  15. TL-WAN726N_V2_免驱版Win10开启AP网络
  16. 支持I2S数字音频接口;音频功放芯片NTP8835C
  17. matlab读取mp4视频,【Matlab系列】之视频文件读取和显示的方法
  18. 响应式网页设计的概念和应用
  19. 【SQL】窗口函数:求数据的整体百分比、整体累计值,组内累计值和组内累计百分比...
  20. android图片压缩之图片和内存基础

热门文章

  1. C语言函数,根据身高计算体重是否符合标准的实例
  2. 家具更换频率低 选购应注重环保问题
  3. ctl672笔上的两个按键_【和冠 Bamboo CTL-672/K2-F 数位板使用总结】连接|便携|绘画_摘要频道_什么值得买...
  4. JDK8 + FFMPEG + Libreoffice镜像的制作
  5. 苹果电脑拷贝文件到u盘很慢_U盘防拷贝哪家比较好?哪个做得好?
  6. 【Reference reading】用19F标记的BPA-果糖复合物在C6老鼠胶质瘤模型的19F MRI和19F MRS来优化硼中子捕获治疗(BNCT)
  7. C++虚继承和虚基类;虚函数与继承
  8. 山姆、Costco等付费会员店火爆的几大启示
  9. Android 使用百度鹰眼实现运动轨迹功能
  10. 中国 外包 2012(zz.IS2120@BG57IV3)