论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
  ·推荐新闻
 
·美前任官员认为amd告倒英特
·搜索引擎关键字排行简介
·网站优化教程(一)
·msn近期遭受木马病毒骚扰 用
·用qq管理你的系统^_^ 
·测评中心金山毒霸联合发布7
·qq群聊实名 普通用户不受影
·雅虎思科联手推数字邮件签名
·这18条背下来没人敢和你忽悠
·自己动手,拯救丢失的硬盘数
  ·资料搜索
 
  ·相关文章
·专业化的程式设计之coding rul
·详析vc中坐标系的建立
·用visual c++实现文件间批量转
·图像平滑滚动效果的vc实现
·mfc中多线程的应用
·vc用ado接口连接和使用数据库 
·mfc简单打印方法
·通过例程分析状态条用法
·谈谈mfc中的消息映射
  ·热门新闻
首页>>程序开发>>vc编程>>文章正文

谈在vc中动态改变菜单


 日期:2005-7-18 9:12:10     来源:易特网络技术   编辑:黑鹰  点击:

  大部分windows应用程序都使用下拉式菜单实现自己特定的函数,它使编程更加方便,不需要在程序中增加多个按钮以完成这些操作。大多数情况下,我们的程序编译生成后,菜单就确定了,不能再修改。然而,在很多情况下,程序要根据用户的自己设置产生不同的菜单以适应不同用户的要求,这就需要我们动态的改变菜单。接下来我们就分析如何动态的生成不同的菜单。

  第一步:

  运行appwizard生成一个工程mymenu,接受所有的默认设置,除了下面一步:在step 1中选single document ,点击finish按钮,此时我们生成了一个工程。编译运行,我们可以发现程序默认生成的菜单,接下来我们要对这个菜单进行修改。

  第二步:

  添加一个菜单资源,按如下步骤:菜单中选择insertàresouceàmenuànew ,我们可以看到添加了一个id号为idr_menu1的菜单资源,至于菜单中的各项你就随便添加了,为了我们下面的编程,请你添加几项,第一列要包含几个子菜单。

  第三步:

  添加一个对话框资源,按如下步骤:菜单中选择insertàresouceàdialogànew ,我们可以看到添加了一个id号为idd_dialog1的对话框资源,添加六个按钮,如下图:



id号依次为id_clear, id_goone ,id_gotwo, id_add, id_additem, id_edit ,为对话框定义类名为cchangemenu, 双击添加的六个按钮增加处理函数,用默认函数名。

  第四步:

  在idr_mainframe菜单中添加一项,id号为id_set,名为"弹出设置对话框",为其添加处理函数,添加如下代码:

  cchangemenu dlg;
  dlg.domodal();

  当然,别忘了在文件的开头添加#include "changemenu . h"

  第五步:

  找到添加的六个按钮的处理函数,依次添加如下的代码:

  void cchangemenu::onclear()
   {
    afxgetmainwnd()->setmenu(null);
    afxgetmainwnd()->drawmenubar();
   }

  void cchangemenu::ongoone()
   {
    if(!menu1){
     menu1.loadmenu(idr_menu1);
     afxgetmainwnd()->setmenu(&menu1);
     afxgetmainwnd()->drawmenubar();
     menu1.detach();
    }
   }

  void cchangemenu::ongotwo()
   {
    if(!menu2){
     menu2.loadmenu(idr_mainframe);
     afxgetmainwnd()->setmenu(&menu2);
     afxgetmainwnd()->drawmenubar();
     menu2.detach();
    }
   }

  void cchangemenu::onadd()
   {
    static int x=400;
    afxgetmainwnd()->getmenu()->appendmenu(mf_string,x,"mynew");
    afxgetmainwnd()->drawmenubar();
    x++;
   }

  void cchangemenu::onadditem()
   {
    static int y=500;
    afxgetmainwnd()->getmenu()->getsubmenu(0)->insertmenu(1,mf_byposition,y,"mynewitem");
    afxgetmainwnd()->drawmenubar();
    y++;
   }

  void cchangemenu::onedit()
   {
    afxgetmainwnd()->getmenu()->modifymenu(0,mf_byposition,402,"dfd");
    afxgetmainwnd()->drawmenubar();
   }

  好了,到这里我们所有的功能就都实现了,快编译运行一下吧!怎么样?还满意吗?

上一篇:用visual c++实现文件间批量转换的功能
下一篇:详析vc中坐标系的建立
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络
信息来源: 易特网络技术 录入时间: 2005-7-18 9:12:10
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息