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);
}
//////////////////////////////////////////////////////////////////////
// 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);
}
//////////////////////////////////////////////////////////////////////
相关文章推荐
- VC中动态添加菜单及其命令响应函数
- vc动态添加弹出菜单和响应函数
- 关于VC++下动态添加菜单的心得
- vc动态添加弹出菜单和响应函数
- VC 弹出菜单 动态添加二级菜单
- VC中动态添加菜单及其命令响应函数
- 通过reg文件给vc7.1添加环境变量
- VC中动态添加控件
- VC++中添加菜单、状态栏、工具栏及窗口全屏
- [Android] 通过GridView仿微信动态添加本地图片示例代码
- Ztree树形菜单实现动态初始化、添加、删除、修改节点
- 在VC++项目中为MDI主框架窗口添加位图(通过截获MDICLIENT的WM_PAINT消息)
- 1.通过菜单打开某个对话框(开通博客,权当新人学VC的笔记了)
- VC 点击右键 添加菜单 onContextMenu
- QTP在录制脚本的时候会将鼠标点击过的对象自动添加到对象库中,而那些未被点击过的对象将不会被添加,导致针对某一对象手动添加的脚本运行不通过,因此需要手动把测试对象添加到对象库中,方法如下:
- VC/MFC怎样添加右键菜单
- Fckeditor添加导入Word文档功能(已测试通过
- JS 通过系统时间限定动态添加 select option的实例代码
- VC++通过动态生成并加载DLL,实现可执行文件的自删除
- SiliverLight 动态添加菜单-prism框架(一)