`
freesoftman
  • 浏览: 318938 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
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+一日一练(93练).rar(已加书签)

    《Windows API 一日一练(93练)》是一份专为学习Windows操作系统编程的实践教程,涵盖了93个不同的练习题目,旨在帮助开发者深入理解并熟练掌握Windows API的使用。Windows API是Microsoft Windows操作系统的核心组件...

    windows API一日一练

    Windows API(Application Programming Interface)是Microsoft Windows操作系统提供的一系列标准函数和过程,用于开发应用程序,特别是桌面应用软件。通过学习Windows API,开发者可以深入理解Windows操作系统的...

    windows API 一日一练

    《Windows API 一日一练》是一份非常实用的学习资源,主要针对初学者,旨在通过每日实践来提升对Windows API的理解和应用能力。Windows API是微软操作系统的核心接口,它提供了丰富的函数和结构,允许程序员直接控制...

    精通windowsAPI函数接口编程实例源代码

    《精通Windows API函数接口编程实例源代码》是一个深入学习Windows API编程的重要资源,它涵盖了大量实践案例,旨在帮助开发者熟练掌握API接口的使用技巧。Windows API是微软为开发者提供的一个平台,通过它,程序员...

    Windows api函数大全

    Windows API(Application Programming Interface)是微软为开发者提供的一个庞大的函数库,它包含了各种与操作系统交互的函数,使得程序员能够创建能在Windows操作系统上运行的应用程序。API函数覆盖了从图形用户...

    Windows API函数大全

    在计算机编程领域,Windows API(应用程序接口)是微软操作系统提供给开发者的一组预先定义的函数、常量、数据类型和宏,使得程序员可以利用Windows操作系统提供的功能进行开发。Windows API函数大全是程序员的重要...

    windowsAPI.rar_Windows API 编程_Windows API编程_windows api

    在"Windows API 一日一练"中,我们可以期待一系列的练习来帮助我们逐步理解并应用这些API。这种日积月累的学习方式有助于巩固基础,逐步提高编程技能。每天的练习可能包括创建简单的窗口程序、响应用户输入、使用GDI...

    Windows API 编程及WIN32的API函数

    Windows API编程是开发Windows应用程序的核心技术,它提供了一系列的函数接口,使得程序员可以与操作系统进行交互,实现各种功能。在Windows系统中,这些接口主要由Win32 API组成,它是微软为开发者提供的一个广泛而...

    Windows API 程序设计参考大全

    通过CreateDC、SelectObject和DeleteObject等函数,开发者可以创建设备上下文,选择笔、刷和字体,然后使用DrawText、MoveToEx和LineTo等函数绘制文本、线条和图形。 文件操作是任何程序都离不开的部分。CreateFile...

    WINDOWS api 函数大全

    在Windows操作系统中,API(应用程序接口)是一组预先定义的函数、常量、结构体和其他编程元素,供开发者使用以实现各种系统级别的功能。"WINDOWS api 函数大全" 是一个全面收集了Windows API函数的资源,它对于进行...

    windows API函数大全

    Windows API(应用程序编程接口)是微软为开发者提供的一组接口函数,用于构建在Windows操作系统上的应用程序。这些函数涵盖了从基本的文件操作到复杂的图形绘制、网络通信和硬件交互等多个方面。下面将根据标题和...

    windows_API.rar_API_API 函数_API函数_windows api

    这个压缩包“windows_API.rar”包含了丰富的API函数资料,帮助开发者深入理解和使用这些函数。 API函数是Windows系统的核心组成部分,它们提供了对操作系统功能的直接访问,包括窗口管理、图形绘制、文件操作、网络...

    Windows C++ API函数大全

    《Windows C++ API函数大全》是一本专注于Windows操作系统下C++编程的重要参考资料,它涵盖了大量用于与Windows系统交互的API函数。Windows API是Microsoft Windows操作系统提供的一系列函数库,为开发者提供了控制...

    WindowsAPI 中文详解

    Windows API 提供了一系列函数来创建、显示、隐藏、移动和销毁窗口。例如,`CreateWindowEx`函数用于创建一个新的窗口,`ShowWindow`控制窗口的可见性,`MoveWindow`用于调整窗口的位置和大小,而`DestroyWindow`则...

    windows api开发详解--函数、接口、编程实例

    Windows API是微软操作系统提供的一系列函数和接口,用于开发者创建应用程序。这些API使得开发者能够访问系统资源,控制硬件,管理用户界面,以及实现各种复杂的系统功能。本压缩包中的"windows api开发详解--函数、...

    windows api (windows的函数库)

    Windows API 提供了打印支持,`CreateDC` 可以创建打印机设备上下文,`StartDoc` 和 `EndDoc` 定义打印作业,`StartPage` 和 `EndPage` 表示开始和结束一页,`TextOut` 和 `ExtTextOut` 用于在打印页面上输出文本。...

    API函数详细说明库.rar_API_Windows API函数 _windows api

    学习和掌握Windows API函数是成为Windows平台开发者的必经之路,这不仅能够帮助我们理解和控制操作系统的行为,还能使我们编写出更高效、更稳定的应用程序。通过“API函数详细说明库”,开发者可以深入理解每个函数...

    Windows API函数大全(整理精华版

    - 这一部分包含处理Windows消息的函数,如`TranslateMessage`将键盘输入转换为消息,`DispatchMessage`分发消息到相应窗口过程进行处理,以及`PostMessage`和`SendMessage`异步和同步发送消息给窗口。 3. **API之...

    vb编程Windows API 函数

    API函数提供了一种方式,使得VB程序能够执行操作系统级别的任务,这些任务通常超出了VB内置函数的能力范围。本帮助文件包含了774个Windows API函数,覆盖了从基本操作到高级功能的广泛领域。 API函数主要分为十二大...

    windows c++ API函数

    首先,Windows API(应用程序接口)是一组预先定义的函数,由Microsoft提供,供程序员在编写Windows应用程序时使用。这些函数以动态链接库(DLL)的形式存在,如kernel32.dll、user32.dll和gdi32.dll等。C++与...

Global site tag (gtag.js) - Google Analytics