Windows GDI:CGdiObject使用总结
来源:互联网 发布:php获取html表单数据 编辑:程序博客网 时间:2024/06/16 10:16
一、Win32下的GdiObject操作
1、获取系统自带的GdiObject
HGDIOBJ GetStockObject(int fnObject)
fnObject:
BLACK_BRUSH — Black brush.
HOLLOW_BRUSH — Hollow brush (equivalent to NULL_BRUSH).
BLACK_PEN — Black pen.
……
Note: It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.
2、创建GdiObject
HPEN CreatePen( int fnPenStyle, // pen style int nWidth, // pen width COLORREF crColor // pen color);HBRUSH CreateSolidBrush( COLORREF crColor // brush color value);HFONT CreateFont(...)
通过CreateXXX创建的GdiObject,在使用完之后一定要DeleteObject,否则会有资源泄露.
二、CGdiObject
class CGdiObject : public CObject{public: HGDIOBJ m_hObject; //A HANDLE containing the HBITMAP, HPALETTE, HRGN, HBRUSH, HPEN, or HFONT attached to this object. BOOL Attach(HGDIOBJ hObject); HGDIOBJ Detach(); static CGdiObject* FromHandle(HGDIOBJ hObject); static void DeleteTempMap( );}
1、构造函数
CGdiObject::CGdiObject(){ m_hObject = NULL; }
2、析构函数
CGdiObject::~CGdiObject(){ DeleteObject(); }BOOL CGdiObject::DeleteObject(){ if (m_hObject == NULL) return FALSE; return ::DeleteObject(Detach());}
析构函数中有DeleteObject
3、Attach与Detach
原理同CDC
BOOL CGdiObject::Attach(HGDIOBJ hObject){ if (hObject == NULL) { return FALSE; } m_hObject = hObject; CHandleMap* pMap = afxMapHGDIOBJ(TRUE); // create map if not exist pMap->SetPermanent(m_hObject, this); return TRUE;}HGDIOBJ CGdiObject::Detach(){ HGDIOBJ hObject = m_hObject; if (hObject != NULL) { CHandleMap* pMap = afxMapHGDIOBJ(); // don't create if not exist if (pMap != NULL) pMap->RemoveHandle(m_hObject); } m_hObject = NULL; return hObject;}
4、FromHandle
同CDC::FromHandle
CGdiObject* PASCAL CGdiObject::FromHandle(HGDIOBJ h){ CHandleMap* pMap = afxMapHGDIOBJ(TRUE); //create map if not exist CGdiObject* pObject = (CGdiObject*)pMap->FromHandle(h); return pObject;}
5、DeleteTempMap
Called automatically by the CWinApp idle-time handler, DeleteTempMap deletes any temporary CGdiObject objects created by FromHandle.
DeleteTempMap detaches the Windows GDI object attached to a temporary CGdiObject object before deleting the CGdiObject object.
这个和CDC::DeleteTempMap是一致的,也即只会delete temporary CGdiObject object,but 不会对关联的Windows GDI object调用::DeleteObject
6、CreateStockObject
BOOL CreateStockObject( int nIndex );
对应Win32SDK中的GetStockObject
- Windows GDI:CGdiObject使用总结
- Windows GDI:CDC使用总结
- Windows GDI:画刷Brush使用总结
- Windows GDI:字体Font使用总结
- Windows GDI:画笔Pen使用总结
- windows 使用GDI+
- Windows GDI使用【学习笔记】
- 使用Windows GDI绘制图形
- Windows GDI与GDI+
- 在 Windows Mobile 上使用 GDI+
- 使用WINDOWS的GDI开发游戏(开篇)
- 使用WINDOWS的GDI开发游戏(1)
- 使用WINDOWS的GDI开发游戏(2)
- 使用WINDOWS的GDI开发游戏(3)
- 使用WINDOWS的GDI开发游戏(4)
- 使用WINDOWS的GDI开发游戏(5)
- Windows Mobile6.0下使用GDI+
- Windows Mobile6.0下使用GDI+
- 安卓 Button 样式设置
- Windows GDI:画笔Pen使用总结
- fprintf和sprintf的区别
- ubuntu 安装google浏览器时遇见问题
- idea iFrame框架
- Windows GDI:CGdiObject使用总结
- 框架开发2
- 常用算法之Trie【字典树,前缀树】
- CentOS安装图形界面
- Leetcode Isomorphic Strings
- POJ 2186 Popular Cows 强连通
- 初识GestureDetector
- “进程球”通过数据库来通信------好美的一幅图!
- BroadcastReceiver的生命周期:保存在Receiver中的static变量为什么老为空