📄 atlgdi.h
字号:
///////////////////////////////////////////////////////////////////////////////
// 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);
}
COLORREF SetBkColor(COLORREF crColor)
{
ATLASSERT(m_hDC != NULL);
return ::SetBkColor(m_hDC, crColor);
}
int SetBkMode(int nBkMode)
{
ATLASSERT(m_hDC != NULL);
return ::SetBkMode(m_hDC, nBkMode);
}
#ifndef _WIN32_WCE
int SetPolyFillMode(int nPolyFillMode)
{
ATLASSERT(m_hDC != NULL);
return ::SetPolyFillMode(m_hDC, nPolyFillMode);
}
#endif //!_WIN32_WCE
int SetROP2(int nDrawMode)
{
ATLASSERT(m_hDC != NULL);
return ::SetROP2(m_hDC, nDrawMode);
}
#ifndef _WIN32_WCE
int SetStretchBltMode(int nStretchMode)
{
ATLASSERT(m_hDC != NULL);
return ::SetStretchBltMode(m_hDC, nStretchMode);
}
#endif //!_WIN32_WCE
COLORREF SetTextColor(COLORREF crColor)
{
ATLASSERT(m_hDC != NULL);
return ::SetTextColor(m_hDC, crColor);
}
#ifndef _WIN32_WCE
BOOL GetColorAdjustment(LPCOLORADJUSTMENT lpColorAdjust) const
{
ATLASSERT(m_hDC != NULL);
return ::GetColorAdjustment(m_hDC, lpColorAdjust);
}
BOOL SetColorAdjustment(const COLORADJUSTMENT* lpColorAdjust)
{
ATLASSERT(m_hDC != NULL);
return ::SetColorAdjustment(m_hDC, lpColorAdjust);
}
// Mapping Functions
int GetMapMode() const
{
ATLASSERT(m_hDC != NULL);
return ::GetMapMode(m_hDC);
}
BOOL GetViewportOrg(LPPOINT lpPoint) const
{
ATLASSERT(m_hDC != NULL);
return ::GetViewportOrgEx(m_hDC, lpPoint);
}
int SetMapMode(int nMapMode)
{
ATLASSERT(m_hDC != NULL);
return ::SetMapMode(m_hDC, nMapMode);
}
#endif //!_WIN32_WCE
// Viewport Origin
BOOL SetViewportOrg(int x, int y, LPPOINT lpPoint = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetViewportOrgEx(m_hDC, x, y, lpPoint);
}
#ifndef _WIN32_WCE
BOOL SetViewportOrg(POINT point, LPPOINT lpPointRet = NULL)
{
ATLASSERT(m_hDC != NULL);
return SetViewportOrg(point.x, point.y, lpPointRet);
}
BOOL OffsetViewportOrg(int nWidth, int nHeight, LPPOINT lpPoint = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::OffsetViewportOrgEx(m_hDC, nWidth, nHeight, lpPoint);
}
// Viewport Extent
BOOL GetViewportExt(LPSIZE lpSize) const
{
ATLASSERT(m_hDC != NULL);
return ::GetViewportExtEx(m_hDC, lpSize);
}
BOOL SetViewportExt(int x, int y, LPSIZE lpSize = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetViewportExtEx(m_hDC, x, y, lpSize);
}
BOOL SetViewportExt(SIZE size, LPSIZE lpSizeRet = NULL)
{
ATLASSERT(m_hDC != NULL);
return SetViewportExt(size.cx, size.cy, lpSizeRet);
}
BOOL ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::ScaleViewportExtEx(m_hDC, xNum, xDenom, yNum, yDenom, lpSize);
}
#endif //!_WIN32_WCE
// Window Origin
#ifndef _WIN32_WCE
BOOL GetWindowOrg(LPPOINT lpPoint) const
{
ATLASSERT(m_hDC != NULL);
return ::GetWindowOrgEx(m_hDC, lpPoint);
}
BOOL SetWindowOrg(int x, int y, LPPOINT lpPoint = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetWindowOrgEx(m_hDC, x, y, lpPoint);
}
BOOL SetWindowOrg(POINT point, LPPOINT lpPointRet = NULL)
{
ATLASSERT(m_hDC != NULL);
return SetWindowOrg(point.x, point.y, lpPointRet);
}
BOOL OffsetWindowOrg(int nWidth, int nHeight, LPPOINT lpPoint = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::OffsetWindowOrgEx(m_hDC, nWidth, nHeight, lpPoint);
}
// Window extent
BOOL GetWindowExt(LPSIZE lpSize) const
{
ATLASSERT(m_hDC != NULL);
return ::GetWindowExtEx(m_hDC, lpSize);
}
BOOL SetWindowExt(int x, int y, LPSIZE lpSize = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::SetWindowExtEx(m_hDC, x, y, lpSize);
}
BOOL SetWindowExt(SIZE size, LPSIZE lpSizeRet = NULL)
{
ATLASSERT(m_hDC != NULL);
return SetWindowExt(size.cx, size.cy, lpSizeRet);
}
BOOL ScaleWindowExt(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize = NULL)
{
ATLASSERT(m_hDC != NULL);
return ::ScaleWindowExtEx(m_hDC, xNum, xDenom, yNum, yDenom, lpSize);
}
// Coordinate Functions
BOOL DPtoLP(LPPOINT lpPoints, int nCount = 1) const
{
ATLASSERT(m_hDC != NULL);
return ::DPtoLP(m_hDC, lpPoints, nCount);
}
BOOL DPtoLP(LPRECT lpRect) const
{
ATLASSERT(m_hDC != NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -