本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下:
1
|
m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T( ".\\pic\\btn_close_normal.png" ));
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#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对象,使用者不需要撤销。