📄 atlgdi.h
字号:
{
Attach(hRgn);
return *this;
}
void Attach(HRGN hRgn)
{
if(t_bManaged && m_hRgn != NULL && m_hRgn != hRgn)
::DeleteObject(m_hRgn);
m_hRgn = hRgn;
}
HRGN Detach()
{
HRGN hRgn = m_hRgn;
m_hRgn = NULL;
return hRgn;
}
operator HRGN() const { return m_hRgn; }
bool IsNull() const { return (m_hRgn == NULL); }
// Create methods
HRGN CreateRectRgn(int x1, int y1, int x2, int y2)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreateRectRgn(x1, y1, x2, y2);
return m_hRgn;
}
HRGN CreateRectRgnIndirect(LPCRECT lpRect)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreateRectRgnIndirect(lpRect);
return m_hRgn;
}
#ifndef _WIN32_WCE
HRGN CreateEllipticRgn(int x1, int y1, int x2, int y2)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreateEllipticRgn(x1, y1, x2, y2);
return m_hRgn;
}
HRGN CreateEllipticRgnIndirect(LPCRECT lpRect)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreateEllipticRgnIndirect(lpRect);
return m_hRgn;
}
HRGN CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreatePolygonRgn(lpPoints, nCount, nMode);
return m_hRgn;
}
HRGN CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreatePolyPolygonRgn(lpPoints, lpPolyCounts, nCount, nPolyFillMode);
return m_hRgn;
}
HRGN CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::CreateRoundRectRgn(x1, y1, x2, y2, x3, y3);
return m_hRgn;
}
HRGN CreateFromPath(HDC hDC)
{
ATLASSERT(m_hRgn == NULL);
ATLASSERT(hDC != NULL);
m_hRgn = ::PathToRegion(hDC);
return m_hRgn;
}
HRGN CreateFromData(const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData)
{
ATLASSERT(m_hRgn == NULL);
m_hRgn = ::ExtCreateRegion(lpXForm, nCount, pRgnData);
return m_hRgn;
}
#endif // !_WIN32_WCE
BOOL DeleteObject()
{
ATLASSERT(m_hRgn != NULL);
BOOL bRet = ::DeleteObject(m_hRgn);
if(bRet)
m_hRgn = NULL;
return bRet;
}
// Operations
void SetRectRgn(int x1, int y1, int x2, int y2)
{
ATLASSERT(m_hRgn != NULL);
::SetRectRgn(m_hRgn, x1, y1, x2, y2);
}
void SetRectRgn(LPCRECT lpRect)
{
ATLASSERT(m_hRgn != NULL);
::SetRectRgn(m_hRgn, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
}
int CombineRgn(HRGN hRgnSrc1, HRGN hRgnSrc2, int nCombineMode)
{
ATLASSERT(m_hRgn != NULL);
return ::CombineRgn(m_hRgn, hRgnSrc1, hRgnSrc2, nCombineMode);
}
int CombineRgn(HRGN hRgnSrc, int nCombineMode)
{
ATLASSERT(m_hRgn != NULL);
return ::CombineRgn(m_hRgn, m_hRgn, hRgnSrc, nCombineMode);
}
int CopyRgn(HRGN hRgnSrc)
{
ATLASSERT(m_hRgn != NULL);
return ::CombineRgn(m_hRgn, hRgnSrc, NULL, RGN_COPY);
}
BOOL EqualRgn(HRGN hRgn) const
{
ATLASSERT(m_hRgn != NULL);
return ::EqualRgn(m_hRgn, hRgn);
}
int OffsetRgn(int x, int y)
{
ATLASSERT(m_hRgn != NULL);
return ::OffsetRgn(m_hRgn, x, y);
}
int OffsetRgn(POINT point)
{
ATLASSERT(m_hRgn != NULL);
return ::OffsetRgn(m_hRgn, point.x, point.y);
}
int GetRgnBox(LPRECT lpRect) const
{
ATLASSERT(m_hRgn != NULL);
return ::GetRgnBox(m_hRgn, lpRect);
}
BOOL PtInRegion(int x, int y) const
{
ATLASSERT(m_hRgn != NULL);
return ::PtInRegion(m_hRgn, x, y);
}
BOOL PtInRegion(POINT point) const
{
ATLASSERT(m_hRgn != NULL);
return ::PtInRegion(m_hRgn, point.x, point.y);
}
BOOL RectInRegion(LPCRECT lpRect) const
{
ATLASSERT(m_hRgn != NULL);
return ::RectInRegion(m_hRgn, lpRect);
}
int GetRegionData(LPRGNDATA lpRgnData, int nDataSize) const
{
ATLASSERT(m_hRgn != NULL);
return (int)::GetRegionData(m_hRgn, nDataSize, lpRgnData);
}
};
typedef CRgnT<false> CRgnHandle;
typedef CRgnT<true> CRgn;
///////////////////////////////////////////////////////////////////////////////
// CDC - The device context class
template <bool t_bManaged>
class CDCT
{
public:
// Data members
HDC m_hDC;
// Constructor/destructor/operators
CDCT(HDC hDC = NULL) : m_hDC(hDC)
{
}
~CDCT()
{
if(t_bManaged && m_hDC != NULL)
::DeleteDC(Detach());
}
CDCT<t_bManaged>& operator =(HDC hDC)
{
Attach(hDC);
return *this;
}
void Attach(HDC hDC)
{
if(t_bManaged && m_hDC != NULL && m_hDC != hDC)
::DeleteDC(m_hDC);
m_hDC = hDC;
}
HDC Detach()
{
HDC hDC = m_hDC;
m_hDC = NULL;
return hDC;
}
operator HDC() const { return m_hDC; }
bool IsNull() const { return (m_hDC == NULL); }
// Operations
#ifndef _WIN32_WCE
HWND WindowFromDC() const
{
ATLASSERT(m_hDC != NULL);
return ::WindowFromDC(m_hDC);
}
#endif // !_WIN32_WCE
CPenHandle GetCurrentPen() const
{
ATLASSERT(m_hDC != NULL);
return CPenHandle((HPEN)::GetCurrentObject(m_hDC, OBJ_PEN));
}
CBrushHandle GetCurrentBrush() const
{
ATLASSERT(m_hDC != NULL);
return CBrushHandle((HBRUSH)::GetCurrentObject(m_hDC, OBJ_BRUSH));
}
CPaletteHandle GetCurrentPalette() const
{
ATLASSERT(m_hDC != NULL);
return CPaletteHandle((HPALETTE)::GetCurrentObject(m_hDC, OBJ_PAL));
}
CFontHandle GetCurrentFont() const
{
ATLASSERT(m_hDC != NULL);
return CFontHandle((HFONT)::GetCurrentObject(m_hDC, OBJ_FONT));
}
CBitmapHandle GetCurrentBitmap() const
{
ATLASSERT(m_hDC != NULL);
return CBitmapHandle((HBITMAP)::GetCurrentObject(m_hDC, OBJ_BITMAP));
}
HDC CreateDC(LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName, LPCTSTR lpszOutput, const DEVMODE* lpInitData)
{
ATLASSERT(m_hDC == NULL);
m_hDC = ::CreateDC(lpszDriverName, lpszDeviceName, lpszOutput, lpInitData);
return m_hDC;
}
HDC CreateCompatibleDC(HDC hDC = NULL)
{
ATLASSERT(m_hDC == NULL);
m_hDC = ::CreateCompatibleDC(hDC);
return m_hDC;
}
BOOL DeleteDC()
{
if(m_hDC == NULL)
return FALSE;
BOOL bRet = ::DeleteDC(m_hDC);
if(bRet)
m_hDC = NULL;
return bRet;
}
// Device-Context Functions
int SaveDC()
{
ATLASSERT(m_hDC != NULL);
return ::SaveDC(m_hDC);
}
BOOL RestoreDC(int nSavedDC)
{
ATLASSERT(m_hDC != NULL);
return ::RestoreDC(m_hDC, nSavedDC);
}
int GetDeviceCaps(int nIndex) const
{
ATLASSERT(m_hDC != NULL);
return ::GetDeviceCaps(m_hDC, nIndex);
}
#ifndef _WIN32_WCE
UINT SetBoundsRect(LPCRECT lpRectBounds, UINT flags)
{
ATLASSERT(m_hDC != NULL);
return ::SetBoundsRect(m_hDC, lpRectBounds, flags);
}
UINT GetBoundsRect(LPRECT lpRectBounds, UINT flags) const
{
ATLASSERT(m_hDC != NULL);
return ::GetBoundsRect(m_hDC, lpRectBounds, flags);
}
BOOL ResetDC(const DEVMODE* lpDevMode)
{
ATLASSERT(m_hDC != NULL);
return ::ResetDC(m_hDC, lpDevMode) != NULL;
}
// Drawing-Tool Functions
BOOL GetBrushOrg(LPPOINT lpPoint) const
{
ATLASSERT(m_hDC != NULL);
return ::GetBrushOrgEx(m_hDC, lpPoint);
}
#endif // !_WIN32_WCE
BOOL SetBrushOrg(int x, int y, LPPOINT lpPoint = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetBrushOrgEx(m_hDC, x, y, lpPoint);
}
BOOL SetBrushOrg(POINT point, LPPOINT lpPointRet = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetBrushOrgEx(m_hDC, point.x, point.y, lpPointRet);
}
#ifndef _WIN32_WCE
int EnumObjects(int nObjectType, int (CALLBACK* lpfn)(LPVOID, LPARAM), LPARAM lpData)
{
ATLASSERT(m_hDC != NULL);
#ifdef STRICT
return ::EnumObjects(m_hDC, nObjectType, (GOBJENUMPROC)lpfn, lpData);
#else
return ::EnumObjects(m_hDC, nObjectType, (GOBJENUMPROC)lpfn, (LPVOID)lpData);
#endif
}
#endif // !_WIN32_WCE
// Type-safe selection helpers
HPEN SelectPen(HPEN hPen)
{
ATLASSERT(m_hDC != NULL);
#ifndef _WIN32_WCE
ATLASSERT(hPen == NULL || ::GetObjectType(hPen) == OBJ_PEN || ::GetObjectType(hPen) == OBJ_EXTPEN);
#else // CE specific
ATLASSERT(hPen == NULL || ::GetObjectType(hPen) == OBJ_PEN);
#endif // _WIN32_WCE
return (HPEN)::SelectObject(m_hDC, hPen);
}
HBRUSH SelectBrush(HBRUSH hBrush)
{
ATLASSERT(m_hDC != NULL);
ATLASSERT(hBrush == NULL || ::GetObjectType(hBrush) == OBJ_BRUSH);
return (HBRUSH)::SelectObject(m_hDC, hBrush);
}
HFONT SelectFont(HFONT hFont)
{
ATLASSERT(m_hDC != NULL);
ATLASSERT(hFont == NULL || ::GetObjectType(hFont) == OBJ_FONT);
return (HFONT)::SelectObject(m_hDC, hFont);
}
HBITMAP SelectBitmap(HBITMAP hBitmap)
{
ATLASSERT(m_hDC != NULL);
ATLASSERT(hBitmap == NULL || ::GetObjectType(hBitmap) == OBJ_BITMAP);
return (HBITMAP)::SelectObject(m_hDC, hBitmap);
}
int SelectRgn(HRGN hRgn) // special return for regions
{
ATLASSERT(m_hDC != NULL);
ATLASSERT(hRgn == NULL || ::GetObjectType(hRgn) == OBJ_REGION);
return PtrToInt(::SelectObject(m_hDC, hRgn));
}
// Type-safe selection helpers for stock objects
HPEN SelectStockPen(int nPen)
{
ATLASSERT(m_hDC != NULL);
#if (_WIN32_WINNT >= 0x0500)
ATLASSERT(nPen == WHITE_PEN || nPen == BLACK_PEN || nPen == NULL_PEN || nPen == DC_PEN);
#else
ATLASSERT(nPen == WHITE_PEN || nPen == BLACK_PEN || nPen == NULL_PEN);
#endif // !(_WIN32_WINNT >= 0x0500)
return SelectPen((HPEN)::GetStockObject(nPen));
}
HBRUSH SelectStockBrush(int nBrush)
{
#if (_WIN32_WINNT >= 0x0500)
ATLASSERT((nBrush >= WHITE_BRUSH && nBrush <= HOLLOW_BRUSH) || nBrush == DC_BRUSH);
#else
ATLASSERT(nBrush >= WHITE_BRUSH && nBrush <= HOLLOW_BRUSH);
#endif // !(_WIN32_WINNT >= 0x0500)
return SelectBrush((HBRUSH)::GetStockObject(nBrush));
}
HFONT SelectStockFont(int nFont)
{
#ifndef _WIN32_WCE
ATLASSERT((nFont >= OEM_FIXED_FONT && nFont <= SYSTEM_FIXED_FONT) || nFont == DEFAULT_GUI_FONT);
#else // CE specific
ATLASSERT(nFont == SYSTEM_FONT);
#endif // _WIN32_WCE
return SelectFont((HFONT)::GetStockObject(nFont));
}
HPALETTE SelectStockPalette(int nPalette, BOOL bForceBackground)
{
ATLASSERT(nPalette == DEFAULT_PALETTE); // the only one supported
return SelectPalette((HPALETTE)::GetStockObject(nPalette), bForceBackground);
}
// Color and Color Palette Functions
COLORREF GetNearestColor(COLORREF crColor) const
{
ATLASSERT(m_hDC != NULL);
return ::GetNearestColor(m_hDC, crColor);
}
HPALETTE SelectPalette(HPALETTE hPalette, BOOL bForceBackground)
{
ATLASSERT(m_hDC != NULL);
return ::SelectPalette(m_hDC, hPalette, bForceBackground);
}
UINT RealizePalette()
{
ATLASSERT(m_hDC != NULL);
return ::RealizePalette(m_hDC);
}
#ifndef _WIN32_WCE
void UpdateColors()
{
ATLASSERT(m_hDC != NULL);
::UpdateColors(m_hDC);
}
#endif // !_WIN32_WCE
// Drawing-Attribute Functions
COLORREF GetBkColor() const
{
ATLASSERT(m_hDC != NULL);
return ::GetBkColor(m_hDC);
}
int GetBkMode() const
{
ATLASSERT(m_hDC != NULL);
return ::GetBkMode(m_hDC);
}
#ifndef _WIN32_WCE
int GetPolyFillMode() const
{
ATLASSERT(m_hDC != NULL);
return ::GetPolyFillMode(m_hDC);
}
int GetROP2() const
{
ATLASSERT(m_hDC != NULL);
return ::GetROP2(m_hDC);
}
int GetStretchBltMode() const
{
ATLASSERT(m_hDC != NULL);
return ::GetStretchBltMode(m_hDC);
}
#endif // !_WIN32_WCE
COLORREF GetTextColor() const
{
ATLASSERT(m_hDC != NULL);
return ::GetTextColor(m_hDC);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -