基于递归算法实现菜单内容直接映射至树型控件中的方法

文档序号:6573038阅读:228来源:国知局
专利名称:基于递归算法实现菜单内容直接映射至树型控件中的方法
技术领域
本发明涉及计算机编程领域,尤其是一种基于递归算法实现菜单内容直接映射至树型控件中的方法。
背景技术
当前,在可视化编程过程中,在树型控件中完全拥有菜单控件的内容的时候,程序员一般就是单独编程,造成工作量的偏大以及难以维护。比如菜单内容改变(增加一个子菜单或删除一个菜单项目等等)的话,则树型控件为了保持一致的内容,必须重新编写树型控件中的内容。这造成了工作量的偏大以及将来程序代码维护的难度。

发明内容
本发明的目的在于提供一种基于递归算法实现菜单内容直接映射至树型控件中的方法,该可视化编程中基于递归算法实现菜单内容直接映射至树型控件中的方法 为了克服在编程过程中菜单内容的改变导致树型控件内容也随之编码的缺陷,本文采用一种基于递归算法思想的编程方法,只要在树型控件中加入该段代码,则不管菜单内容如何改变,增加子菜单或者删除一个菜单项目,那么在树型控件中自动复制菜单项目的内容。
本发明的技术方案为一种基于递归算法实现菜单内容直接映射至树型控件中的方法,该使用递归算法通过该编程代码,能够把菜单内容映射至树型控件中去,该编程技术已被包装成一个函数,在树型控件初始化中加入该函数即可。
本发明主要采用递归算法思想解决菜单内容映射至树型控件中去。
1递归定义在一个子程序(过程或函数)的定义中又直接或间接地调用该子程序本身,称为递归。递归是一种非常有用的程序设计方法。用递归算法编写的程序结构清晰,具有很好的可读性。递归算法的基本思想是把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
2递归特点(1)递归就是在过程或函数里调用自身;(2)在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
3为什么可以用递归(为了说明,采用word的部分菜单内容进行介绍)“递归”在C++中主要解决具有树型特征的算法或数据结构,递归的利用可以使算法或数据结构大大简化,代码简洁明了,相同一个具有该特性的课题采用递归或其他算法。菜单就是一个具有树型特征的数据结构,如图1这是一个菜单但是文件(F) 又是该菜单的一个子菜单,在文件子菜单中,其条目如图2在该文件子菜单中,有新建、打开、关闭等菜单项目,也有权限子菜单,其条目如图3在权限子菜单中,有无限制的访问、不能分发...、限制权限为...等菜单项目。
所以菜单具有树型特征的数据结构(如图4),完全可以使用递归算法访问其所有条目。
在树形控件中,其控件内容也具有树型特征的数据结构。
所以我们可以用递归把两者内容联系起来。
4技术方案的原理图及其源代码(vc编写)该技术的源代码如下(CTreeLeft代表树型控件类)void CTreeLeft::SubTreeRole(CMenu*pSubMenu1,HTREEITEM hSubRoot){CMenu*pSubMenu=(CMenu*)pSubMenu1;TVITEM tvitem;TVINSERTSTRUCT tvInsert;//子目录tvitem.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_HANDLE;tvInsert.hParent=hSubRoot;tvInsert.hInsertAfter=TVI_LAST;CMenu*m_pSubMenu;CString m_sName;//menuitem文字UINT m_iMenuI temState;//menuitem state状态HTREEITEM m_hSubRoot;int itemCount=pSubMenu->GetMenuI temCount();int m_iPos=0;for(int j=0;j<itemCount;j++){m_iPos=0;//得到状态值m_iMenuI temState=pSubMenu->GetMenuState(j,MF_BYPOSITION);//判断if(m_iMenuItemState&MF_POPUP)
{pSubMenu->GetMenuText(j,m_sName,MF_BYPOSITION);m_iPos=m_sName.Find(′(′,0);if(m_iPos!=-1)m_sName=m_sName.Left(m_iPos);//开始插入tvitem.pszText=(LPSTR)(LPCSTR)m_sName;tvitem.iImage=0;tvitem.iSelectedImage=1;tvInsert.item=tvitem;m_hSubRoot=m_cTreeLeft.InsertItem(&tvInsert);m_pSubMenu=pSubMenu->GetSubMenu(j);//接下来开始调用该submenuSubTreeRole(m_pSubMenu,m_hSubRoot);}else if(m_iMenuItemState&MF_SEPARATOR)//如果是隔不要{}else//(MF_STRING){pSubMenu->GetMenuText(j,m_sName,MF_BYPOSITION);m_iPos=m_sName.Find(′(′,0);if(m_iPos!=-1)m_sName=m_sName.Left(m_iPos);//pSubMenu->GetMenuSt ring(j,m_sName,MF_BYPOSITION);//开始插入tvitem.pszText=(LPSTR)(LPCSTR)m_sName;tvitem.iImage=2;tvitem.iSelectedImage=3;tvInsert.item=tvitem;m_cTreeLeft.InsertItem(&tvInsert);}}}本发明的优点在于应用该技术之后,可以使程序员专注编写菜单内容,免去了为了保持与菜单内容一致又去修改编写树形控件中的内容。减少了程序员的额外的繁琐的无意义的劳动。


图1为本发明具有树型特征的数据结构的菜单;图2为本发明菜单的一个子菜单;图3为本发明件子菜单中的权限子菜单;图4为本发明件菜单具有树型特征的数据结构。
具体实施例方式
1在树型控件中加入该段代码(函数)2在树型控件初始化函数中加入下面代码CMainFrame*pMF=(CMa inFrame*)AfxGetApp()->m_pMa inWnd;//先通过获取当前框架指针m_pMainMenu=(CMenu*)pMF->GetMenu();TVITEM tvitem;TVINSERTSTRUCT tvInsert;//根目录tvitem.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_HANDLE;tvitem.pszText=″My patent″;tvitem.iImage=0;tvitem.iSelectedImage=1;tvInsert.hParent=TVI_ROOT;tvInsert.hInsertAfter=TVI_FIRST;tvInsert.item=tvitem;HTREEITEM hRoot=m_cTreeLeft.InsertItem(&tvInsert);//根目录//加入该段代码SubTreeRole(m_pMainMenu,hRoot)。
权利要求
1.一种基于递归算法实现菜单内容直接映射至树型控件中的方法,其特征在于该使用递归算法通过该编程代码,能够把菜单内容映射至树型控件中去,该编程技术已被包装成一个函数,在树型控件初始化中加入该函数即可。
全文摘要
本发明公开一种可视化编程中基于递归算法实现菜单内容直接映射至树型控件中的方法。该技术的要点就是根据菜单和树型控件的树型结构特点,使用递归算法把两者联系起来。该技术主要应用于VC编程,当有把菜单内容复制到树型控件中的需求时,通过该技术,程序员可以专注编写菜单内容。如果要应用于其它编程语言,则修改树型结构体和菜单就可以,算法不变。
文档编号G06F9/44GK101082864SQ20071005193
公开日2007年12月5日 申请日期2007年4月20日 优先权日2007年4月20日
发明者殷铭宏, 欧阳伟, 沈力军 申请人:南昌有色冶金设计研究院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1