荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 谈在VC中动态改变菜单
发信站: 荔园晨风BBS站 (Fri Jun  8 07:51:26 2001), 转信


谈在VC中动态改变菜单
bull77
----------------------------------------------------------------------------
----
  大部分Windows应用程序都使用下拉式菜单实现自己特定的函数,它使编程更加方便
,不需要在程序中增加多个按钮以完成这些操作。大多数情况下,我们的程序编译生成
后,菜单就确定了,不能再修改。然而,在很多情况下,程序要根据用户的自己设置产
生不同的菜单以适应不同用户的要求,这就需要我们动态的改变菜单。接下来我们就分
析如何动态的生成不同的菜单。
  第一步:
  运行AppWizard生成一个工程mymenu,接受所有的默认设置,除了下面一步:在ste
p 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_BYPOSITIO
N,y,"mynewitem");
    AfxGetMainWnd()->DrawMenuBar();
    y++;
   }
  void CChangeMenu::OnEdit()
   {
    AfxGetMainWnd()->GetMenu()->ModifyMenu(0,MF_BYPOSITION,402,"dfd");
    AfxGetMainWnd()->DrawMenuBar();
   }

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店