added AutoHFONT; allow initialize SelectInHDC later (and not necessarily in ctor)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44046 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-12-23 22:11:16 +00:00
parent e3eac0ff7f
commit 6969c2c318

View File

@@ -406,29 +406,49 @@ private:
// dtor
class SelectInHDC
{
private:
void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); }
public:
SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
{ m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
SelectInHDC() : m_hdc(NULL) { }
SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { DoInit(hgdiobj); }
~SelectInHDC() { ::SelectObject(m_hdc, m_hgdiobj); }
void Init(HDC hdc, HGDIOBJ hgdiobj)
{
wxASSERT_MSG( !m_hdc, _T("initializing twice?") );
// return true if the object was successfully selected
operator bool() const { return m_hgdiobj != 0; }
m_hdc = hdc;
DoInit(hgdiobj);
}
~SelectInHDC() { if ( m_hdc ) ::SelectObject(m_hdc, m_hgdiobj); }
// return true if the object was successfully selected
operator bool() const { return m_hgdiobj != 0; }
private:
HDC m_hdc;
HGDIOBJ m_hgdiobj;
HDC m_hdc;
HGDIOBJ m_hgdiobj;
DECLARE_NO_COPY_CLASS(SelectInHDC)
DECLARE_NO_COPY_CLASS(SelectInHDC)
};
// a class which cleans up any GDI object
class AutoGDIObject
{
protected:
AutoGDIObject() { m_gdiobj = NULL; }
AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { }
~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_gdiobj); }
void InitGdiobj(HGDIOBJ gdiobj)
{
wxASSERT_MSG( !m_gdiobj, _T("initializing twice?") );
m_gdiobj = gdiobj;
}
HGDIOBJ GetObject() const { return m_gdiobj; }
private:
@@ -437,7 +457,7 @@ private:
// TODO: all this asks for using a AutoHandler<T, CreateFunc> template...
// a class for temporary pens
// a class for temporary brushes
class AutoHBRUSH : private AutoGDIObject
{
public:
@@ -447,6 +467,22 @@ public:
operator HBRUSH() const { return (HBRUSH)GetObject(); }
};
// a class for temporary fonts
class AutoHFONT : private AutoGDIObject
{
private:
public:
AutoHFONT()
: AutoGDIObject() { }
AutoHFONT(const LOGFONT& lf)
: AutoGDIObject(::CreateFontIndirect(&lf)) { }
void Init(const LOGFONT& lf) { InitGdiobj(::CreateFontIndirect(&lf)); }
operator HFONT() const { return (HFONT)GetObject(); }
};
// a class for temporary pens
class AutoHPEN : private AutoGDIObject
{