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