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:
@@ -406,29 +406,49 @@ private:
|
|||||||
// dtor
|
// dtor
|
||||||
class SelectInHDC
|
class SelectInHDC
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc)
|
SelectInHDC() : m_hdc(NULL) { }
|
||||||
{ m_hgdiobj = ::SelectObject(hdc, hgdiobj); }
|
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
|
m_hdc = hdc;
|
||||||
operator bool() const { return m_hgdiobj != 0; }
|
|
||||||
|
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:
|
private:
|
||||||
HDC m_hdc;
|
HDC m_hdc;
|
||||||
HGDIOBJ m_hgdiobj;
|
HGDIOBJ m_hgdiobj;
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(SelectInHDC)
|
DECLARE_NO_COPY_CLASS(SelectInHDC)
|
||||||
};
|
};
|
||||||
|
|
||||||
// a class which cleans up any GDI object
|
// a class which cleans up any GDI object
|
||||||
class AutoGDIObject
|
class AutoGDIObject
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
AutoGDIObject() { m_gdiobj = NULL; }
|
||||||
AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { }
|
AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { }
|
||||||
~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_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; }
|
HGDIOBJ GetObject() const { return m_gdiobj; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -437,7 +457,7 @@ private:
|
|||||||
|
|
||||||
// TODO: all this asks for using a AutoHandler<T, CreateFunc> template...
|
// 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
|
class AutoHBRUSH : private AutoGDIObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -447,6 +467,22 @@ public:
|
|||||||
operator HBRUSH() const { return (HBRUSH)GetObject(); }
|
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
|
// a class for temporary pens
|
||||||
class AutoHPEN : private AutoGDIObject
|
class AutoHPEN : private AutoGDIObject
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user