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

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

Info

Publication number
CN101082864A
CN101082864A CN 200710051937 CN200710051937A CN101082864A CN 101082864 A CN101082864 A CN 101082864A CN 200710051937 CN200710051937 CN 200710051937 CN 200710051937 A CN200710051937 A CN 200710051937A CN 101082864 A CN101082864 A CN 101082864A
Authority
CN
China
Prior art keywords
tree
menu
menu content
content
tvitem
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 200710051937
Other languages
English (en)
Inventor
殷铭宏
欧阳伟
沈力军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Nerin Engineering Co Ltd
Original Assignee
NANCHANG ACADEMY OF NONFERROUS METALLURGY
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NANCHANG ACADEMY OF NONFERROUS METALLURGY filed Critical NANCHANG ACADEMY OF NONFERROUS METALLURGY
Priority to CN 200710051937 priority Critical patent/CN101082864A/zh
Publication of CN101082864A publication Critical patent/CN101082864A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开一种可视化编程中基于递归算法实现菜单内容直接映射至树型控件中的方法。该技术的要点就是根据菜单和树型控件的树型结构特点,使用递归算法把两者联系起来。该技术主要应用于VC编程,当有把菜单内容复制到树型控件中的需求时,通过该技术,程序员可以专注编写菜单内容。如果要应用于其它编程语言,则修改树型结构体和菜单就可以,算法不变。

Description

基于递归算法实现菜单内容直接映射至树型控件中的方法
技术领域
本发明涉及计算机编程领域,尤其是一种基于递归算法实现菜单内容直接映射至树型控件中的方法。
背景技术
当前,在可视化编程过程中,在树型控件中完全拥有菜单控件的内容的时候,程序员一般就是单独编程,造成工作量的偏大以及难以维护。比如菜单内容改变(增加一个子菜单或删除一个菜单项目等等)的话,则树型控件为了保持一致的内容,必须重新编写树型控件中的内容。这造成了工作量的偏大以及将来程序代码维护的难度。
发明内容
本发明的目的在于提供一种基于递归算法实现菜单内容直接映射至树型控件中的方法,该可视化编程中基于递归算法实现菜单内容直接映射至树型控件中的方法  为了克服在编程过程中菜单内容的改变导致树型控件内容也随之编码的缺陷,本文采用一种基于递归算法思想的编程方法,只要在树型控件中加入该段代码,则不管菜单内容如何改变,增加子菜单或者删除一个菜单项目,那么在树型控件中自动复制菜单项目的内容。
本发明的技术方案为:一种基于递归算法实现菜单内容直接映射至树型控件中的方法,该使用递归算法通过该编程代码,能够把菜单内容映射至树型控件中去,该编程技术已被包装成一个函数,在树型控件初始化中加入该函数即可。
本发明主要采用递归算法思想解决菜单内容映射至树型控件中去。
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);
        //接下来开始调用该submenu
        SubTreeRole(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)。

Claims (1)

1、一种基于递归算法实现菜单内容直接映射至树型控件中的方法,其特征在于:该使用递归算法通过该编程代码,能够把菜单内容映射至树型控件中去,该编程技术已被包装成一个函数,在树型控件初始化中加入该函数即可。
CN 200710051937 2007-04-20 2007-04-20 基于递归算法实现菜单内容直接映射至树型控件中的方法 Pending CN101082864A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710051937 CN101082864A (zh) 2007-04-20 2007-04-20 基于递归算法实现菜单内容直接映射至树型控件中的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710051937 CN101082864A (zh) 2007-04-20 2007-04-20 基于递归算法实现菜单内容直接映射至树型控件中的方法

Publications (1)

Publication Number Publication Date
CN101082864A true CN101082864A (zh) 2007-12-05

Family

ID=38912449

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710051937 Pending CN101082864A (zh) 2007-04-20 2007-04-20 基于递归算法实现菜单内容直接映射至树型控件中的方法

Country Status (1)

Country Link
CN (1) CN101082864A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109445767A (zh) * 2018-11-13 2019-03-08 上海宝尊电子商务有限公司 一种应用于多终端的新型响应式导航设计实现方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109445767A (zh) * 2018-11-13 2019-03-08 上海宝尊电子商务有限公司 一种应用于多终端的新型响应式导航设计实现方法

Similar Documents

Publication Publication Date Title
US10061871B2 (en) Linear blend skinning weight optimization utilizing skeletal pose sampling
US10114349B2 (en) Multiple applications utilized in an industrial automation system displayed as a single application
US11537278B2 (en) Interactively presenting a visible portion of a rendering surface on a user device
CN107992304B (zh) 一种生成显示界面的方法和装置
US8635605B2 (en) Automated deployment implementation with a deployment topology model
US10152041B2 (en) Method and apparatus for enabling model driven navigation
CN103593456B (zh) 表单自定义设计方法及装置
WO2006041554A3 (en) Document processing and management approach to editing a document in a mark up language environment using undoable commands
CN111026387B (zh) 工业服务器的vplc配置方法、装置及可读存储介质
CN104731590B (zh) 一种用户界面控件实现方法及装置
WO2019144769A1 (zh) 一种流量切换方法、装置、及计算机设备
CN107391665A (zh) 一种数据库实例的创建方法和装置
CN108491195A (zh) 设备控制页面生成方法与系统
CN104217049A (zh) 一种复杂系统三维模型的轻量化显示方法
CN109254770A (zh) 图形化编程平台下的自定义按钮样式的方法及电子设备
CN111309424A (zh) 一种页面还原方法及相关设备
CN101082864A (zh) 基于递归算法实现菜单内容直接映射至树型控件中的方法
EP3159763A1 (en) Method and apparatus for auto synchronizing control system data structures with model composition
CN106780302A (zh) 一种数字图像自动拼版方法及装置
CN103777987A (zh) 一种类unix操作系统的升级方法及装置
CN103176770A (zh) 一种数控系统中界面系统的创建方法
AU2009201433A1 (en) Improved physics-based simulation
CN104102480A (zh) 生成配置文件的方法和装置
CN105786489B (zh) 一种安全无状态的虚拟化计算节点的构建方法
CN107844315A (zh) 一种Android中app主题皮肤升级的策略

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
ASS Succession or assignment of patent right

Owner name: CHINA RUILIN ENGINEERING CO.

Free format text: FORMER OWNER: NANCHANG ENGINEERING + RESEARCH INSTITUTE OF NONFERROUS METALS

Effective date: 20090417

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20090417

Address after: No. 1 Bayi Avenue, Jiangxi, Nanchang

Applicant after: China Nerin Engineering Co., Ltd.

Address before: No. 1 Bayi Avenue, Jiangxi, Nanchang

Applicant before: Nanchang Academy of Nonferrous Metallurgy

C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20071205