diff options
Diffstat (limited to 'mmc_updater/depends/win32cpp/menu.h')
-rw-r--r-- | mmc_updater/depends/win32cpp/menu.h | 600 |
1 files changed, 0 insertions, 600 deletions
diff --git a/mmc_updater/depends/win32cpp/menu.h b/mmc_updater/depends/win32cpp/menu.h deleted file mode 100644 index 136bafa3..00000000 --- a/mmc_updater/depends/win32cpp/menu.h +++ /dev/null @@ -1,600 +0,0 @@ -// Win32++ Version 7.2 -// Released: 5th AUgust 2011 -// -// David Nash -// email: dnash@bigpond.net.au -// url: https://sourceforge.net/projects/win32-framework -// -// -// Copyright (c) 2005-2011 David Nash -// -// Permission is hereby granted, free of charge, to -// any person obtaining a copy of this software and -// associated documentation files (the "Software"), -// to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, -// merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom -// the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice -// shall be included in all copies or substantial portions -// of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -// OR OTHER DEALINGS IN THE SOFTWARE. -// -//////////////////////////////////////////////////////// - - -//////////////////////////////////////////////////////// -// menu.h -// Declaration of the CMenu class - -// Notes -// 1) Owner-drawn menus send the WM_MEASUREITEM and WM_DRAWITEM messages -// to the window that owns the menu. To manage owner drawing for menus, -// handle these two messages in the CWnd's WndProc function. -// -// 2) The CMenu pointer returned by FromHandle might be a temporary pointer. It -// should be used immediately, not saved for later use. -// -// 3) The CMenu pointers returned by FromHandle or GetSubMenu do not need -// to be deleted. They are automatically deleted by the Win32++. -// -// 4) CMenu pointers returned by GetSubMenu are deleted when the parent CMenu is -// detached, destroyed or deconstructed. -// -// 5) The HMENU that is attached to a CMenu object (using the attach function) is -// automatically deleted when the CMenu object goes out of scope. Detach the -// HMENU to stop it being deleted when CMenu's destructor is called. -// -// 6) Pass CMenu objects by reference or by pointer when passing them as function -// arguments. -// -// 7) In those functions that use a MENUITEMINFO structure, its cbSize member is -// automatically set to the correct value. - -// Program sample -// -------------- -// void CView::CreatePopup() -// { -// CPoint pt = GetCursorPos(); -// -// // Create the menu -// CMenu Popup; -// Popup.CreatePopupMenu(); -// -// // Add some menu items -// Popup.AppendMenu(MF_STRING, 101, _T("Menu Item &1")); -// Popup.AppendMenu(MF_STRING, 102, _T("Menu Item &2")); -// Popup.AppendMenu(MF_STRING, 103, _T("Menu Item &3")); -// Popup.AppendMenu(MF_SEPARATOR); -// Popup.AppendMenu(MF_STRING, 104, _T("Menu Item &4")); -// -// // Set menu item states -// Popup.CheckMenuRadioItem(101, 101, 101, MF_BYCOMMAND); -// Popup.CheckMenuItem(102, MF_BYCOMMAND | MF_CHECKED); -// Popup.EnableMenuItem(103, MF_BYCOMMAND | MF_GRAYED); -// Popup.SetDefaultItem(104); -// -// // Display the popup menu -// Popup.TrackPopupMenu(0, pt.x, pt.y, this); -// } - - - -#if !defined(_WIN32XX_MENU_H_) && !defined(_WIN32_WCE) -#define _WIN32XX_MENU_H_ - - -#include "wincore.h" -#include "gdi.h" - - -namespace Win32xx -{ - - // Forward declarations - class CBitmap; - - class CMenu - { - friend class CWinApp; - - public: - //Construction - CMenu() : m_hMenu(0), m_IsTmpMenu(FALSE) {} - CMenu(UINT nID) : m_IsTmpMenu(FALSE) - { - m_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(nID)); - } - ~CMenu(); - - //Initialization - void Attach(HMENU hMenu); - void CreateMenu(); - void CreatePopupMenu(); - void DestroyMenu(); - HMENU Detach(); - HMENU GetHandle() const; - BOOL LoadMenu(LPCTSTR lpszResourceName); - BOOL LoadMenu(UINT uIDResource); - BOOL LoadMenuIndirect(const void* lpMenuTemplate); - - //Menu Operations - BOOL TrackPopupMenu(UINT uFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = 0); - BOOL TrackPopupMenuEx(UINT uFlags, int x, int y, CWnd* pWnd, LPTPMPARAMS lptpm); - - //Menu Item Operations - BOOL AppendMenu(UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL); - BOOL AppendMenu(UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp); - UINT CheckMenuItem(UINT uIDCheckItem, UINT uCheck); - BOOL CheckMenuRadioItem(UINT uIDFirst, UINT uIDLast, UINT uIDItem, UINT uFlags); - BOOL DeleteMenu(UINT uPosition, UINT uFlags); - UINT EnableMenuItem(UINT uIDEnableItem, UINT uEnable); - UINT GetDefaultItem(UINT gmdiFlags, BOOL fByPos = FALSE); - DWORD GetMenuContextHelpId() const; - -#if(WINVER >= 0x0500) // Minimum OS required is Win2000 - BOOL GetMenuInfo(LPMENUINFO lpcmi) const; - BOOL SetMenuInfo(LPCMENUINFO lpcmi); -#endif - - UINT GetMenuItemCount() const; - UINT GetMenuItemID(int nPos) const; - BOOL GetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE); - UINT GetMenuState(UINT uID, UINT uFlags) const; - int GetMenuString(UINT uIDItem, LPTSTR lpString, int nMaxCount, UINT uFlags) const; - int GetMenuString(UINT uIDItem, CString& rString, UINT uFlags) const; - CMenu* GetSubMenu(int nPos); - BOOL InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL); - BOOL InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp); - BOOL InsertMenuItem(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE); - BOOL ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem = 0, LPCTSTR lpszNewItem = NULL); - BOOL ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp); - BOOL RemoveMenu(UINT uPosition, UINT uFlags); - BOOL SetDefaultItem(UINT uItem, BOOL fByPos = FALSE); - BOOL SetMenuContextHelpId(DWORD dwContextHelpId); - BOOL SetMenuItemBitmaps(UINT uPosition, UINT uFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked); - BOOL SetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos = FALSE); - - //Operators - BOOL operator != (const CMenu& menu) const; - BOOL operator == (const CMenu& menu) const; - operator HMENU () const; - - private: - CMenu(const CMenu&); // Disable copy construction - CMenu& operator = (const CMenu&); // Disable assignment operator - void AddToMap(); - BOOL RemoveFromMap(); - std::vector<MenuPtr> m_vSubMenus; // A vector of smart pointers to CMenu - HMENU m_hMenu; - BOOL m_IsTmpMenu; - }; - - inline CMenu::~CMenu() - { - if (m_hMenu) - { - if (!m_IsTmpMenu) - { - ::DestroyMenu(m_hMenu); - } - - RemoveFromMap(); - } - - m_vSubMenus.clear(); - } - - inline void CMenu::AddToMap() - // Store the HMENU and CMenu pointer in the HMENU map - { - assert( GetApp() ); - assert(m_hMenu); - - GetApp()->m_csMapLock.Lock(); - GetApp()->m_mapHMENU.insert(std::make_pair(m_hMenu, this)); - GetApp()->m_csMapLock.Release(); - } - - inline BOOL CMenu::RemoveFromMap() - { - BOOL Success = FALSE; - - if (GetApp()) - { - // Allocate an iterator for our HDC map - std::map<HMENU, CMenu*, CompareHMENU>::iterator m; - - CWinApp* pApp = GetApp(); - if (pApp) - { - // Erase the CDC pointer entry from the map - pApp->m_csMapLock.Lock(); - for (m = pApp->m_mapHMENU.begin(); m != pApp->m_mapHMENU.end(); ++m) - { - if (this == m->second) - { - pApp->m_mapHMENU.erase(m); - Success = TRUE; - break; - } - } - - pApp->m_csMapLock.Release(); - } - } - - return Success; - } - - - inline BOOL CMenu::AppendMenu(UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/) - // Appends a new item to the end of the specified menu bar, drop-down menu, submenu, or shortcut menu. - { - assert(IsMenu(m_hMenu)); - return ::AppendMenu(m_hMenu, uFlags, uIDNewItem, lpszNewItem); - } - - inline BOOL CMenu::AppendMenu(UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp) - // Appends a new item to the end of the specified menu bar, drop-down menu, submenu, or shortcut menu. - { - assert(IsMenu(m_hMenu)); - assert(pBmp); - return ::AppendMenu(m_hMenu, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle()); - } - - inline void CMenu::Attach(HMENU hMenu) - // Attaches an existing menu to this CMenu - { - if (m_hMenu != NULL && m_hMenu != hMenu) - { - ::DestroyMenu(Detach()); - } - - if (hMenu) - { - m_hMenu = hMenu; - AddToMap(); - } - } - - inline UINT CMenu::CheckMenuItem(UINT uIDCheckItem, UINT uCheck) - // Sets the state of the specified menu item's check-mark attribute to either selected or clear. - { - assert(IsMenu(m_hMenu)); - return ::CheckMenuItem(m_hMenu, uIDCheckItem, uCheck); - } - - inline BOOL CMenu::CheckMenuRadioItem(UINT uIDFirst, UINT uIDLast, UINT uIDItem, UINT uFlags) - // Checks a specified menu item and makes it a radio item. At the same time, the function clears - // all other menu items in the associated group and clears the radio-item type flag for those items. - { - assert(IsMenu(m_hMenu)); - return ::CheckMenuRadioItem(m_hMenu, uIDFirst, uIDLast, uIDItem, uFlags); - } - - inline void CMenu::CreateMenu() - // Creates an empty menu. - { - assert(NULL == m_hMenu); - m_hMenu = ::CreateMenu(); - AddToMap(); - } - - inline void CMenu::CreatePopupMenu() - // Creates a drop-down menu, submenu, or shortcut menu. The menu is initially empty. - { - assert(NULL == m_hMenu); - m_hMenu = ::CreatePopupMenu(); - AddToMap(); - } - - inline BOOL CMenu::DeleteMenu(UINT uPosition, UINT uFlags) - // Deletes an item from the specified menu. - { - assert(IsMenu(m_hMenu)); - return ::DeleteMenu(m_hMenu, uPosition, uFlags); - } - - inline void CMenu::DestroyMenu() - // Destroys the menu and frees any memory that the menu occupies. - { - if (::IsMenu(m_hMenu)) - ::DestroyMenu(m_hMenu); - - m_hMenu = 0; - RemoveFromMap(); - m_vSubMenus.clear(); - } - - inline HMENU CMenu::Detach() - // Detaches the HMENU from this CMenu. If the HMENU is not detached it will be - // destroyed when this CMenu is deconstructed. - { - assert(IsMenu(m_hMenu)); - HMENU hMenu = m_hMenu; - m_hMenu = 0; - RemoveFromMap(); - m_vSubMenus.clear(); - return hMenu; - } - - inline HMENU CMenu::GetHandle() const - // Returns the HMENU assigned to this CMenu - { - return m_hMenu; - } - - inline UINT CMenu::EnableMenuItem(UINT uIDEnableItem, UINT uEnable) - // Enables, disables, or grays the specified menu item. - // The uEnable parameter must be a combination of either MF_BYCOMMAND or MF_BYPOSITION - // and MF_ENABLED, MF_DISABLED, or MF_GRAYED. - { - assert(IsMenu(m_hMenu)); - return ::EnableMenuItem(m_hMenu, uIDEnableItem, uEnable); - } - - inline UINT CMenu::GetDefaultItem(UINT gmdiFlags, BOOL fByPos /*= FALSE*/) - // Determines the default menu item. - // The gmdiFlags parameter specifies how the function searches for menu items. - // This parameter can be zero or more of the following values: GMDI_GOINTOPOPUPS; GMDI_USEDISABLED. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuDefaultItem(m_hMenu, fByPos, gmdiFlags); - } - - inline DWORD CMenu::GetMenuContextHelpId() const - // Retrieves the Help context identifier associated with the menu. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuContextHelpId(m_hMenu); - } - -#if(WINVER >= 0x0500) -// minimum OS required : Win2000 - - inline BOOL CMenu::GetMenuInfo(LPMENUINFO lpcmi) const - // Retrieves the menu information. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuInfo(m_hMenu, lpcmi); - } - - inline BOOL CMenu::SetMenuInfo(LPCMENUINFO lpcmi) - // Sets the menu information from the specified MENUINFO structure. - { - assert(IsMenu(m_hMenu)); - return ::SetMenuInfo(m_hMenu, lpcmi); - } - -#endif - - inline UINT CMenu::GetMenuItemCount() const - // Retrieves the number of menu items. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuItemCount(m_hMenu); - } - - inline UINT CMenu::GetMenuItemID(int nPos) const - // Retrieves the menu item identifier of a menu item located at the specified position - { - assert(IsMenu(m_hMenu)); - return ::GetMenuItemID(m_hMenu, nPos); - } - - inline BOOL CMenu::GetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/) - // retrieves information about the specified menu item. - { - assert(IsMenu(m_hMenu)); - assert(lpMenuItemInfo); - lpMenuItemInfo->cbSize = GetSizeofMenuItemInfo(); - return ::GetMenuItemInfo(m_hMenu, uItem, fByPos, lpMenuItemInfo); - } - - inline UINT CMenu::GetMenuState(UINT uID, UINT uFlags) const - // Retrieves the menu flags associated with the specified menu item. - // Possible values for uFlags are: MF_BYCOMMAND (default) or MF_BYPOSITION. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuState(m_hMenu, uID, uFlags); - } - - inline int CMenu::GetMenuString(UINT uIDItem, LPTSTR lpString, int nMaxCount, UINT uFlags) const - // Copies the text string of the specified menu item into the specified buffer. - { - assert(IsMenu(m_hMenu)); - assert(lpString); - return ::GetMenuString(m_hMenu, uIDItem, lpString, nMaxCount, uFlags); - } - - inline int CMenu::GetMenuString(UINT uIDItem, CString& rString, UINT uFlags) const - // Copies the text string of the specified menu item into the specified buffer. - { - assert(IsMenu(m_hMenu)); - return ::GetMenuString(m_hMenu, uIDItem, (LPTSTR)rString.c_str(), rString.GetLength(), uFlags); - } - - inline CMenu* CMenu::GetSubMenu(int nPos) - // Retrieves the CMenu object of a pop-up menu. - { - assert(IsMenu(m_hMenu)); - CMenu* pMenu = new CMenu; - pMenu->m_hMenu = ::GetSubMenu(m_hMenu, nPos); - pMenu->m_IsTmpMenu = TRUE; - m_vSubMenus.push_back(pMenu); - return pMenu; - } - - inline BOOL CMenu::InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/) - // Inserts a new menu item into a menu, moving other items down the menu. - { - assert(IsMenu(m_hMenu)); - return ::InsertMenu(m_hMenu, uPosition, uFlags, uIDNewItem, lpszNewItem); - } - - inline BOOL CMenu::InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp) - // Inserts a new menu item into a menu, moving other items down the menu. - { - assert(IsMenu(m_hMenu)); - return ::InsertMenu(m_hMenu, uPosition, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle()); - } - - inline BOOL CMenu::InsertMenuItem(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/) - // Inserts a new menu item at the specified position in a menu. - { - assert(IsMenu(m_hMenu)); - assert(lpMenuItemInfo); - lpMenuItemInfo->cbSize = GetSizeofMenuItemInfo(); - return ::InsertMenuItem(m_hMenu, uItem, fByPos, lpMenuItemInfo); - } - - inline BOOL CMenu::LoadMenu(LPCTSTR lpszResourceName) - // Loads the menu from the specified windows resource. - { - assert(NULL == m_hMenu); - assert(lpszResourceName); - m_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), lpszResourceName); - if (m_hMenu) AddToMap(); - return NULL != m_hMenu; - } - - inline BOOL CMenu::LoadMenu(UINT uIDResource) - // Loads the menu from the specified windows resource. - { - assert(NULL == m_hMenu); - m_hMenu = ::LoadMenu(GetApp()->GetResourceHandle(), MAKEINTRESOURCE(uIDResource)); - if (m_hMenu) AddToMap(); - return NULL != m_hMenu; - } - - inline BOOL CMenu::LoadMenuIndirect(const void* lpMenuTemplate) - // Loads the specified menu template and assigns it to this CMenu. - { - assert(NULL == m_hMenu); - assert(lpMenuTemplate); - m_hMenu = ::LoadMenuIndirect(lpMenuTemplate); - if (m_hMenu) AddToMap(); - return NULL != m_hMenu; - } - - inline BOOL CMenu::ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem /*= 0*/, LPCTSTR lpszNewItem /*= NULL*/) - // Changes an existing menu item. This function is used to specify the content, appearance, and behavior of the menu item. - { - assert(IsMenu(m_hMenu)); - return ::ModifyMenu(m_hMenu, uPosition, uFlags, uIDNewItem, lpszNewItem); - } - - inline BOOL CMenu::ModifyMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, const CBitmap* pBmp) - // Changes an existing menu item. This function is used to specify the content, appearance, and behavior of the menu item. - { - assert(IsMenu(m_hMenu)); - assert(pBmp); - return ::ModifyMenu(m_hMenu, uPosition, uFlags, uIDNewItem, (LPCTSTR)pBmp->GetHandle()); - } - - inline BOOL CMenu::RemoveMenu(UINT uPosition, UINT uFlags) - // Deletes a menu item or detaches a submenu from the menu. - { - assert(IsMenu(m_hMenu)); - return ::RemoveMenu(m_hMenu, uPosition, uFlags); - } - - inline BOOL CMenu::SetDefaultItem(UINT uItem, BOOL fByPos /*= FALSE*/) - // sets the default menu item for the menu. - { - assert(IsMenu(m_hMenu)); - return ::SetMenuDefaultItem(m_hMenu, uItem, fByPos); - } - - inline BOOL CMenu::SetMenuContextHelpId(DWORD dwContextHelpId) - // Associates a Help context identifier with the menu. - { - assert(IsMenu(m_hMenu)); - return ::SetMenuContextHelpId(m_hMenu, dwContextHelpId); - } - - inline BOOL CMenu::SetMenuItemBitmaps(UINT uPosition, UINT uFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked) - // Associates the specified bitmap with a menu item. - { - assert(IsMenu(m_hMenu)); - return ::SetMenuItemBitmaps(m_hMenu, uPosition, uFlags, *pBmpUnchecked, *pBmpChecked); - } - - inline BOOL CMenu::SetMenuItemInfo(UINT uItem, LPMENUITEMINFO lpMenuItemInfo, BOOL fByPos /*= FALSE*/) - // Changes information about a menu item. - { - assert(IsMenu(m_hMenu)); - assert(lpMenuItemInfo); - lpMenuItemInfo->cbSize = GetSizeofMenuItemInfo(); - return ::SetMenuItemInfo(m_hMenu, uItem, fByPos, lpMenuItemInfo); - } - - inline BOOL CMenu::TrackPopupMenu(UINT uFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect /*= 0*/) - // Displays a shortcut menu at the specified location and tracks the selection of items on the menu. - { - assert(IsMenu(m_hMenu)); - HWND hWnd = pWnd? pWnd->GetHwnd() : 0; - return ::TrackPopupMenu(m_hMenu, uFlags, x, y, 0, hWnd, lpRect); - } - - inline BOOL CMenu::TrackPopupMenuEx(UINT uFlags, int x, int y, CWnd* pWnd, LPTPMPARAMS lptpm) - // Displays a shortcut menu at the specified location and tracks the selection of items on the shortcut menu. - { - assert(IsMenu(m_hMenu)); - HWND hWnd = pWnd? pWnd->GetHwnd() : 0; - return ::TrackPopupMenuEx(m_hMenu, uFlags, x, y, hWnd, lptpm); - } - - inline BOOL CMenu::operator != (const CMenu& menu) const - // Returns TRUE if the two menu objects are not equal. - { - return menu.m_hMenu != m_hMenu; - } - - inline BOOL CMenu::operator == (const CMenu& menu) const - // Returns TRUE of the two menu object are equal - { - return menu.m_hMenu == m_hMenu; - } - - inline CMenu::operator HMENU () const - // Retrieves the menu's handle. - { - return m_hMenu; - } - - - /////////////////////////////////////// - // Global functions - // - - inline CMenu* FromHandle(HMENU hMenu) - // Returns the CMenu object associated with the menu handle (HMENU). - { - assert( GetApp() ); - CMenu* pMenu = GetApp()->GetCMenuFromMap(hMenu); - if (::IsMenu(hMenu) && pMenu == 0) - { - GetApp()->AddTmpMenu(hMenu); - pMenu = GetApp()->GetCMenuFromMap(hMenu); - } - return pMenu; - } - -} // namespace Win32xx - -#endif // _WIN32XX_MENU_H_ - |