右键菜单的创建总结
来源:互联网 发布:杀敌算法 编辑:程序博客网 时间:2024/05/22 15:32
右键菜单的创建总结本文介绍Pop-up的创建,右键菜单在应用软件中可以说是使用极其频繁的一种技术.结合实际项目,做以下总结; 1.定义菜单项结构体:
#pragma pack(push, 1)struct stMenuItem{int iMenuID ; //资源IDchar szItem[30] ; //菜单项显示文本} ;#pragma pack(pop)
2.在要使用Pop-up Menu的文件前定义变量://PerfTreeView.cpp
stMenuItem MenuItemInsertPerf[] = {{IDM_INSERT_ALLPERF, "增加性能"},{IDM_END, ""}};3.在PerfTreeView.h定义CMenu对象:CMenu *m_pRightMenu;//初始化:CPerfTreeView::CPerfTreeView(): m_pRightMenu(NULL){}在析构函数中销毁CPerfTreeView::~CPerfTreeView(){if(m_pRightMenu != NULL){m_pRightMenu->DestroyMenu();delete m_pRightMenu;m_pRightMenu = NULL;}}4.创建菜单的函数:/********************************************************************** 函数名称:void SetRightMenu()* 说明:创建Pop-Up Menu* 入口参数:* 空* 返回值:* void -- * 作者: Duanyx* 时间 : 2008-03-24 13:23:30*********************************************************************/void CPerfTreeView::SetRightMenu(){if(m_pRightMenu == NULL){m_pRightMenu = new CMenu();m_pRightMenu->CreatePopupMenu();}int iNum, i;stMenuItem *pItem = MenuItemInsertPerf;iNum = m_pRightMenu->GetMenuItemCount();for(i = iNum - 1; i >= 0; i--){m_pRightMenu->RemoveMenu(i, MF_BYPOSITION);}while (pItem->iMenuID != IDM_END){if(pItem->iMenuID > 0){m_pRightMenu->InsertMenu(-1, MF_BYCOMMAND, pItem->iMenuID, pItem->szItem);}else{m_pRightMenu->InsertMenu(-1, MF_SEPARATOR);}pItem++;}}5.在右键消息中加载此菜单:/********************************************************************** 函数名称:void OnRButtonDown(UINT nFlags, CPoint point)* 说明:右键消息响应中加载菜单* 入口参数:* UINT nFlags* CPoint point* 返回值:* void -- * 作者: Duanyx* 时间 : 2008-03-24 14:03:30*********************************************************************/void CPerfTreeView::OnRButtonDown(UINT nFlags, CPoint point) {//CTreeView::OnRButtonDown(nFlags, point);CTreeCtrl &treeCtrl = GetTreeCtrl();UINT nFlag;CPoint cp;GetCursorPos(&cp);treeCtrl.ScreenToClient(&cp);HTREEITEM hSel = treeCtrl.HitTest(cp, &nFlag);m_hPerfItemSel = hSel;treeCtrl.ClientToScreen(&cp);//右键单击时选中结点.if(hSel && (nFlag & (TVHT_ONITEMLABEL | TVHT_ONITEMICON)) != 0){//选择此结点并使用删除菜单有效 //TreeCtrl默认右键不能选定结点,所以做此处理实现右键单击选定treeCtrl.SelectItem(hSel); //使菜删除菜单失效 m_pRightMenu->EnableMenuItem(IDM_DELETE_DEFAULTPEF, MF_GRAYED);}else{//当前没有选择结点,使菜删除菜单失效m_pRightMenu->EnableMenuItem(IDM_DELETE_DEFAULTPEF, MF_GRAYED);} //弹出菜单m_pRightMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, cp.x, cp.y, this) ;}6.当然也可用LoadMenu方法加载显式创建的菜单,个人觉得如果一个系统中要使用很多CMenu的话,这样做不是一个值得提倡的方法.
- 右键菜单的创建总结
- 右键菜单的创建
- 右键菜单的创建
- 右键显示菜单的总结
- 创建自定义的Flash Player右键菜单
- Ext右键菜单的创建与现实
- ShowPopupMenu显示自己创建的右键菜单
- Qt创建右键菜单的方法
- MFC右键弹出菜单的创建
- 创建easyui的右键菜单(onRowContextMenu)
- JS 右键创建菜单
- 批处理--创建右键菜单
- C#创建右键菜单
- WPF 创建右键菜单
- 创建右键菜单
- 右键菜单创建
- win32 创建右键菜单
- 右键创建菜单
- MyEclipse抽风情况一例
- Eclispe 内存不足解决方法
- 两相同方案数据库同步策略(快照)!
- Ubuntu 8.04下编译安装Ruby-1.8.6-p114[转载]
- Implementation of Heap Sort
- 右键菜单的创建总结
- 安装VS2005 SP1时失败(错误 1718。文件被数字签名策略拒绝)的解决办法!
- 上海两天之行 参加技术沙龙
- asp.net 网页传值
- vs2005新建项目中没有ASP.NET WEB应用程序的解决办法
- 入司一周年了
- js改变图片大小——把鼠标放图片上,滚动鼠标滚轮.
- 期末的生活
- 求助,asp.net 下此功能如何实现!