📄 atluser.h
字号:
nLen++; // increment to include terminating NULL char
CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
LPTSTR lpszText = buff.Allocate(nLen);
if(lpszText == NULL)
return FALSE;
if(!GetMenuString(nIDItem, lpszText, nLen, nFlags))
return FALSE;
bstrText = ::SysAllocString(T2OLE(lpszText));
return (bstrText != NULL) ? TRUE : FALSE;
}
#endif // !_ATL_NO_COM
#endif // !_WIN32_WCE
#if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
int GetMenuString(UINT nIDItem, _CSTRING_NS::CString& strText, UINT nFlags) const
{
ATLASSERT(::IsMenu(m_hMenu));
int nLen = GetMenuStringLen(nIDItem, nFlags);
if(nLen == 0)
return 0;
nLen++; // increment to include terminating NULL char
LPTSTR lpstr = strText.GetBufferSetLength(nLen);
if(lpstr == NULL)
return 0;
int nRet = GetMenuString(nIDItem, lpstr, nLen, nFlags);
strText.ReleaseBuffer();
return nRet;
}
#endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__)
CMenuHandle GetSubMenu(int nPos) const
{
ATLASSERT(::IsMenu(m_hMenu));
return CMenuHandle(::GetSubMenu(m_hMenu, nPos));
}
BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::InsertMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
}
BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
{
ATLASSERT(::IsMenu(m_hMenu));
ATLASSERT(::IsMenu(hSubMenu));
return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
}
#ifndef _WIN32_WCE
BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
}
BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
{
ATLASSERT(::IsMenu(m_hMenu));
ATLASSERT(::IsMenu(hSubMenu));
return ::InsertMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
}
BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::ModifyMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
}
BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
{
ATLASSERT(::IsMenu(m_hMenu));
ATLASSERT(::IsMenu(hSubMenu));
return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
}
BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
}
BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
{
ATLASSERT(::IsMenu(m_hMenu));
ATLASSERT(::IsMenu(hSubMenu));
return ::ModifyMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
}
#endif // !_WIN32_WCE
BOOL RemoveMenu(UINT nPosition, UINT nFlags)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::RemoveMenu(m_hMenu, nPosition, nFlags);
}
#ifndef _WIN32_WCE
BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags, HBITMAP hBmpUnchecked, HBITMAP hBmpChecked)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::SetMenuItemBitmaps(m_hMenu, nPosition, nFlags, hBmpUnchecked, hBmpChecked);
}
#endif // !_WIN32_WCE
BOOL CheckMenuRadioItem(UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::CheckMenuRadioItem(m_hMenu, nIDFirst, nIDLast, nIDItem, nFlags);
}
BOOL GetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii) const
{
ATLASSERT(::IsMenu(m_hMenu));
return (BOOL)::GetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
}
BOOL SetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
{
ATLASSERT(::IsMenu(m_hMenu));
return (BOOL)::SetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
}
#ifndef _WIN32_WCE
BOOL InsertMenuItem(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
{
ATLASSERT(::IsMenu(m_hMenu));
return (BOOL)::InsertMenuItem(m_hMenu, uItem, bByPosition, lpmii);
}
UINT GetMenuDefaultItem(BOOL bByPosition = FALSE, UINT uFlags = 0U) const
{
ATLASSERT(::IsMenu(m_hMenu));
return ::GetMenuDefaultItem(m_hMenu, (UINT)bByPosition, uFlags);
}
BOOL SetMenuDefaultItem(UINT uItem = (UINT)-1, BOOL bByPosition = FALSE)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::SetMenuDefaultItem(m_hMenu, uItem, (UINT)bByPosition);
}
BOOL GetMenuItemRect(HWND hWnd, UINT uItem, LPRECT lprcItem) const
{
ATLASSERT(::IsMenu(m_hMenu));
return ::GetMenuItemRect(hWnd, m_hMenu, uItem, lprcItem);
}
int MenuItemFromPoint(HWND hWnd, POINT point) const
{
ATLASSERT(::IsMenu(m_hMenu));
return ::MenuItemFromPoint(hWnd, m_hMenu, point);
}
// Context Help Functions
BOOL SetMenuContextHelpId(DWORD dwContextHelpId)
{
ATLASSERT(::IsMenu(m_hMenu));
return ::SetMenuContextHelpId(m_hMenu, dwContextHelpId);
}
DWORD GetMenuContextHelpId() const
{
ATLASSERT(::IsMenu(m_hMenu));
return ::GetMenuContextHelpId(m_hMenu);
}
#endif // !_WIN32_WCE
};
///////////////////////////////////////////////////////////////////////////////
// CAccelerator
template <bool t_bManaged>
class CAcceleratorT
{
public:
HACCEL m_hAccel;
// Constructor/destructor/operators
CAcceleratorT(HACCEL hAccel = NULL) : m_hAccel(hAccel)
{ }
~CAcceleratorT()
{
if(t_bManaged && m_hAccel != NULL)
::DestroyAcceleratorTable(m_hAccel);
}
CAcceleratorT<t_bManaged>& operator =(HACCEL hAccel)
{
Attach(hAccel);
return *this;
}
void Attach(HACCEL hAccel)
{
if(t_bManaged && m_hAccel != NULL)
::DestroyAcceleratorTable(m_hAccel);
m_hAccel = hAccel;
}
HACCEL Detach()
{
HACCEL hAccel = m_hAccel;
m_hAccel = NULL;
return hAccel;
}
operator HACCEL() const { return m_hAccel; }
bool IsNull() const { return m_hAccel == NULL; }
// Create/destroy methods
HACCEL LoadAccelerators(ATL::_U_STRINGorID accel)
{
ATLASSERT(m_hAccel == NULL);
m_hAccel = ::LoadAccelerators(ModuleHelper::GetResourceInstance(), accel.m_lpstr);
return m_hAccel;
}
HACCEL CreateAcceleratorTable(LPACCEL pAccel, int cEntries)
{
ATLASSERT(m_hAccel == NULL);
ATLASSERT(pAccel != NULL);
m_hAccel = ::CreateAcceleratorTable(pAccel, cEntries);
return m_hAccel;
}
void DestroyObject()
{
if(m_hAccel != NULL)
{
::DestroyAcceleratorTable(m_hAccel);
m_hAccel = NULL;
}
}
// Operations
#ifndef _WIN32_WCE
int CopyAcceleratorTable(LPACCEL lpAccelDst, int cEntries)
{
ATLASSERT(m_hAccel != NULL);
ATLASSERT(lpAccelDst != NULL);
return ::CopyAcceleratorTable(m_hAccel, lpAccelDst, cEntries);
}
int GetEntriesCount() const
{
ATLASSERT(m_hAccel != NULL);
return ::CopyAcceleratorTable(m_hAccel, NULL, 0);
}
#endif // !_WIN32_WCE
BOOL TranslateAccelerator(HWND hWnd, LPMSG pMsg)
{
ATLASSERT(m_hAccel != NULL);
ATLASSERT(::IsWindow(hWnd));
ATLASSERT(pMsg != NULL);
return ::TranslateAccelerator(hWnd, m_hAccel, pMsg);
}
};
typedef CAcceleratorT<false> CAcceleratorHandle;
typedef CAcceleratorT<true> CAccelerator;
///////////////////////////////////////////////////////////////////////////////
// CIcon
template <bool t_bManaged>
class CIconT
{
public:
HICON m_hIcon;
// Constructor/destructor/operators
CIconT(HICON hIcon = NULL) : m_hIcon(hIcon)
{ }
~CIconT()
{
if(t_bManaged && m_hIcon != NULL)
::DestroyIcon(m_hIcon);
}
CIconT<t_bManaged>& operator =(HICON hIcon)
{
Attach(hIcon);
return *this;
}
void Attach(HICON hIcon)
{
if(t_bManaged && m_hIcon != NULL)
::DestroyIcon(m_hIcon);
m_hIcon = hIcon;
}
HICON Detach()
{
HICON hIcon = m_hIcon;
m_hIcon = NULL;
return hIcon;
}
operator HICON() const { return m_hIcon; }
bool IsNull() const { return m_hIcon == NULL; }
// Create/destroy methods
HICON LoadIcon(ATL::_U_STRINGorID icon)
{
ATLASSERT(m_hIcon == NULL);
m_hIcon = ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
return m_hIcon;
}
HICON LoadIcon(ATL::_U_STRINGorID icon, int cxDesired, int cyDesired, UINT fuLoad = 0)
{
ATLASSERT(m_hIcon == NULL);
m_hIcon = (HICON) ::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
return m_hIcon;
}
#ifndef _WIN32_WCE
HICON LoadOEMIcon(LPCTSTR lpstrIconName)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(IsOEMIcon(lpstrIconName));
m_hIcon = ::LoadIcon(NULL, lpstrIconName);
return m_hIcon;
}
HICON CreateIcon(int nWidth, int nHeight, BYTE cPlanes, BYTE cBitsPixel, CONST BYTE* lpbANDbits, CONST BYTE *lpbXORbits)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(lpbANDbits != NULL);
ATLASSERT(lpbXORbits != NULL);
m_hIcon = ::CreateIcon(ModuleHelper::GetResourceInstance(), nWidth, nHeight, cPlanes, cBitsPixel, lpbANDbits, lpbXORbits);
return m_hIcon;
}
HICON CreateIconFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(pBits != NULL);
m_hIcon = ::CreateIconFromResource(pBits, dwResSize, TRUE, dwVersion);
return m_hIcon;
}
HICON CreateIconFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000, int cxDesired = 0, int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(pbBits != NULL);
ATLASSERT(cbBits > 0);
m_hIcon = ::CreateIconFromResourceEx(pbBits, cbBits, TRUE, dwVersion, cxDesired, cyDesired, uFlags);
return m_hIcon;
}
#endif // !_WIN32_WCE
HICON CreateIconIndirect(PICONINFO pIconInfo)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(pIconInfo != NULL);
m_hIcon = ::CreateIconIndirect(pIconInfo);
return m_hIcon;
}
#ifndef _WIN32_WCE
HICON ExtractIcon(LPCTSTR lpszExeFileName, UINT nIconIndex)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(lpszExeFileName != NULL);
m_hIcon = ::ExtractIcon(ModuleHelper::GetModuleInstance(), lpszExeFileName, nIconIndex);
return m_hIcon;
}
HICON ExtractAssociatedIcon(HINSTANCE hInst, LPTSTR lpIconPath, LPWORD lpiIcon)
{
ATLASSERT(m_hIcon == NULL);
ATLASSERT(lpIconPath != NULL);
ATLASSERT(lpiIcon != NULL);
m_hIcon = ::ExtractAssociatedIcon(hInst, lpIconPath, lpiIcon);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -