📄 atluser.h
字号:
return m_hIcon;
}
#endif // !_WIN32_WCE
BOOL DestroyIcon()
{
ATLASSERT(m_hIcon != NULL);
BOOL bRet = ::DestroyIcon(m_hIcon);
if(bRet != FALSE)
m_hIcon = NULL;
return bRet;
}
// Operations
#ifndef _WIN32_WCE
HICON CopyIcon()
{
ATLASSERT(m_hIcon != NULL);
return ::CopyIcon(m_hIcon);
}
HICON DuplicateIcon()
{
ATLASSERT(m_hIcon != NULL);
return ::DuplicateIcon(NULL, m_hIcon);
}
#endif // !_WIN32_WCE
BOOL DrawIcon(HDC hDC, int x, int y)
{
ATLASSERT(m_hIcon != NULL);
#ifndef _WIN32_WCE
return ::DrawIcon(hDC, x, y, m_hIcon);
#else // CE specific
return ::DrawIconEx(hDC, x, y, m_hIcon, 0, 0, 0, NULL, DI_NORMAL);
#endif // _WIN32_WCE
}
BOOL DrawIcon(HDC hDC, POINT pt)
{
ATLASSERT(m_hIcon != NULL);
#ifndef _WIN32_WCE
return ::DrawIcon(hDC, pt.x, pt.y, m_hIcon);
#else // CE specific
return ::DrawIconEx(hDC, pt.x, pt.y, m_hIcon, 0, 0, 0, NULL, DI_NORMAL);
#endif // _WIN32_WCE
}
BOOL DrawIconEx(HDC hDC, int x, int y, int cxWidth, int cyWidth, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
{
ATLASSERT(m_hIcon != NULL);
return ::DrawIconEx(hDC, x, y, m_hIcon, cxWidth, cyWidth, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
}
BOOL DrawIconEx(HDC hDC, POINT pt, SIZE size, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
{
ATLASSERT(m_hIcon != NULL);
return ::DrawIconEx(hDC, pt.x, pt.y, m_hIcon, size.cx, size.cy, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
}
#ifndef _WIN32_WCE
BOOL GetIconInfo(PICONINFO pIconInfo) const
{
ATLASSERT(m_hIcon != NULL);
ATLASSERT(pIconInfo != NULL);
return ::GetIconInfo(m_hIcon, pIconInfo);
}
#if (_WIN32_WINNT >= 0x0600)
BOOL GetIconInfoEx(PICONINFOEX pIconInfo) const
{
ATLASSERT(m_hIcon != NULL);
ATLASSERT(pIconInfo != NULL);
return ::GetIconInfoEx(m_hIcon, pIconInfo);
}
#endif // (_WIN32_WINNT >= 0x0600)
#if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
HRESULT LoadIconMetric(ATL::_U_STRINGorID icon, int lims)
{
ATLASSERT(m_hIcon == NULL);
USES_CONVERSION;
return ::LoadIconMetric(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), lims, &m_hIcon);
}
HRESULT LoadIconWithScaleDown(ATL::_U_STRINGorID icon, int cx, int cy)
{
ATLASSERT(m_hIcon == NULL);
USES_CONVERSION;
return ::LoadIconWithScaleDown(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), cx, cy, &m_hIcon);
}
HRESULT LoadOEMIconMetric(LPCTSTR lpstrIconName, int lims)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(IsOEMIcon(lpstrIconName));
return ::LoadIconMetric(NULL, (LPCWSTR)lpstrIconName, lims, &m_hIcon);
}
HRESULT LoadOEMIconWithScaleDown(LPCTSTR lpstrIconName, int cx, int cy)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(IsOEMIcon(lpstrIconName));
USES_CONVERSION;
return ::LoadIconWithScaleDown(NULL, (LPCWSTR)lpstrIconName, cx, cy, &m_hIcon);
}
#endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN)
#endif // !_WIN32_WCE
// Helper
#ifndef _WIN32_WCE
static bool IsOEMIcon(LPCTSTR lpstrIconName)
{
#if (WINVER >= 0x0600)
return (lpstrIconName == IDI_APPLICATION || lpstrIconName == IDI_ASTERISK || lpstrIconName == IDI_EXCLAMATION ||
lpstrIconName == IDI_HAND || lpstrIconName == IDI_QUESTION || lpstrIconName == IDI_WINLOGO ||
lpstrIconName == IDI_SHIELD);
#else // !(WINVER >= 0x0600)
return (lpstrIconName == IDI_APPLICATION || lpstrIconName == IDI_ASTERISK || lpstrIconName == IDI_EXCLAMATION ||
lpstrIconName == IDI_HAND || lpstrIconName == IDI_QUESTION || lpstrIconName == IDI_WINLOGO);
#endif // !(WINVER >= 0x0600)
}
#endif // !_WIN32_WCE
};
typedef CIconT<false> CIconHandle;
typedef CIconT<true> CIcon;
///////////////////////////////////////////////////////////////////////////////
// CCursor
// protect template member from a winuser.h macro
#ifdef CopyCursor
#undef CopyCursor
#endif
template <bool t_bManaged>
class CCursorT
{
public:
HCURSOR m_hCursor;
// Constructor/destructor/operators
CCursorT(HCURSOR hCursor = NULL) : m_hCursor(hCursor)
{ }
~CCursorT()
{
if(t_bManaged && m_hCursor != NULL)
DestroyCursor();
}
CCursorT<t_bManaged>& operator =(HCURSOR hCursor)
{
Attach(hCursor);
return *this;
}
void Attach(HCURSOR hCursor)
{
if(t_bManaged && m_hCursor != NULL)
DestroyCursor();
m_hCursor = hCursor;
}
HCURSOR Detach()
{
HCURSOR hCursor = m_hCursor;
m_hCursor = NULL;
return hCursor;
}
operator HCURSOR() const { return m_hCursor; }
bool IsNull() const { return m_hCursor == NULL; }
// Create/destroy methods
HCURSOR LoadCursor(ATL::_U_STRINGorID cursor)
{
ATLASSERT(m_hCursor == NULL);
m_hCursor = ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
return m_hCursor;
}
HCURSOR LoadSysCursor(LPCTSTR lpstrCursorName)
{
ATLASSERT(m_hCursor == NULL);
#if (WINVER >= 0x0500)
ATLASSERT(lpstrCursorName == IDC_ARROW || lpstrCursorName == IDC_IBEAM || lpstrCursorName == IDC_WAIT ||
lpstrCursorName == IDC_CROSS || lpstrCursorName == IDC_UPARROW || lpstrCursorName == IDC_SIZE ||
lpstrCursorName == IDC_ICON || lpstrCursorName == IDC_SIZENWSE || lpstrCursorName == IDC_SIZENESW ||
lpstrCursorName == IDC_SIZEWE || lpstrCursorName == IDC_SIZENS || lpstrCursorName == IDC_SIZEALL ||
lpstrCursorName == IDC_NO || lpstrCursorName == IDC_APPSTARTING || lpstrCursorName == IDC_HELP ||
lpstrCursorName == IDC_HAND);
#else // !(WINVER >= 0x0500)
ATLASSERT(lpstrCursorName == IDC_ARROW || lpstrCursorName == IDC_IBEAM || lpstrCursorName == IDC_WAIT ||
lpstrCursorName == IDC_CROSS || lpstrCursorName == IDC_UPARROW || lpstrCursorName == IDC_SIZE ||
lpstrCursorName == IDC_ICON || lpstrCursorName == IDC_SIZENWSE || lpstrCursorName == IDC_SIZENESW ||
lpstrCursorName == IDC_SIZEWE || lpstrCursorName == IDC_SIZENS || lpstrCursorName == IDC_SIZEALL ||
lpstrCursorName == IDC_NO || lpstrCursorName == IDC_APPSTARTING || lpstrCursorName == IDC_HELP);
#endif // !(WINVER >= 0x0500)
m_hCursor = ::LoadCursor(NULL, lpstrCursorName);
return m_hCursor;
}
// deprecated
HCURSOR LoadOEMCursor(LPCTSTR lpstrCursorName)
{
return LoadSysCursor(lpstrCursorName);
}
HCURSOR LoadCursor(ATL::_U_STRINGorID cursor, int cxDesired, int cyDesired, UINT fuLoad = 0)
{
ATLASSERT(m_hCursor == NULL);
m_hCursor = (HCURSOR) ::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
return m_hCursor;
}
#ifndef _WIN32_WCE
HCURSOR LoadCursorFromFile(LPCTSTR pstrFilename)
{
ATLASSERT(m_hCursor == NULL);
ATLASSERT(pstrFilename != NULL);
m_hCursor = ::LoadCursorFromFile(pstrFilename);
return m_hCursor;
}
#endif // !_WIN32_WCE
#if !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)))
HCURSOR CreateCursor(int xHotSpot, int yHotSpot, int nWidth, int nHeight, CONST VOID *pvANDPlane, CONST VOID *pvXORPlane)
{
ATLASSERT(m_hCursor == NULL);
m_hCursor = ::CreateCursor(ModuleHelper::GetResourceInstance(), xHotSpot, yHotSpot, nWidth, nHeight, pvANDPlane, pvXORPlane);
return m_hCursor;
}
#endif // !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)))
#ifndef _WIN32_WCE
HCURSOR CreateCursorFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
{
ATLASSERT(m_hCursor == NULL);
ATLASSERT(pBits != NULL);
m_hCursor = (HCURSOR)::CreateIconFromResource(pBits, dwResSize, FALSE, dwVersion);
return m_hCursor;
}
HCURSOR CreateCursorFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000, int cxDesired = 0, int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
{
ATLASSERT(m_hCursor == NULL);
ATLASSERT(pbBits != NULL);
ATLASSERT(cbBits > 0);
m_hCursor = (HCURSOR)::CreateIconFromResourceEx(pbBits, cbBits, FALSE, dwVersion, cxDesired, cyDesired, uFlags);
return m_hCursor;
}
#endif // !_WIN32_WCE
BOOL DestroyCursor()
{
ATLASSERT(m_hCursor != NULL);
#if !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)))
BOOL bRet = ::DestroyCursor(m_hCursor);
if(bRet != FALSE)
m_hCursor = NULL;
return bRet;
#else // !(!defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP))))
ATLTRACE2(atlTraceUI, 0, _T("Warning: This version of Windows CE does not have ::DestroyCursor()\n"));
return FALSE;
#endif // !(!defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP))))
}
// Operations
#ifndef _WIN32_WCE
HCURSOR CopyCursor()
{
ATLASSERT(m_hCursor != NULL);
return (HCURSOR)::CopyIcon((HICON)m_hCursor);
}
#endif // !_WIN32_WCE
#if (WINVER >= 0x0500) && !defined(_WIN32_WCE)
BOOL GetCursorInfo(LPCURSORINFO pCursorInfo)
{
ATLASSERT(m_hCursor != NULL);
ATLASSERT(pCursorInfo != NULL);
return ::GetCursorInfo(pCursorInfo);
}
#endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE)
};
typedef CCursorT<false> CCursorHandle;
typedef CCursorT<true> CCursor;
///////////////////////////////////////////////////////////////////////////////
// CResource - Wraps a generic Windows resource.
// Use it with custom resource types other than the
// standard RT_CURSOR, RT_BITMAP, etc.
class CResource
{
public:
HGLOBAL m_hGlobal;
HRSRC m_hResource;
// Constructor/destructor
CResource() : m_hGlobal(NULL), m_hResource(NULL)
{ }
~CResource()
{
Release();
}
// Load methods
bool Load(ATL::_U_STRINGorID Type, ATL::_U_STRINGorID ID)
{
ATLASSERT(m_hResource == NULL);
ATLASSERT(m_hGlobal == NULL);
m_hResource = ::FindResource(ModuleHelper::GetResourceInstance(), ID.m_lpstr, Type.m_lpstr);
if(m_hResource == NULL)
return false;
m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
if(m_hGlobal == NULL)
{
m_hResource = NULL;
return false;
}
return true;
}
#ifndef _WIN32_WCE
bool LoadEx(ATL::_U_STRINGorID Type, ATL::_U_STRINGorID ID, WORD wLanguage)
{
ATLASSERT(m_hResource == NULL);
ATLASSERT(m_hGlobal == NULL);
m_hResource = ::FindResourceEx(ModuleHelper::GetResourceInstance(), ID.m_lpstr, Type.m_lpstr, wLanguage);
if(m_hResource == NULL)
return false;
m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
if(m_hGlobal == NULL)
{
m_hResource = NULL;
return false;
}
return true;
}
#endif // !_WIN32_WCE
// Misc. operations
DWORD GetSize() const
{
ATLASSERT(m_hResource != NULL);
return ::SizeofResource(ModuleHelper::GetResourceInstance(), m_hResource);
}
LPVOID Lock()
{
ATLASSERT(m_hResource != NULL);
ATLASSERT(m_hGlobal != NULL);
LPVOID pVoid = ::LockResource(m_hGlobal);
ATLASSERT(pVoid != NULL);
return pVoid;
}
void Release()
{
if(m_hGlobal != NULL)
{
FreeResource(m_hGlobal);
m_hGlobal = NULL;
m_hResource = NULL;
}
}
};
}; // namespace WTL
#endif // __ATLUSER_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -