程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC中動態改變菜單

在VC中動態改變菜單

編輯:vc教程

  大部分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();
   }

  好了,到這裡我們所有的功能就都實現了,快編譯運行一下吧!怎麼樣?還滿意嗎?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved