Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16496805
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:51:51

下载本文示例代码
  大部分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();    }   好了,到这里我们所有的功能就都实现了,快编译运行一下吧!怎么样?还满意吗?   大部分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();    }   好了,到这里我们所有的功能就都实现了,快编译运行一下吧!怎么样?还满意吗? 下载本文示例代码


谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单谈在VC中动态改变菜单
阅读(88) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~