OSDN Git Service

menu.hpp: 101022_menu\4.5_bulk_start等
authorMyun2 <myun2@nwhite.info>
Sat, 16 Apr 2011 06:13:55 +0000 (15:13 +0900)
committerMyun2 <myun2@nwhite.info>
Sat, 16 Apr 2011 06:13:55 +0000 (15:13 +0900)
roast_ex/include/roast/windows/menu.hpp

index 3673c69..018a359 100644 (file)
@@ -32,26 +32,78 @@ namespace roast
                class menuitem
                {
                private:
-                       bool _SetMenuItemInfo(UINT uItem, BOOL fByPosition, LPMENUITEMINFO lpmii){
-                               return ( SetMenuItemInfo(m_hMenu, uItem, fByPosition, lpmii) == TRUE );
+                       bool _SetMenuItemInfo(){
+                               return ( SetMenuItemInfo(m_hMenu, uItem, fByPosition, &minfo) == TRUE );
+                       }
+                       bool _update(){
+                               if ( m_hMenu )
+                                       _SetMenuItemInfo();
                        }
                protected:
-                       const ::HMENU m_hMenu;
+                       ::HMENU m_hMenu;
+                       ::HMENU m_hBulkMenuBackup;
                        const UINT uItem;
                        const BOOL fByPosition;
+                       MENUITEMINFO minfo;
                public:
                        menuitem(HMENU hMenu, UINT uItem_in, BOOL fByPosition_in)
-                               : m_hMenu(hMenu), uItem(uItem_in), fByPosition(fByPosition_in) {}
+                               : m_hMenu(hMenu), uItem(uItem_in), fByPosition(fByPosition_in), m_hBulkMenuBackup(NULL) {
+                                       ZeroMemory(&minfo, sizeof(minfo)); minfo.cbSize = sizeof(minfo); }
+                       menuitem()
+                               : m_hMenu(NULL), uItem(0), fByPosition(0), m_hBulkMenuBackup(NULL) {
+                                       ZeroMemory(&minfo, sizeof(minfo)); minfo.cbSize = sizeof(minfo); }
+                       menuitem(const MENUITEMINFO& minfo_in)
+                               : m_hMenu(NULL), uItem(0), fByPosition(0), m_hBulkMenuBackup(NULL), minfo(minfo_in) {}
+
+                       ///////////////////////////////////////////////////
+
+                       void set_text(lpctstr_t szText){
+                               minfo.dwTypeData = (LPSTR)szText;
+                               minfo.cch = strlen(szText);
+                               _update();
+                       }
 
+                       ///
+  /*  UINT    fMask;         // \8eæ\93¾\82Ü\82½\82Í\90Ý\92è\82·\82é\83\81\83\93\83o
+    UINT    fType;         // \83A\83C\83e\83\80\82Ì\83^\83C\83v
+    UINT    fState;        // \83A\83C\83e\83\80\82Ì\8fó\91Ô
+    UINT    wID;           // \83A\83C\83e\83\80ID
+    HMENU   hSubMenu;      // \83T\83u\83\81\83j\83\85\81[\82Ì\83n\83\93\83h\83\8b
+    HBITMAP hbmpChecked;   // \83`\83F\83b\83N\95\\8e¦\8e\9e\82Ì\83r\83b\83g\83}\83b\83v
+    HBITMAP hbmpUnchecked; // \83`\83F\83b\83N\94ñ\95\\8e¦\8e\9e\82Ì\83r\83b\83g\83}\83b\83v
+    ULONG_PTR dwItemData;  // \94C\88Ó\82Ì32\83r\83b\83g\92l
+    LPTSTR  dwTypeData;    // \83A\83C\83e\83\80\82Ì\93à\97e
+    UINT    cch;           // \83A\83C\83e\83\80\82Ì\95\8e\9a\97ñ\82Ì\92·\82³
+    HBITMAP hbmpItem;      // \83r\83b\83g\83}\83b\83v\83n\83\93\83h\83\8b*/
+                       void bulk_start(){
+                               m_hBulkMenuBackup = m_hMenu;
+                               m_hMenu = NULL;
+                       }
+                       void bulk_end(){
+                               m_hMenu = m_hBulkMenuBackup;
+                               m_hBulkMenuBackup = NULL;
+                               _SetMenuItemInfo();
+                       }
+
+                       MENUITEMINFO get_mmi(){ return minfo; }
+                       MENUITEMINFO& get_mmi_ref(){ return minfo; }
+                       const MENUITEMINFO& get_mmi_cref() const { return minfo; }
+                       MENUITEMINFO* get_mmi_ptr(){ return &minfo; }
+                       const MENUITEMINFO* get_mmi_cptr() const { return &minfo; }
+
+                       operator MENUITEMINFO () const { return minfo; }
+                       operator const MENUITEMINFO () const { return minfo; }
                };
 
+               ///
+
                class menu
                {
                private:
                        bool _InsertMenu(UINT uPosition, UINT uFlags, UINT_PTR uIDNewItem, lpctstr_t lpNewItem){
                                return ( InsertMenu(m_hMenu, uPosition, uFlags, uIDNewItem, lpNewItem) == TRUE );
                        }
-                       bool _InsertMenuItem(UINT uItem, BOOL fByPosition, LPCMENUITEMINFO lpmii){
+                       bool _InsertMenuInfo(UINT uItem, BOOL fByPosition, LPCMENUITEMINFO lpmii){
                                return ( InsertMenuItem(m_hMenu, uItem, fByPosition, lpmii) == TRUE );
                        }
                        /*bool _SetMenuItemInfo(UINT uItem, BOOL fByPosition, LPMENUITEMINFO lpmii){
@@ -96,12 +148,15 @@ namespace roast
                        //////
                        
                        bool insert(unsigned int index, lpctstr_t szText, UINT itemId=0){ return _InsertMenu(index, MF_BYPOSITION, itemId, szText); }
+                       bool insert(unsigned int index, const MENUITEMINFO& mii){ return _InsertMenuInfo(index, TRUE, &mii); }
                        bool insert_separater(unsigned int index){ return _InsertMenu(index, MF_BYPOSITION | MF_SEPARATOR, NULL, NULL); }
 
                        bool insert_byid(unsigned int before_id, lpctstr_t szText, UINT itemId=0){ return _InsertMenu(before_id, MF_BYCOMMAND, itemId, szText); }
+                       bool insert_byid(unsigned int before_id, const MENUITEMINFO& mii){ return _InsertMenuInfo(before_id, FALSE, &mii); }
                        bool insert_separater_byid(unsigned int before_id){ return _InsertMenu(before_id, MF_BYCOMMAND | MF_SEPARATOR, NULL, NULL); }
 
                        bool add(lpctstr_t szText, UINT itemId=0){ return insert(-1, szText, itemId); }
+                       bool add(const MENUITEMINFO& mii){ return insert(-1, mii); }
                        bool add_separater(){ return insert_separater(-1); }
                        bool add_sep(){ return add_separater(); }