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){
//////
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(); }