VC编程控件类HTControl之CHTGDIManager GDI资源管理类用法解析

本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下:

m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T(".\\pic\\btn_close_normal.png"));
#if !defined(__CHTGDIMANAGER_H__)
#define __CHTGDIMANAGER_H__
class AFX_CLASS_EXPORT CHTGDIManager
{
public:
 CHTGDIManager(void);
 ~CHTGDIManager(void);
/****************************************************************************
| 函数功能:从文件中获取位图                        |
| 输入参数:                                |
| szPicPath: 图片文件路径                          |
| pRect: 取图片的一部分 NULL表示取整个图片                 |
| 输出参数:无                               |
| 返回值: 成功返回位图句柄 失败返回NULL                 |
| 说  明:此类析构时会删除此位图,使用者不用删除             |
****************************************************************************/
HBITMAP GetBitmap(TCHAR* szPicPath, RECT* pRect = NULL);
/****************************************************************************
| 函数功能:从资源中获取位图                        |
| 输入参数:                                |
| iPicId: 资源ID                              |
| pRect: 取图片的一部分 NULL表示取整个图片                 |
| 输出参数:无                               |
| 返回值: 成功返回位图句柄 失败返回NULL                 |
| 说  明:此类析构时会删除此位图,使用者不用删除             |
****************************************************************************/
HBITMAP GetBitmap(int iPicId, RECT* pRect = NULL);
/****************************************************************************
| 函数功能:获取指定的字体                         |
| 输入参数:                                |
| lHeight:字号                               |
| lWeight: 粗度                               |
| szFaceName: 字体名称                           |
| bUnderline: 是否带底横线                         |
| bItalic: 是否斜体                            |
| 输出参数:无                               |
| 返回值: 成功返回字体句柄 失败返回NULL                 |
| 说  明:此类析构时会删除此字体,使用者不用删除             |
****************************************************************************/
HFONT GetFont(long lHeight, long lWeight, TCHAR* szFaceName, BOOL bUnderline = FALSE, BOOL bItalic = FALSE);
 void DeleteBitmap(HBITMAP hBitmap);
 void DeleteAllBitmap(HBITMAP hBitmap);
 void DeleteFont(HFONT hFont);
 void DeleteAllFont(HFONT hFont);
private:
 HBITMAP* m_hBitmap;
 HFONT* m_hFont;
 int m_iBitmapIndex;
 int m_iFontIndex;
 int m_iBitmapCount;
 int m_iFontCount;
};
#endif //!__CHTGDIMANAGER_H__

MFC提供了各种GDI对象的封装类,许多习惯WIN32 API 开发的(SDK开发)可能并不喜欢使用这些类(反正我是不喜欢用,个人认为这些类封装的并不怎么好),而是习惯使用API直接创建,况且许多情况下需要直接使用这些GDI对象的句柄。GDI对象的撤销,GDI对象使用完成后是要撤销的,以防资源泄漏。CHTGDIManager在类析构时撤销了它所创建的所有GDI对象,使用者不需要撤销。

(0)

相关推荐

  • 使用C++绘制GDI位图的基本编写实例

    1.加载位图 2.建立兼容DC 3.选择之前的位图对象 4.用贴图函数BitBlt() HBITMAP bitmap=(HBITMAP)LoadImage(NULL,L"Name.bmp",IMAGE_BITMAP,high,length,LR_LOADFROMFILE); HWND tmp=CreateCompatiable(g_hdc); SelectObject(tmp,bitmap); BitBlt(g_hdc,0,0,high,length,tmp,0,0,SRCCOPY);

  • Visual C++程序设计中Windows GDI贴图闪烁的解决方法

    本文实例讲述了Visual C++程序设计中Windows GDI贴图闪烁的解决方法.分享给大家供大家参考.具体如下: 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期. 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的. 这样

  • VC中使用GDI+的配置方法概述

    本文以Visual C++ 6.0及Visual Studio 2003为例简述了VC中GDI的配置方法,具体操作如下: 一.对于Visual C++ 6.0的用户: 1. 下载GDI+的库.运行GDI+需要一个GdiPlus.dll的文件; 开发GDI+的程序,还需要GdiPlus.lib和GdiPlus*.h文件.这些都可以在微软的网站上下到.(具体搜一下windows sdk就都出来了) 2. 将以上的文件放在你的工程中的一个目录,然后在stdafx.h中包含#include "GdiPl

  • VC编程控件类HTControl之CHTGDIManager GDI资源管理类用法解析

    本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下: m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T(".\\pic\\btn_close_normal.png")); #if !defined(_

  • JS扩展类,克隆对象与混合类实例分析

    本文实例讲述了JS扩展类,克隆对象与混合类.分享给大家供大家参考,具体如下: 1.类扩展 /* EditInPlaceField类 */ /* 扩展函数 */ function extend(subClass, superClass) { var F = function() {}; F.prototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass

  • Python类的定义、继承及类对象使用方法简明教程

    Python编程中类的概念可以比作是某种类型集合的描述,如"人类"可以被看作一个类,然后用人类这个类定义出每个具体的人--你.我.他等作为其对象.类还拥有属性和功能,属性即类本身的一些特性,如人类有名字.身高和体重等属性,而具体值则会根据每个人的不同:功能则是类所能实现的行为,如人类拥有吃饭.走路和睡觉等功能.具体的形式如下: # 例:类的概念 class 人类: 名字 = '未命名' # 成员变量 def 说话(内容): # 成员函数 print 内容 # 成员变量赋初始值 某人 =

  • VC++开发中完美解决头文件相互包含问题的方法解析

    所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数. 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息.为了实现对话框"应用"按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义关系就变成如下的代码: 复制代码 代码如下: #ifndef __MYVIEW_H__   #define __MY

  • C++空类及没有成员变量的类的大小实例分析

    众所周知的C++中空类的大小为1,但是除了空类之外的其他一些没有成员变量的类的大小,还是有相当一部分开发人员对此有很多不明之处的. 这里我们以如下代码为例: #include using namespace std; class a {}; class b{}; class c :public a{ virtual void fun() = 0; }; class d :public b, public c{}; int main() { cout << "sizeof(a)&quo

  • PHP面向对象的进阶学习(抽像类、接口、final、类常量)

    一.抽像类(abstract) 在我们实际开发过程中,有些类并不需要被实例化,如前面学习到的一些父类,主要是让子类来继承,这样可以提高代码复用性 语法结构: 复制代码 代码如下: abstract class 类名{ 属性 $name; 方法(){} //方法也可以为abstract 修饰符 function 方法名(){} } 例: 复制代码 代码如下: abstract class animal{ public $name; public $age; //抽象方法不能有方法体,主要是为了让子

  • 详解C++中基类与派生类的转换以及虚基类

    C++基类与派生类的转换 在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生类才是基类真正的

  • java Swing JFrame框架类中setDefaultCloseOperation的参数含义与用法示例

    本文实例讲述了java Swing JFrame框架类中setDefaultCloseOperation的参数含义与用法.分享给大家供大家参考,具体如下: 先来看一个实例(一个空的java窗口): package awtDemo; import javax.swing.*; //使用Swing类,必须引入Swing包 public class JFrameDemo1{ public static void main( String args[]) { //定义一个窗体对象f,窗体名称为"一个简单

  • python 类的继承 实例方法.静态方法.类方法的代码解析

    这篇文章主要介绍了python 类的继承 实例方法.静态方法.类方法的代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 dt={} class Denglu: def register(self,name,psd): if name.isalnum() and psd.isalnum(): if name not in dt.keys(): dt[name]=psd print('注册成功') else: print('已经存在该用户名'

  • Python 类属性与实例属性,类对象与实例对象用法分析

    本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法.分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容python2.x class Tool(object): # 使用赋值语句定义类属性,记录实例化工具对象的数量 count = 0 def __init__(self, name): self.name = name # 初始化方法内部定义及初始化实例属性 # 类名.类属性名 的方式访问类属性. To

随机推荐