您的位置:首页 > 其它

VC动态添加菜单类(测试通过)

2005-07-11 17:50 477 查看
///////////////////////////////////////////////////////////////////////////////////.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(int m_nMenuPosition, CString m_strMenuText);
void setEnable(CString m_strMenu, 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);
void createMenuItemChild();
void deleteMenuItemChild();
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;
CMenu* m_bMenuItemChild;
int i;
};
#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()
{
if( m_bMenu != NULL)
m_bMenu = NULL;
if( m_bMenuItem != NULL)
m_bMenuItem = NULL;
delete m_bMenu;
delete m_bMenuItem;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//add new menu item child
void CDynamicMenu::createMenuItemChild()
{
m_bMenuItemChild = new CMenu;
m_bMenuItemChild->CreatePopupMenu();
}
//delete menu item child
void CDynamicMenu::deleteMenuItemChild()
{
if(m_bMenuItemChild != NULL)
m_bMenuItemChild = NULL;
delete m_bMenuItemChild;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void CDynamicMenu::appendMenuItem(int m_iItemID, CString m_strItemText)
{
m_bMenuItemChild->AppendMenu(MF_STRING, m_iItemID, m_strItemText);
}
//add new menu
void CDynamicMenu::appenMenu(int m_nMenuPosition, CString m_strMenuText)
{
m_bMenu->InsertMenu(m_nMenuPosition, MF_BYPOSITION | MF_POPUP,(UINT)m_bMenuItemChild->m_hMenu, m_strMenuText);
deleteMenuItemChild();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//setting menu enable
void CDynamicMenu::setEnable(CString m_strMenu, int m_iItemID, int m_enable)
{
int m_iPos;
m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
getMenuItem(m_iPos);
m_bMenuItem->EnableMenuItem(m_iItemID,m_enable);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//delete menu
void CDynamicMenu::deleteMenu()
{
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//add menu
void CDynamicMenu::addMenu(CString m_strMenu, int m_iPosition, int m_iMenuID)
{
ASSERT_VALID(m_bMenu);
ASSERT(m_strMenu);
m_bMenu->InsertMenu(m_iPosition, MF_STRING | MF_ENABLED | MF_BYPOSITION, m_iMenuID, m_strMenu);
}
//add menu
void CDynamicMenu::addMenu(CString m_strMenu,CString m_strAddMenu, int m_iMenuID)
{
int m_iPos;
m_iPos = this->FindMenuItem(m_bMenu, m_strMenu);
appenMenu(m_iPos + 1, m_strAddMenu);
//addMenu(m_strAddMenu, m_iPos + 1, m_iMenuID);
}
//add menu item
void CDynamicMenu::addMenuItem(CString m_strMenu, int m_iPosition, int m_iMenuID)
{
ASSERT_VALID(m_bMenuItem);
ASSERT(m_strMenu);
m_bMenuItem->InsertMenu(m_iPosition, MF_STRING | MF_ENABLED | 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_bMenuItem = m_bMenu->GetSubMenu(m_iPosition);
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()
{
m_bMenu = AfxGetMainWnd()->GetMenu();
ASSERT_VALID(m_bMenu);
return m_bMenu;
}
void CDynamicMenu::drawMenuBar()
{
AfxGetMainWnd()->DrawMenuBar();
}
void CDynamicMenu::createMenu()
{
m_bMenu->CreateMenu();
ASSERT_VALID(m_bMenu);
}
void CDynamicMenu::createMenuItem()
{
VERIFY(m_bMenuItem->CreateMenu());
ASSERT_VALID(m_bMenuItem);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////测试代码如下///////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
void CMenuMain::ModifySystem()
{
this->modifyMenuItem("系统(&S)", "登录(&L)", "注销(&Z)");
this->addMenuItem("系统(&S)", "用户管理(&U)","注销(&Z)",140002);
}
//////////////////////////////////////////////////////////////////////
void CMenuMain::addEqupmentManagerMenuItem()
{
this->createMenuItemChild();
this->appendMenuItem(150001, "设备管理(&D)");
this->appendMenuItem(150002,"用户编号管理(&U)");
this->addMenu("系统(&S)", "设备管理(&M)", 150000);
}
void CMenuMain::addCopyDataMenuItem()
{
this->createMenuItemChild();
this->appendMenuItem(160001, "抄录电表(&R)");
this->addMenu("设备管理(&M)", "抄录电表(&R)", 160000);
}
void CMenuMain::setEnableItem()
{
this->setEnable("设备管理(&M)", 150001, 1);
}
//////////////////////////////////////////////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: