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

vc的菜單

編輯:vc教程

首先,MFC會自動生成一些菜單,我們也可以在resource vIEw中添加菜單。點擊菜單欄屬性--〉左上角校園最圖形,可以將屬性頁顯示。不會隨著菜單項變動丟失。

ID號變灰的欄是不可以編輯的。是彈出的POPUP菜單。它不能被用來做響應。大寫字母標示資源。IDI IDC  IDM分別表示不同的類型資源。

一個菜單項可以由CMAINFRAM CXXXVIEW  CXXApp  CXXDOC vIEw類先對其響應,接著doc類對其進行響應,MAINFRAM第三個對其進行響應,第四個響應的APP類對其進行響應。

Afxmessagebox框架函數,可以響應非WND派生類的彈出的提示,而wnd派生的可以直接用MessageBox函數。

消息包括三類:WM_XXX標准消息,從cwnd派生的類可以接收也可以接受命令消息,WM_COMMANed命令消息(通過ID號標識識別,由cmdtarget派生的類可以接受,比如說文檔類,CEIDTview類),第三類通知消息,有cmdtarget派生的類可以接收。APP和Doc類從CMDTARGET派生,所以不能接收標准消息。命令消息,頭文件消息影射中添加原形,原文件中添加ON_COMMND宏完成影射,還有命令函數實現。命令函數由ONCOMMAND來處理,通知消息由ONNOTIFY來實現。命令消息到來時首先到達CMAINFRAM然後到送達CVIEW來處理,根據命令消息影射來處理,如果沒有處理函數,交給DOC類,如果還沒有處理函數,交還給VIEW類,------〉交還CMAINFRAM類,如果他也沒有處理函數,交給APP類來處理。

標記菜單(打對購得):在CMAINFRAM中ONCREATE中創建。菜單屬於框架窗口,獲取菜單欄指針的方法為GetMenu,它返回一個返回CMenu的指針。但是其指向的對象是不一樣的,一個為菜單,一個為子菜單。CMenu中的checkmenuitem方法可以設置標記。

缺省菜單項:SetDefaultItem。例如:GetMenu->GetSubMenu(0)->SetDefaultItem(1,True);索引訪問時注意分隔欄也算一個索引值。缺省菜單,一個子菜單只能有一個項為缺省。

圖形標記菜單:CMenu::SetMenuItemBitmaps來創建。首先創建圖形,然後構造CMinFram 變量Cbitmap A,A.loadbitmap();然後GetMenu->GetSubMenu(0)->SetMenuItemBitmaps(0,標記,標記後圖像,標記前圖像)需要調整位圖大小適合顯示才可以。

屏蔽菜單:enableMenuItem設置參數為MF_disable|MF_GRAYED注意在CMAINFRAM的構造函數中M_bautomenuenable必須被賦予FALSE,此後菜單更新將由我們負責。

移除菜單:SetMenu(NULL);

更換菜單:先移除,後局部變量CMenu A;A.loadMenu(id);setMenu(A);然後調用A.Detach成員函數就可以了。

MFC對菜單項采用的命令更新機制:ON_UPDATE_COMMOND_UI宏來完成。CCMDUI類的相關方法可以進行相應的操作。如調用Enable或Setcheck。更新從第一個菜單項到最後一個菜單項。注意:不能應用於頂級菜單項。

菜單欄和工具欄的對應只需設置相應的ID號一致就可以了。使用pCMDUI->nindex索引來說,菜單欄和工具欄可以出現不同狀態,為了保持一致,最後采用PCMDUI->ID號來訪問使用。

右鍵彈出菜單功能:在View類中創建相關函數,首先增加菜單資源,增加window消息處理,定義對象,加載菜單LoadMenu,定義菜單指針獲取定義的子菜單。指針->TrackpopupMenu,注意當前點坐標是以客戶區為原點,而顯示時是以屏幕為原點。這樣需要,屏幕坐標到客戶區坐標的准換。此時,ClIEntToScreen完成客戶區坐標到屏幕坐標的轉換,參數要求是一個指針。TrackPopupMenu中的參數將規定擁有者。GetParent獲取父類對象。

動態創建菜單、刪除、增加、修改菜單。可以在CMainFram的OnCreate中創建,利用CMenu中的AppendMenu來添加,可以添加Popup(頂層菜單),seperate,MF_String等,創建空的探出菜單:CMenu::CreatePopupMenu,然後GetMenu()->appendmenu(MF_Popup,(UNIT)指針.m_hMenu,"菜單名稱"),指針.Detach();

插入菜單:InsertMenu(),然後再給其添加菜單項。用AppendMenu來實現。

刪除菜單:DeleteMenu();刪除菜單項或彈出菜單。

動態增加的菜單項的響應:首先在資源的頭文件中添加定義的ID與相應的ID值,三個步驟添加響應,頭文件中添加消息響應原形afx_msg void ONxxx(),添加消息映射,命令消息ONCOMMAND()宏來進行映射。然後寫消息處理函數。

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