Windows API一日一练(29)SelectObject和DeleteObject函数

转载 2007年09月27日 16:08:00
Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图时,这时Windows就会在内存里分配一块内存空间,用来保存位图的数据。当你创建字体时,也会分配一块内存空间保存字体。如果程序只是分配,而不去删除,就会造成内存使用越来越多,最后导到Windows这幢大楼倒下来。如果你忘记删除它,就造成了内存泄漏。因此,当你创建显示设备资源时,一定要记得删除它们啊,否则运行你的程序越长,就导致系统不稳定。记得使用DeleteObject函数去删除它们,把占用的内存释放回去给系统。
 
函数SelectObjectDeleteObject声明如下:
 
WINGDIAPI HGDIOBJ WINAPI SelectObject(__in HDC hdc, __in HGDIOBJ h);
WINGDIAPI BOOL WINAPI DeleteObject( __in HGDIOBJ ho);
hDC是当前设备的句柄。
hho是设备对象,其实它就是内存的地址
 
调用这个函数的例子如下:
#001 //
#002 //界面显示输出.
#003 //
#004 //蔡军生 2007/09/01 QQ:9073204 深圳
#005 //
#006 void CCaiWinMsg::OnDraw(HDC hDC)
#007 {
#008  //
#009  std::wstring strShow(_T("C++窗口类的实现,2007-09-04"));
#010  
#011  //设置输出字符串的颜色.
#012  COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));
#013 
#014  RECT rcText;   
#015  rcText.left = 10;
#016  rcText.top = 10;
#017  rcText.right = 300;
#018  rcText.bottom = 80;
#019 
#020  //创建黑色的画刷,
#021  HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
#022 
#023  //用黑色的画刷填充四边形的颜色.
#024  FillRect(hDC,&rcText,hbrush);
#025 
#026  //删除画刷.
#027  DeleteObject(hbrush);
#028 
#029 
#030  rcText.left = 10;
#031  rcText.top = 10;
#032  rcText.right = 300;
#033  rcText.bottom = 40;
#034 
#035  //显示字符串在四边形的中间位置.
#036  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#037         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#038 
#039 
#040  rcText.left = 10;
#041  rcText.top = 40;
#042  rcText.right = 300;
#043  rcText.bottom = 80;
#044  //设置透明背景
#045  int nOldMode = SetBkMode(hDC,TRANSPARENT);
#046 
#047  //设置新字体.
#048  HGDIOBJ hOldFont = SelectObject(hDC,GetFont());
#049 
#050  //显示字符串在四边形的中间位置.
#051  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#052         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#053 
#054  //恢复原来的字体.
#055  HGDIOBJ hFont = SelectObject(hDC,hOldFont);
#056  DeleteObject(hFont);
#057 
#058  //恢复原来的模式.
#059  SetBkMode(hDC,nOldMode);
#060 
#061  //恢复原来的颜色.
#062  SetTextColor(hDC,crOld);
#063 }
  

Windows API一日一练(29)SelectObject和DeleteObject函数

Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图...
  • hejishan
  • hejishan
  • 2007年12月18日 06:29
  • 164

Windows API一日一练(1)第一个应用程序

要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们。现在就来编写一个最简单的...
  • caimouse
  • caimouse
  • 2007年07月02日 14:47
  • 25708

Windows API一日一练(29)SelectObject和DeleteObject函数

Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位图...
  • laogaoAV
  • laogaoAV
  • 2013年11月26日 15:00
  • 618

SelectObject和DeleteObject 函数

   Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一...
  • cobay
  • cobay
  • 2009年02月23日 10:12
  • 4937

(29)SelectObject和DeleteObject函数

 Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject函数,比如上面介绍的字体设置,就会用到这个函数。当你创建一个位...
  • yfqvip
  • yfqvip
  • 2008年12月09日 08:55
  • 697

C#调用win32API画图函数示例

SelectObject和DeleteObject 函数 Windows显示设备的属性,共有下面几种:位图、画刷、字体、画笔、区域。如果要设置它们到当前设备里,就需要使用SelectObject...
  • jiangxinyu
  • jiangxinyu
  • 2012年10月22日 14:29
  • 6778

SelectObject和DeleteObject函数

CDC::SelectObject         CPen*   SelectObject(   CPen*   pPen   );         CBrush*   SelectObject( ...
  • dadalan
  • dadalan
  • 2009年03月21日 21:35
  • 1082

Windows API一日一练

Windows API一日一练 http://hi.baidu.com/stormsxf/blog/item/2602b31361367b015baf5377.html 
  • carl2380
  • carl2380
  • 2010年01月11日 23:50
  • 249

Windows API一日一练(56)SetEndOfFile和GetFileSizeEx函数

有一天,我正在开发BT软件,它有这样的一个功能,就是先把文件的大小分配好,然后再慢慢地往里面对应的位置写入相应的数据。这样的好处,就是可以先把磁盘空间占用起来,以便后面的下载顺利进行。要实现这个功能,...
  • caimouse
  • caimouse
  • 2007年10月23日 20:38
  • 13274

windows api 每日一练(5)基本内存操作

  1.CopyMemory 将一块内存的数据从一个位置复制到另一个位置 http://baike.baidu.com/view/919894.htm?fr=ala0 2.ZeroMemory 用...
  • clingingboy
  • clingingboy
  • 2009年11月20日 15:11
  • 576
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows API一日一练(29)SelectObject和DeleteObject函数
举报原因:
原因补充:

(最多只允许输入30个字)