C++动态添加菜单类(存在BUG)

.H文件//

// DynamicMenu.h: interface for the CDynamicMenu class.
//
//

#if !defined(AFX_DYNAMICMENU_H__69C5595A_B3B2_4C21_B34C_156FCE65304F__INCLUDED_)
#define AFX_DYNAMICMENU_H__69C5595A_B3B2_4C21_B34C_156FCE65304F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CDynamicMenu 
{
public:
 CDynamicMenu();
 virtual ~CDynamicMenu();
protected:
 void appendMenuItem(int m_iItemID, CString m_strItemText);
 void appenMenu(CString m_strMenuText);
 void setEnable(int m_iItemID, int m_enable);
 void deleteMenu();
 void addMenu(CString m_strMenu, int m_iPosition, int m_iMenuID);
 void addMenu(CString m_strMenu,CString m_strAddMenu, int m_iMenuID);
 void addMenuItem(CString m_strMenu, int m_iPosition, int m_iMenuID);
 void addMenuItem(CString m_strMenu, CString m_strMenuItem, int m_iMenuItemID);
 void addMenuItem(CString m_strMenu, CString m_strMenuItem, CString m_strMenuPosition, int m_iMenuItemID);
 void modifyMenuItem(CString m_strMneu, int m_iMenuItemID);
 void modifyMenuItem(CString m_strMenu, CString m_strMenuItem, CString m_strModiyText);
private:
 void setMenu();
 void createMenu();
 void createMenuItem();
 void drawMenuBar();
 CMenu* getMenuItem(int m_iPosition);
 int  FindMenuItem(CMenu* Menu, LPCTSTR MenuString);
 int getMenuItemCount(CMenu* Menu);
 CMenu* getMenu();
private:
 CMenu* m_bMenu;
 CMenu* m_bMenuItem;
};
#endif // !defined(AFX_DYNAMICMENU_H__69C5595A_B3B2_4C21_B34C_156FCE65304F__INCLUDED_)
.CPP文件

// DynamicMenu.cpp: implementation of the CDynamicMenu class.
//
//

#include "stdafx.h"
#include "YXRM.h"
#include "DynamicMenu.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

CDynamicMenu::CDynamicMenu()
{
 m_bMenu = new CMenu;
 m_bMenuItem = new CMenu;
}

CDynamicMenu::~CDynamicMenu()
{
 m_bMenu->DestroyMenu();
 m_bMenuItem->DestroyMenu();
 if( m_bMenu != NULL)
  m_bMenu = NULL;
 if( m_bMenuItem != NULL)
  m_bMenuItem = NULL;
 delete m_bMenu;
 delete m_bMenuItem;
}

/
//add new menu item
void CDynamicMenu::appendMenuItem(int m_iItemID, CString m_strItemText)
{
 m_bMenuItem->AppendMenu(MF_STRING, m_iItemID, m_strItemText);
}
//add new menu
void CDynamicMenu::appenMenu(CString m_strMenuText)
{
 m_bMenu->AppendMenu(MF_POPUP,(UINT)m_bMenuItem->m_hMenu, m_strMenuText);
}
/
//setting menu enable
void CDynamicMenu::setEnable(int m_iItemID, int m_enable)
{
  m_bMenu->EnableMenuItem(m_iItemID,1);
}

/
//delete menu
void CDynamicMenu::deleteMenu()
{

}
/
//add menu
void CDynamicMenu::addMenu(CString m_strMenu, int m_iPosition, int m_iMenuID)
{
 m_bMenu->InsertMenu(m_iPosition, MF_BYPOSITION, m_iMenuID, m_strMenu);
}
//add menu
void CDynamicMenu::addMenu(CString m_strMenu,CString m_strAddMenu, int m_iMenuID)
{
 int m_iPos;
 getMenu();
 m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
 addMenu(m_strAddMenu, m_iPos + 1, m_iMenuID);
 setMenu();
}
//add menu item
void CDynamicMenu::addMenuItem(CString m_strMenu, int m_iPosition, int m_iMenuID)
{
 m_bMenuItem->InsertMenu(m_iPosition, MF_BYPOSITION, m_iMenuID, m_strMenu);
}
//add menu item
void CDynamicMenu::addMenuItem(CString m_strMenu, CString m_strMenuItem, int m_iMenuItemID)
{
 int m_iPos;
 getMenu();
 m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
 getMenuItem(m_iPos);
 addMenuItem(m_strMenuItem, getMenuItemCount(m_bMenuItem),m_iMenuItemID);
}
//add menu item
void CDynamicMenu::addMenuItem(CString m_strMenu, CString m_strMenuItem, CString m_strMenuPosition, int m_iMenuItemID)
{
 int m_iPos, m_iItemPos;
 getMenu();
 m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
 getMenuItem(m_iPos);
    m_iItemPos = this->FindMenuItem(m_bMenuItem, m_strMenuPosition);
 addMenuItem(m_strMenuItem, m_iItemPos + 1,m_iMenuItemID);
}
/
//modify menu item
void CDynamicMenu::modifyMenuItem(CString m_strMneu, int m_iMenuItemID)
{
 m_bMenu->ModifyMenu(m_iMenuItemID, MF_BYCOMMAND, m_iMenuItemID, m_strMneu);
}
//modify menu item
void CDynamicMenu::modifyMenuItem(CString m_strMenu, CString m_strMenuItem, CString m_strModiyText)
{
 int m_iPos;
 getMenu();
 m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
    getMenuItem(m_iPos);
 m_iPos = this->FindMenuItem(m_bMenuItem, m_strMenuItem);
 int id = m_bMenuItem->GetMenuItemID(m_iPos);
 this->modifyMenuItem(m_strModiyText, id);
}

/
/
CMenu* CDynamicMenu::getMenuItem(int m_iPosition)
{
// m_bMenu->LoadMenu(m_bMenu->GetMenuItemID(m_iPosition));
 m_bMenuItem = m_bMenu->GetSubMenu(m_iPosition);//存在BUG????????????
 ASSERT(m_bMenuItem);
 return m_bMenuItem;
}

int CDynamicMenu::FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
{
   CString m_strMenu;
   ASSERT(Menu);
   ASSERT(::IsMenu(Menu->GetSafeHmenu()));

   int count = getMenuItemCount(Menu);
   for (int i = 0; i < count; i++)
   {
      if(Menu->GetMenuString(i, m_strMenu, MF_BYPOSITION) &&
   (strcmp(m_strMenu, MenuString) == 0))
         return i;
   }
   return -1;
}

int CDynamicMenu::getMenuItemCount(CMenu* Menu)
{
 if(Menu != NULL)
  return Menu->GetMenuItemCount();
 else
  return 0;
}

void CDynamicMenu::setMenu()
{
   ASSERT(m_bMenu);
   ASSERT(::IsMenu(m_bMenu->GetSafeHmenu()));

   AfxGetMainWnd()->SetMenu(m_bMenu);
}

CMenu* CDynamicMenu::getMenu()
{
 if(m_bMenu != NULL)
  m_bMenu = NULL;
 m_bMenu = AfxGetMainWnd()->GetMenu();
    ASSERT(m_bMenu);
 return m_bMenu;
}

void CDynamicMenu::drawMenuBar()
{
 AfxGetMainWnd()->DrawMenuBar();
}

void CDynamicMenu::createMenu()
{
 m_bMenu->CreateMenu();

}

void CDynamicMenu::createMenuItem()
{
 m_bMenuItem->CreateMenu();
}
/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值