15 #error atluser.h requires atlapp.h to be included first 57 ATLASSERT(hWndOwner == NULL || ::IsWindow(hWndOwner));
59 LPTSTR lpstrMessage = NULL;
60 if(IS_INTRESOURCE(message.m_lpstr))
62 for(
int nLen = 256; ; nLen *= 2)
64 ATLTRY(lpstrMessage =
new TCHAR[nLen]);
65 if(lpstrMessage == NULL)
70 int nRes = ::LoadString(ModuleHelper::GetResourceInstance(), LOWORD(message.m_lpstr), lpstrMessage, nLen);
73 delete [] lpstrMessage;
77 message.m_lpstr = lpstrMessage;
80 LPTSTR lpstrTitle = NULL;
81 if(IS_INTRESOURCE(title.m_lpstr) && LOWORD(title.m_lpstr) != 0)
83 for(
int nLen = 256; ; nLen *= 2)
85 ATLTRY(lpstrTitle =
new TCHAR[nLen]);
86 if(lpstrTitle == NULL)
91 int nRes = ::LoadString(ModuleHelper::GetResourceInstance(), LOWORD(title.m_lpstr), lpstrTitle, nLen);
98 title.m_lpstr = lpstrTitle;
101 int nRet = ::MessageBox(hWndOwner, message.m_lpstr, title.m_lpstr, uType);
103 delete [] lpstrMessage;
104 delete [] lpstrTitle;
113 #if (WINVER >= 0x0500) 114 #ifndef MII_SIZEOF_STRUCT 115 #define MII_SIZEOF_STRUCT(structname, member) (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member)) 117 #define MENUITEMINFO_SIZE_VERSION_400A MII_SIZEOF_STRUCT(MENUITEMINFOA, cch) 118 #define MENUITEMINFO_SIZE_VERSION_400W MII_SIZEOF_STRUCT(MENUITEMINFOW, cch) 120 #define MENUITEMINFO_SIZE_VERSION_400 MENUITEMINFO_SIZE_VERSION_400W 122 #define MENUITEMINFO_SIZE_VERSION_400 MENUITEMINFO_SIZE_VERSION_400A 124 #endif // (WINVER >= 0x0500) 131 memset(
this, 0,
sizeof(MENUITEMINFO));
132 cbSize =
sizeof(MENUITEMINFO);
133 #if (WINVER >= 0x0500) 135 if(AtlIsOldWindows())
137 ATLASSERT(cbSize > MENUITEMINFO_SIZE_VERSION_400);
138 cbSize = MENUITEMINFO_SIZE_VERSION_400;
140 #endif // (WINVER >= 0x0500) 151 template <
bool t_bManaged>
159 CMenuT(HMENU hMenu = NULL) : m_hMenu(hMenu)
164 if(t_bManaged && m_hMenu != NULL)
174 void Attach(HMENU hMenuNew)
176 ATLASSERT(::IsMenu(hMenuNew));
177 if(t_bManaged && m_hMenu != NULL && m_hMenu != hMenuNew)
178 ::DestroyMenu(m_hMenu);
184 HMENU hMenu = m_hMenu;
189 operator HMENU()
const {
return m_hMenu; }
191 bool IsNull()
const {
return (m_hMenu == NULL); }
195 return ::IsMenu(m_hMenu);
201 ATLASSERT(m_hMenu == NULL);
202 m_hMenu = ::CreateMenu();
203 return (m_hMenu != NULL) ? TRUE : FALSE;
206 BOOL CreatePopupMenu()
208 ATLASSERT(m_hMenu == NULL);
209 m_hMenu = ::CreatePopupMenu();
210 return (m_hMenu != NULL) ? TRUE : FALSE;
215 ATLASSERT(m_hMenu == NULL);
216 m_hMenu = ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
217 return (m_hMenu != NULL) ? TRUE : FALSE;
221 BOOL LoadMenuIndirect(
const void* lpMenuTemplate)
223 ATLASSERT(m_hMenu == NULL);
224 m_hMenu = ::LoadMenuIndirect(lpMenuTemplate);
225 return (m_hMenu != NULL) ? TRUE : FALSE;
227 #endif // !_WIN32_WCE 233 BOOL bRet = ::DestroyMenu(m_hMenu);
240 BOOL DeleteMenu(UINT nPosition, UINT nFlags)
242 ATLASSERT(::IsMenu(m_hMenu));
243 return ::DeleteMenu(m_hMenu, nPosition, nFlags);
246 BOOL TrackPopupMenu(UINT nFlags,
int x,
int y, HWND hWnd, LPCRECT lpRect = NULL)
248 ATLASSERT(::IsMenu(m_hMenu));
250 #if (WINVER >= 0x0500) 251 x = _FixTrackMenuPopupX(x, y);
252 #endif // !(WINVER >= 0x0500) 253 return ::TrackPopupMenu(m_hMenu, nFlags, x, y, 0, hWnd, lpRect);
256 return ::TrackPopupMenuEx(m_hMenu, nFlags, x, y, hWnd, NULL);
260 BOOL TrackPopupMenuEx(UINT uFlags,
int x,
int y, HWND hWnd, LPTPMPARAMS lptpm = NULL)
262 ATLASSERT(::IsMenu(m_hMenu));
263 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE) 264 x = _FixTrackMenuPopupX(x, y);
265 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE) 266 return ::TrackPopupMenuEx(m_hMenu, uFlags, x, y, hWnd, lptpm);
269 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE) 271 static int _FixTrackMenuPopupX(
int x,
int y)
274 HMONITOR hMonitor = ::MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
277 HMONITOR hMonitorNear = ::MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST);
278 if(hMonitorNear != NULL)
280 MONITORINFO mi = {
sizeof(MONITORINFO) };
281 if(::GetMonitorInfo(hMonitorNear, &mi) != FALSE)
283 if(x < mi.rcWork.left)
285 else if(x > mi.rcWork.right)
294 BOOL GetMenuInfo(LPMENUINFO lpMenuInfo)
const 296 ATLASSERT(::IsMenu(m_hMenu));
297 return ::GetMenuInfo(m_hMenu, lpMenuInfo);
300 BOOL SetMenuInfo(LPCMENUINFO lpMenuInfo)
302 ATLASSERT(::IsMenu(m_hMenu));
303 return ::SetMenuInfo(m_hMenu, lpMenuInfo);
305 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE) 308 BOOL AppendMenu(UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
310 ATLASSERT(::IsMenu(m_hMenu));
311 return ::AppendMenu(m_hMenu, nFlags, nIDNewItem, lpszNewItem);
314 BOOL AppendMenu(UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
316 ATLASSERT(::IsMenu(m_hMenu));
317 ATLASSERT(::IsMenu(hSubMenu));
318 return ::AppendMenu(m_hMenu, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
322 BOOL AppendMenu(UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
324 ATLASSERT(::IsMenu(m_hMenu));
325 return ::AppendMenu(m_hMenu, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
328 BOOL AppendMenu(UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
330 ATLASSERT(::IsMenu(m_hMenu));
331 ATLASSERT(::IsMenu(hSubMenu));
332 return ::AppendMenu(m_hMenu, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
334 #endif // !_WIN32_WCE 336 UINT CheckMenuItem(UINT nIDCheckItem, UINT nCheck)
338 ATLASSERT(::IsMenu(m_hMenu));
339 return (UINT)::CheckMenuItem(m_hMenu, nIDCheckItem, nCheck);
342 UINT EnableMenuItem(UINT nIDEnableItem, UINT nEnable)
344 ATLASSERT(::IsMenu(m_hMenu));
345 return ::EnableMenuItem(m_hMenu, nIDEnableItem, nEnable);
349 BOOL HiliteMenuItem(HWND hWnd, UINT uIDHiliteItem, UINT uHilite)
351 ATLASSERT(::IsMenu(m_hMenu));
352 return ::HiliteMenuItem(hWnd, m_hMenu, uIDHiliteItem, uHilite);
355 int GetMenuItemCount()
const 357 ATLASSERT(::IsMenu(m_hMenu));
358 return ::GetMenuItemCount(m_hMenu);
361 UINT GetMenuItemID(
int nPos)
const 363 ATLASSERT(::IsMenu(m_hMenu));
364 return ::GetMenuItemID(m_hMenu, nPos);
367 UINT GetMenuState(UINT nID, UINT nFlags)
const 369 ATLASSERT(::IsMenu(m_hMenu));
370 return ::GetMenuState(m_hMenu, nID, nFlags);
373 int GetMenuString(UINT nIDItem, LPTSTR lpString,
int nMaxCount, UINT nFlags)
const 375 ATLASSERT(::IsMenu(m_hMenu));
376 return ::GetMenuString(m_hMenu, nIDItem, lpString, nMaxCount, nFlags);
379 int GetMenuStringLen(UINT nIDItem, UINT nFlags)
const 381 ATLASSERT(::IsMenu(m_hMenu));
382 return ::GetMenuString(m_hMenu, nIDItem, NULL, 0, nFlags);
386 BOOL GetMenuString(UINT nIDItem, BSTR& bstrText, UINT nFlags)
const 389 ATLASSERT(::IsMenu(m_hMenu));
390 ATLASSERT(bstrText == NULL);
392 int nLen = GetMenuStringLen(nIDItem, nFlags);
395 bstrText = ::SysAllocString(OLESTR(
""));
396 return (bstrText != NULL) ? TRUE : FALSE;
401 LPTSTR lpszText = buff.Allocate(nLen);
405 if(!GetMenuString(nIDItem, lpszText, nLen, nFlags))
408 bstrText = ::SysAllocString(T2OLE(lpszText));
409 return (bstrText != NULL) ? TRUE : FALSE;
411 #endif // !_ATL_NO_COM 413 #elif (_ATL_VER >= 0x0800) 414 int GetMenuItemCount()
const 416 ATLASSERT(::IsMenu(m_hMenu));
417 return ATL::GetMenuItemCount(m_hMenu);
420 UINT GetMenuItemID(
int nPos)
const 422 ATLASSERT(::IsMenu(m_hMenu));
423 return ATL::GetMenuItemID(m_hMenu, nPos);
426 UINT GetMenuState(UINT nID, UINT nFlags)
const 428 ATLASSERT(::IsMenu(m_hMenu));
429 return ATL::GetMenuState(m_hMenu, nID, nFlags);
432 int GetMenuString(UINT nIDItem, LPTSTR lpString,
int nMaxCount, UINT nFlags)
const 434 ATLASSERT(::IsMenu(m_hMenu));
435 return ATL::GetMenuString(m_hMenu, nIDItem, lpString, nMaxCount, nFlags);
438 int GetMenuStringLen(UINT nIDItem, UINT nFlags)
const 440 ATLASSERT(::IsMenu(m_hMenu));
441 return ATL::GetMenuString(m_hMenu, nIDItem, NULL, 0, nFlags);
443 #endif // (_ATL_VER >= 0x0800) 445 #if defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) 446 int GetMenuString(UINT nIDItem, _CSTRING_NS::CString& strText, UINT nFlags)
const 448 ATLASSERT(::IsMenu(m_hMenu));
450 int nLen = GetMenuStringLen(nIDItem, nFlags);
455 LPTSTR lpstr = strText.GetBufferSetLength(nLen);
458 int nRet = GetMenuString(nIDItem, lpstr, nLen, nFlags);
459 strText.ReleaseBuffer();
462 #endif // defined(_WTL_USE_CSTRING) || defined(__ATLSTR_H__) 464 CMenuHandle GetSubMenu(
int nPos)
const 466 ATLASSERT(::IsMenu(m_hMenu));
467 return CMenuHandle(::GetSubMenu(m_hMenu, nPos));
470 BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
472 ATLASSERT(::IsMenu(m_hMenu));
473 return ::InsertMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
476 BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
478 ATLASSERT(::IsMenu(m_hMenu));
479 ATLASSERT(::IsMenu(hSubMenu));
480 return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
484 BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
486 ATLASSERT(::IsMenu(m_hMenu));
487 return ::InsertMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
490 BOOL InsertMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
492 ATLASSERT(::IsMenu(m_hMenu));
493 ATLASSERT(::IsMenu(hSubMenu));
494 return ::InsertMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
497 BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)
499 ATLASSERT(::IsMenu(m_hMenu));
500 return ::ModifyMenu(m_hMenu, nPosition, nFlags, nIDNewItem, lpszNewItem);
503 BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, LPCTSTR lpszNewItem)
505 ATLASSERT(::IsMenu(m_hMenu));
506 ATLASSERT(::IsMenu(hSubMenu));
507 return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_POPUP, (UINT_PTR)hSubMenu, lpszNewItem);
510 BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, HBITMAP hBmp)
512 ATLASSERT(::IsMenu(m_hMenu));
513 return ::ModifyMenu(m_hMenu, nPosition, nFlags | MF_BITMAP, nIDNewItem, (LPCTSTR)hBmp);
516 BOOL ModifyMenu(UINT nPosition, UINT nFlags, HMENU hSubMenu, HBITMAP hBmp)
518 ATLASSERT(::IsMenu(m_hMenu));
519 ATLASSERT(::IsMenu(hSubMenu));
520 return ::ModifyMenu(m_hMenu, nPosition, nFlags | (MF_BITMAP | MF_POPUP), (UINT_PTR)hSubMenu, (LPCTSTR)hBmp);
522 #endif // !_WIN32_WCE 524 BOOL RemoveMenu(UINT nPosition, UINT nFlags)
526 ATLASSERT(::IsMenu(m_hMenu));
527 return ::RemoveMenu(m_hMenu, nPosition, nFlags);
531 BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags, HBITMAP hBmpUnchecked, HBITMAP hBmpChecked)
533 ATLASSERT(::IsMenu(m_hMenu));
534 return ::SetMenuItemBitmaps(m_hMenu, nPosition, nFlags, hBmpUnchecked, hBmpChecked);
536 #endif // !_WIN32_WCE 538 BOOL CheckMenuRadioItem(UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags)
540 ATLASSERT(::IsMenu(m_hMenu));
541 return ::CheckMenuRadioItem(m_hMenu, nIDFirst, nIDLast, nIDItem, nFlags);
544 BOOL GetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
const 546 ATLASSERT(::IsMenu(m_hMenu));
547 return (BOOL)::GetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
550 BOOL SetMenuItemInfo(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
552 ATLASSERT(::IsMenu(m_hMenu));
553 return (BOOL)::SetMenuItemInfo(m_hMenu, uItem, bByPosition, lpmii);
557 BOOL InsertMenuItem(UINT uItem, BOOL bByPosition, LPMENUITEMINFO lpmii)
559 ATLASSERT(::IsMenu(m_hMenu));
560 return (BOOL)::InsertMenuItem(m_hMenu, uItem, bByPosition, lpmii);
563 UINT GetMenuDefaultItem(BOOL bByPosition = FALSE, UINT uFlags = 0U)
const 565 ATLASSERT(::IsMenu(m_hMenu));
566 return ::GetMenuDefaultItem(m_hMenu, (UINT)bByPosition, uFlags);
569 BOOL SetMenuDefaultItem(UINT uItem = (UINT)-1, BOOL bByPosition = FALSE)
571 ATLASSERT(::IsMenu(m_hMenu));
572 return ::SetMenuDefaultItem(m_hMenu, uItem, (UINT)bByPosition);
575 BOOL GetMenuItemRect(HWND hWnd, UINT uItem, LPRECT lprcItem)
const 577 ATLASSERT(::IsMenu(m_hMenu));
578 return ::GetMenuItemRect(hWnd, m_hMenu, uItem, lprcItem);
581 int MenuItemFromPoint(HWND hWnd, POINT point)
const 583 ATLASSERT(::IsMenu(m_hMenu));
584 return ::MenuItemFromPoint(hWnd, m_hMenu, point);
588 BOOL SetMenuContextHelpId(DWORD dwContextHelpId)
590 ATLASSERT(::IsMenu(m_hMenu));
591 return ::SetMenuContextHelpId(m_hMenu, dwContextHelpId);
594 DWORD GetMenuContextHelpId()
const 596 ATLASSERT(::IsMenu(m_hMenu));
597 return ::GetMenuContextHelpId(m_hMenu);
599 #endif // !_WIN32_WCE 606 template <
bool t_bManaged>
618 if(t_bManaged && m_hAccel != NULL)
619 ::DestroyAcceleratorTable(m_hAccel);
628 void Attach(HACCEL hAccel)
630 if(t_bManaged && m_hAccel != NULL)
631 ::DestroyAcceleratorTable(m_hAccel);
637 HACCEL hAccel = m_hAccel;
642 operator HACCEL()
const {
return m_hAccel; }
644 bool IsNull()
const {
return m_hAccel == NULL; }
649 ATLASSERT(m_hAccel == NULL);
650 m_hAccel = ::LoadAccelerators(ModuleHelper::GetResourceInstance(), accel.m_lpstr);
654 HACCEL CreateAcceleratorTable(LPACCEL pAccel,
int cEntries)
656 ATLASSERT(m_hAccel == NULL);
657 ATLASSERT(pAccel != NULL);
658 m_hAccel = ::CreateAcceleratorTable(pAccel, cEntries);
666 ::DestroyAcceleratorTable(m_hAccel);
673 int CopyAcceleratorTable(LPACCEL lpAccelDst,
int cEntries)
675 ATLASSERT(m_hAccel != NULL);
676 ATLASSERT(lpAccelDst != NULL);
677 return ::CopyAcceleratorTable(m_hAccel, lpAccelDst, cEntries);
680 int GetEntriesCount()
const 682 ATLASSERT(m_hAccel != NULL);
683 return ::CopyAcceleratorTable(m_hAccel, NULL, 0);
685 #endif // !_WIN32_WCE 687 BOOL TranslateAccelerator(HWND hWnd, LPMSG pMsg)
689 ATLASSERT(m_hAccel != NULL);
690 ATLASSERT(::IsWindow(hWnd));
691 ATLASSERT(pMsg != NULL);
692 return ::TranslateAccelerator(hWnd, m_hAccel, pMsg);
703 template <
bool t_bManaged>
710 CIconT(HICON hIcon = NULL) : m_hIcon(hIcon)
715 if(t_bManaged && m_hIcon != NULL)
716 ::DestroyIcon(m_hIcon);
725 void Attach(HICON hIcon)
727 if(t_bManaged && m_hIcon != NULL)
728 ::DestroyIcon(m_hIcon);
734 HICON hIcon = m_hIcon;
739 operator HICON()
const {
return m_hIcon; }
741 bool IsNull()
const {
return m_hIcon == NULL; }
746 ATLASSERT(m_hIcon == NULL);
747 m_hIcon = ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
751 HICON LoadIcon(
ATL::_U_STRINGorID icon,
int cxDesired,
int cyDesired, UINT fuLoad = 0)
753 ATLASSERT(m_hIcon == NULL);
754 m_hIcon = (HICON) ::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
759 HICON LoadOEMIcon(LPCTSTR lpstrIconName)
761 ATLASSERT(m_hIcon == NULL);
762 ATLASSERT(IsOEMIcon(lpstrIconName));
763 m_hIcon = ::LoadIcon(NULL, lpstrIconName);
767 HICON CreateIcon(
int nWidth,
int nHeight, BYTE cPlanes, BYTE cBitsPixel, CONST BYTE* lpbANDbits, CONST BYTE *lpbXORbits)
769 ATLASSERT(m_hIcon == NULL);
770 ATLASSERT(lpbANDbits != NULL);
771 ATLASSERT(lpbXORbits != NULL);
772 m_hIcon = ::CreateIcon(ModuleHelper::GetResourceInstance(), nWidth, nHeight, cPlanes, cBitsPixel, lpbANDbits, lpbXORbits);
776 HICON CreateIconFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
778 ATLASSERT(m_hIcon == NULL);
779 ATLASSERT(pBits != NULL);
780 m_hIcon = ::CreateIconFromResource(pBits, dwResSize, TRUE, dwVersion);
784 HICON CreateIconFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000,
int cxDesired = 0,
int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
786 ATLASSERT(m_hIcon == NULL);
787 ATLASSERT(pbBits != NULL);
788 ATLASSERT(cbBits > 0);
789 m_hIcon = ::CreateIconFromResourceEx(pbBits, cbBits, TRUE, dwVersion, cxDesired, cyDesired, uFlags);
792 #endif // !_WIN32_WCE 794 HICON CreateIconIndirect(PICONINFO pIconInfo)
796 ATLASSERT(m_hIcon == NULL);
797 ATLASSERT(pIconInfo != NULL);
798 m_hIcon = ::CreateIconIndirect(pIconInfo);
803 HICON ExtractIcon(LPCTSTR lpszExeFileName, UINT nIconIndex)
805 ATLASSERT(m_hIcon == NULL);
806 ATLASSERT(lpszExeFileName != NULL);
807 m_hIcon = ::ExtractIcon(ModuleHelper::GetModuleInstance(), lpszExeFileName, nIconIndex);
811 HICON ExtractAssociatedIcon(HINSTANCE hInst, LPTSTR lpIconPath, LPWORD lpiIcon)
813 ATLASSERT(m_hIcon == NULL);
814 ATLASSERT(lpIconPath != NULL);
815 ATLASSERT(lpiIcon != NULL);
816 m_hIcon = ::ExtractAssociatedIcon(hInst, lpIconPath, lpiIcon);
819 #endif // !_WIN32_WCE 823 ATLASSERT(m_hIcon != NULL);
824 BOOL bRet = ::DestroyIcon(m_hIcon);
834 ATLASSERT(m_hIcon != NULL);
835 return ::CopyIcon(m_hIcon);
838 HICON DuplicateIcon()
840 ATLASSERT(m_hIcon != NULL);
841 return ::DuplicateIcon(NULL, m_hIcon);
843 #endif // !_WIN32_WCE 845 BOOL DrawIcon(HDC hDC,
int x,
int y)
847 ATLASSERT(m_hIcon != NULL);
849 return ::DrawIcon(hDC, x, y, m_hIcon);
851 return ::DrawIconEx(hDC, x, y, m_hIcon, 0, 0, 0, NULL, DI_NORMAL);
855 BOOL DrawIcon(HDC hDC, POINT pt)
857 ATLASSERT(m_hIcon != NULL);
859 return ::DrawIcon(hDC, pt.x, pt.y, m_hIcon);
861 return ::DrawIconEx(hDC, pt.x, pt.y, m_hIcon, 0, 0, 0, NULL, DI_NORMAL);
865 BOOL DrawIconEx(HDC hDC,
int x,
int y,
int cxWidth,
int cyWidth, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
867 ATLASSERT(m_hIcon != NULL);
868 return ::DrawIconEx(hDC, x, y, m_hIcon, cxWidth, cyWidth, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
871 BOOL DrawIconEx(HDC hDC, POINT pt, SIZE size, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
873 ATLASSERT(m_hIcon != NULL);
874 return ::DrawIconEx(hDC, pt.x, pt.y, m_hIcon, size.cx, size.cy, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
878 BOOL GetIconInfo(PICONINFO pIconInfo)
const 880 ATLASSERT(m_hIcon != NULL);
881 ATLASSERT(pIconInfo != NULL);
882 return ::GetIconInfo(m_hIcon, pIconInfo);
885 #if (_WIN32_WINNT >= 0x0600) 886 BOOL GetIconInfoEx(PICONINFOEX pIconInfo)
const 888 ATLASSERT(m_hIcon != NULL);
889 ATLASSERT(pIconInfo != NULL);
890 return ::GetIconInfoEx(m_hIcon, pIconInfo);
892 #endif // (_WIN32_WINNT >= 0x0600) 894 #if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) 897 ATLASSERT(m_hIcon == NULL);
899 return ::LoadIconMetric(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), lims, &m_hIcon);
904 ATLASSERT(m_hIcon == NULL);
906 return ::LoadIconWithScaleDown(ModuleHelper::GetResourceInstance(), T2CW(icon.m_lpstr), cx, cy, &m_hIcon);
909 HRESULT LoadOEMIconMetric(LPCTSTR lpstrIconName,
int lims)
911 ATLASSERT(m_hIcon == NULL);
912 ATLASSERT(IsOEMIcon(lpstrIconName));
913 return ::LoadIconMetric(NULL, (LPCWSTR)lpstrIconName, lims, &m_hIcon);
916 HRESULT LoadOEMIconWithScaleDown(LPCTSTR lpstrIconName,
int cx,
int cy)
918 ATLASSERT(m_hIcon == NULL);
919 ATLASSERT(IsOEMIcon(lpstrIconName));
921 return ::LoadIconWithScaleDown(NULL, (LPCWSTR)lpstrIconName, cx, cy, &m_hIcon);
923 #endif // defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_LONGHORN) 924 #endif // !_WIN32_WCE 928 static bool IsOEMIcon(LPCTSTR lpstrIconName)
930 #if (WINVER >= 0x0600) 931 return (lpstrIconName == IDI_APPLICATION || lpstrIconName == IDI_ASTERISK || lpstrIconName == IDI_EXCLAMATION ||
932 lpstrIconName == IDI_HAND || lpstrIconName == IDI_QUESTION || lpstrIconName == IDI_WINLOGO ||
933 lpstrIconName == IDI_SHIELD);
934 #else // !(WINVER >= 0x0600) 935 return (lpstrIconName == IDI_APPLICATION || lpstrIconName == IDI_ASTERISK || lpstrIconName == IDI_EXCLAMATION ||
936 lpstrIconName == IDI_HAND || lpstrIconName == IDI_QUESTION || lpstrIconName == IDI_WINLOGO);
937 #endif // !(WINVER >= 0x0600) 939 #endif // !_WIN32_WCE 954 template <
bool t_bManaged>
961 CCursorT(HCURSOR hCursor = NULL) : m_hCursor(hCursor)
966 if(t_bManaged && m_hCursor != NULL)
976 void Attach(HCURSOR hCursor)
978 if(t_bManaged && m_hCursor != NULL)
985 HCURSOR hCursor = m_hCursor;
990 operator HCURSOR()
const {
return m_hCursor; }
992 bool IsNull()
const {
return m_hCursor == NULL; }
997 ATLASSERT(m_hCursor == NULL);
998 m_hCursor = ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
1002 HCURSOR LoadSysCursor(LPCTSTR lpstrCursorName)
1004 ATLASSERT(m_hCursor == NULL);
1005 #if (WINVER >= 0x0500) 1006 ATLASSERT(lpstrCursorName == IDC_ARROW || lpstrCursorName == IDC_IBEAM || lpstrCursorName == IDC_WAIT ||
1007 lpstrCursorName == IDC_CROSS || lpstrCursorName == IDC_UPARROW || lpstrCursorName == IDC_SIZE ||
1008 lpstrCursorName == IDC_ICON || lpstrCursorName == IDC_SIZENWSE || lpstrCursorName == IDC_SIZENESW ||
1009 lpstrCursorName == IDC_SIZEWE || lpstrCursorName == IDC_SIZENS || lpstrCursorName == IDC_SIZEALL ||
1010 lpstrCursorName == IDC_NO || lpstrCursorName == IDC_APPSTARTING || lpstrCursorName == IDC_HELP ||
1011 lpstrCursorName == IDC_HAND);
1012 #else // !(WINVER >= 0x0500) 1013 ATLASSERT(lpstrCursorName == IDC_ARROW || lpstrCursorName == IDC_IBEAM || lpstrCursorName == IDC_WAIT ||
1014 lpstrCursorName == IDC_CROSS || lpstrCursorName == IDC_UPARROW || lpstrCursorName == IDC_SIZE ||
1015 lpstrCursorName == IDC_ICON || lpstrCursorName == IDC_SIZENWSE || lpstrCursorName == IDC_SIZENESW ||
1016 lpstrCursorName == IDC_SIZEWE || lpstrCursorName == IDC_SIZENS || lpstrCursorName == IDC_SIZEALL ||
1017 lpstrCursorName == IDC_NO || lpstrCursorName == IDC_APPSTARTING || lpstrCursorName == IDC_HELP);
1018 #endif // !(WINVER >= 0x0500) 1019 m_hCursor = ::LoadCursor(NULL, lpstrCursorName);
1024 HCURSOR LoadOEMCursor(LPCTSTR lpstrCursorName)
1026 return LoadSysCursor(lpstrCursorName);
1029 HCURSOR LoadCursor(
ATL::_U_STRINGorID cursor,
int cxDesired,
int cyDesired, UINT fuLoad = 0)
1031 ATLASSERT(m_hCursor == NULL);
1032 m_hCursor = (HCURSOR) ::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
1037 HCURSOR LoadCursorFromFile(LPCTSTR pstrFilename)
1039 ATLASSERT(m_hCursor == NULL);
1040 ATLASSERT(pstrFilename != NULL);
1041 m_hCursor = ::LoadCursorFromFile(pstrFilename);
1044 #endif // !_WIN32_WCE 1046 #if !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP))) 1047 HCURSOR CreateCursor(
int xHotSpot,
int yHotSpot,
int nWidth,
int nHeight, CONST VOID *pvANDPlane, CONST VOID *pvXORPlane)
1049 ATLASSERT(m_hCursor == NULL);
1050 m_hCursor = ::CreateCursor(ModuleHelper::GetResourceInstance(), xHotSpot, yHotSpot, nWidth, nHeight, pvANDPlane, pvXORPlane);
1053 #endif // !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP))) 1056 HCURSOR CreateCursorFromResource(PBYTE pBits, DWORD dwResSize, DWORD dwVersion = 0x00030000)
1058 ATLASSERT(m_hCursor == NULL);
1059 ATLASSERT(pBits != NULL);
1060 m_hCursor = (HCURSOR)::CreateIconFromResource(pBits, dwResSize, FALSE, dwVersion);
1064 HCURSOR CreateCursorFromResourceEx(PBYTE pbBits, DWORD cbBits, DWORD dwVersion = 0x00030000,
int cxDesired = 0,
int cyDesired = 0, UINT uFlags = LR_DEFAULTCOLOR)
1066 ATLASSERT(m_hCursor == NULL);
1067 ATLASSERT(pbBits != NULL);
1068 ATLASSERT(cbBits > 0);
1069 m_hCursor = (HCURSOR)::CreateIconFromResourceEx(pbBits, cbBits, FALSE, dwVersion, cxDesired, cyDesired, uFlags);
1072 #endif // !_WIN32_WCE 1074 BOOL DestroyCursor()
1076 ATLASSERT(m_hCursor != NULL);
1077 #if !defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP))) 1078 BOOL bRet = ::DestroyCursor(m_hCursor);
1082 #else // !(!defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)))) 1083 ATLTRACE2(atlTraceUI, 0, _T(
"Warning: This version of Windows CE does not have ::DestroyCursor()\n"));
1085 #endif // !(!defined(_WIN32_WCE) || ((_WIN32_WCE >= 0x400) && !(defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)))) 1090 HCURSOR CopyCursor()
1092 ATLASSERT(m_hCursor != NULL);
1093 return (HCURSOR)::CopyIcon((HICON)m_hCursor);
1095 #endif // !_WIN32_WCE 1097 #if (WINVER >= 0x0500) && !defined(_WIN32_WCE) 1098 BOOL GetCursorInfo(LPCURSORINFO pCursorInfo)
1100 ATLASSERT(m_hCursor != NULL);
1101 ATLASSERT(pCursorInfo != NULL);
1102 return ::GetCursorInfo(pCursorInfo);
1104 #endif // (WINVER >= 0x0500) && !defined(_WIN32_WCE) 1123 CResource() : m_hGlobal(NULL), m_hResource(NULL)
1134 ATLASSERT(m_hResource == NULL);
1135 ATLASSERT(m_hGlobal == NULL);
1137 m_hResource = ::FindResource(ModuleHelper::GetResourceInstance(), ID.m_lpstr, Type.m_lpstr);
1138 if(m_hResource == NULL)
1141 m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
1142 if(m_hGlobal == NULL)
1154 ATLASSERT(m_hResource == NULL);
1155 ATLASSERT(m_hGlobal == NULL);
1157 m_hResource = ::FindResourceEx(ModuleHelper::GetResourceInstance(), Type.m_lpstr, ID.m_lpstr, wLanguage);
1158 if(m_hResource == NULL)
1161 m_hGlobal = ::LoadResource(ModuleHelper::GetResourceInstance(), m_hResource);
1162 if(m_hGlobal == NULL)
1170 #endif // !_WIN32_WCE 1173 DWORD GetSize()
const 1175 ATLASSERT(m_hResource != NULL);
1176 return ::SizeofResource(ModuleHelper::GetResourceInstance(), m_hResource);
1181 ATLASSERT(m_hResource != NULL);
1182 ATLASSERT(m_hGlobal != NULL);
1183 LPVOID pVoid = ::LockResource(m_hGlobal);
1184 ATLASSERT(pVoid != NULL);
1190 if(m_hGlobal != NULL)
1192 FreeResource(m_hGlobal);
1211 {
return (WORD*)(
this+1); }
1220 return ::LoadAccelerators(ModuleHelper::GetResourceInstance(), table.m_lpstr);
1225 return ::LoadMenu(ModuleHelper::GetResourceInstance(), menu.m_lpstr);
1230 return ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr);
1237 WORD wID = LOWORD(bitmap.m_lpstr);
1238 ATLASSERT(wID >= 32734 && wID <= 32767);
1240 return ::LoadBitmap(NULL, bitmap.m_lpstr);
1242 #endif // OEMRESOURCE 1246 return ::LoadCursor(ModuleHelper::GetResourceInstance(), cursor.m_lpstr);
1249 inline HCURSOR AtlLoadSysCursor(LPCTSTR lpCursorName)
1251 #if (WINVER >= 0x0500) 1252 ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
1253 lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
1254 lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
1255 lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
1256 lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP ||
1257 lpCursorName == IDC_HAND);
1258 #else // !(WINVER >= 0x0500) 1259 ATLASSERT(lpCursorName == IDC_ARROW || lpCursorName == IDC_IBEAM || lpCursorName == IDC_WAIT ||
1260 lpCursorName == IDC_CROSS || lpCursorName == IDC_UPARROW || lpCursorName == IDC_SIZE ||
1261 lpCursorName == IDC_ICON || lpCursorName == IDC_SIZENWSE || lpCursorName == IDC_SIZENESW ||
1262 lpCursorName == IDC_SIZEWE || lpCursorName == IDC_SIZENS || lpCursorName == IDC_SIZEALL ||
1263 lpCursorName == IDC_NO || lpCursorName == IDC_APPSTARTING || lpCursorName == IDC_HELP);
1264 #endif // !(WINVER >= 0x0500) 1265 return ::LoadCursor(NULL, lpCursorName);
1270 return ::LoadIcon(ModuleHelper::GetResourceInstance(), icon.m_lpstr);
1274 inline HICON AtlLoadSysIcon(LPCTSTR lpIconName)
1276 #if (WINVER >= 0x0600) 1277 ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
1278 lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO ||
1279 lpIconName == IDI_SHIELD);
1280 #else // !(WINVER >= 0x0600) 1281 ATLASSERT(lpIconName == IDI_APPLICATION || lpIconName == IDI_ASTERISK || lpIconName == IDI_EXCLAMATION ||
1282 lpIconName == IDI_HAND || lpIconName == IDI_QUESTION || lpIconName == IDI_WINLOGO);
1283 #endif // !(WINVER >= 0x0600) 1284 return ::LoadIcon(NULL, lpIconName);
1286 #endif // !_WIN32_WCE 1288 inline HBITMAP AtlLoadBitmapImage(
ATL::_U_STRINGorID bitmap, UINT fuLoad = LR_DEFAULTCOLOR)
1290 return (HBITMAP)::LoadImage(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr, IMAGE_BITMAP, 0, 0, fuLoad);
1293 inline HCURSOR AtlLoadCursorImage(
ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE,
int cxDesired = 0,
int cyDesired = 0)
1295 return (HCURSOR)::LoadImage(ModuleHelper::GetResourceInstance(), cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
1298 inline HICON AtlLoadIconImage(
ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE,
int cxDesired = 0,
int cyDesired = 0)
1300 return (HICON)::LoadImage(ModuleHelper::GetResourceInstance(), icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
1304 inline HBITMAP AtlLoadSysBitmapImage(WORD wBitmapID, UINT fuLoad = LR_DEFAULTCOLOR)
1306 ATLASSERT(wBitmapID >= 32734 && wBitmapID <= 32767);
1307 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0);
1308 return (HBITMAP)::LoadImage(NULL, MAKEINTRESOURCE(wBitmapID), IMAGE_BITMAP, 0, 0, fuLoad);
1310 #endif // OEMRESOURCE 1312 inline HCURSOR AtlLoadSysCursorImage(
ATL::_U_STRINGorID cursor, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE,
int cxDesired = 0,
int cyDesired = 0)
1315 WORD wID = LOWORD(cursor.m_lpstr);
1316 ATLASSERT((wID >= 32512 && wID <= 32516) || (wID >= 32640 && wID <= 32648) || (wID == 32650) || (wID == 32651));
1317 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0);
1319 return (HCURSOR)::LoadImage(NULL, cursor.m_lpstr, IMAGE_CURSOR, cxDesired, cyDesired, fuLoad);
1322 inline HICON AtlLoadSysIconImage(
ATL::_U_STRINGorID icon, UINT fuLoad = LR_DEFAULTCOLOR | LR_DEFAULTSIZE,
int cxDesired = 0,
int cyDesired = 0)
1325 WORD wID = LOWORD(icon.m_lpstr);
1326 ATLASSERT(wID >= 32512 && wID <= 32517);
1327 ATLASSERT((fuLoad & LR_LOADFROMFILE) == 0);
1329 return (HICON)::LoadImage(NULL, icon.m_lpstr, IMAGE_ICON, cxDesired, cyDesired, fuLoad);
1332 #if (_ATL_VER < 0x0700) 1333 inline int AtlLoadString(UINT uID, LPTSTR lpBuffer,
int nBufferMax)
1335 return ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpBuffer, nBufferMax);
1339 using ATL::AtlLoadString;
1341 #endif // (_ATL_VER < 0x0700) 1343 #ifdef _WIN32_WCE // CE only direct access to the resource 1344 inline LPCTSTR AtlLoadString(UINT uID)
1346 LPCTSTR s = (LPCTSTR)::LoadString(ModuleHelper::GetResourceInstance(), uID, NULL, 0);
1347 #ifdef DEBUG // Check for null-termination 1350 ATLASSERT(s[*((WORD*)s -1) - 1] == L
'\0');
1354 #endif // _WIN32_WCE 1356 inline bool AtlLoadString(UINT uID, BSTR& bstrText)
1359 ATLASSERT(bstrText == NULL);
1361 LPTSTR lpstrText = NULL;
1363 for(
int nLen = 256; ; nLen *= 2)
1365 ATLTRY(lpstrText =
new TCHAR[nLen]);
1366 if(lpstrText == NULL)
1368 nRes = ::LoadString(ModuleHelper::GetResourceInstance(), uID, lpstrText, nLen);
1371 delete [] lpstrText;
1375 if(lpstrText != NULL)
1378 bstrText = ::SysAllocString(T2OLE(lpstrText));
1379 delete [] lpstrText;
1382 return (bstrText != NULL) ?
true :
false;
1387 #endif // __ATLUSER_H__ Definition: atluser.h:704
Definition: atlwinx.h:452
Definition: atluser.h:1116
Definition: atluser.h:955
Definition: atluser.h:607
Definition: atlapp.h:1455