Download - 功能表的建立
功能表的建立
製作
簡介功能表 功能表的組成• 功能表是視窗介面中,提供使用者選取執行指
令的主要控制項。• 下圖為 Word 之視窗介面所提供的功能表列與功
能表。
簡介功能表 功能表的種類 功能表的種類,大致有這幾種: 一、下拉功能表。 二、快顯功能表。 三、系統功能表。
簡介功能表 一、下拉功能表 以下為 Word 的編輯功能表。
簡介功能表 二、快顯功能表 以下為在 Word 編輯畫面上按下滑鼠右鍵後,
所產生的快顯功能表。
簡介功能表 三、系統功能表 下圖為 Word 的系統功能表。
menu 程式範例 下圖為程式範例的執行結果,並同時顯示各
功能表的選項。
menu 程式範例 下圖為 File 功能表的選項內容。
下圖為 Dynamic Menu 功能表的選項內容。
menu 程式範例 下圖為 Color Menu 功能表的選項內容。
建立視窗程式的功能表有兩種方式: 一種是利用資源編輯器建立功能表,再將該
資源載入應用程式。 另一種是利用 CMenu 類別操作功能表。
menu 程式範例 下圖是執行本程式範例的另一重點 - 系統功
能表與快顯功能表。
menu 程式範例 使用資源 一、功能表部份:以下是程式範例中使用的
功能表資源。
menu 程式範例 二、選項部份:下表為功能表內選項與 ID
的對照。
menu 程式範例 三、其他 ID :在修改或插入選項的過程使
用到的 ID 說明介紹如下表。
功能表的建立與設定• 建立功能表第一步必須利用資源編輯器完成
功能表列資源的建立,接著,連結資源物件與視窗程式。
• 建立功能表的方法:只要於視窗框架類別的建構子中,呼叫 CFrameWnd::Create() 成員函數,然後將功能表的識別子傳給 Create()函數即可 。
利用 CMenu 類別控制功能表
• 控制所使用的功能表時,必須建立一個CMenu 物件,並以 CMenu::LoadMenu() 函數連結 CMenu 物件與功能表資源。
• 完成連結後,便可在程式內透過 CMenu 類別的成員函數操作功能表。
利用 CMenu 類別控制功能表
BOOL CMenu::LoadMenu( LPCTSTR lpszResourceName )
BOOL CMenu::LoadMenu( UINT nIDResource) 函數說明 該函數有兩種形式: 傳入功能表資源名稱 傳入功能表識別子 ( 請參考下一張投影
片 )
利用 CMenu 類別控制功能表
參數說明 LPCTSTR lpszResourceName
功能表名稱。 UINT nIDResource
功能表的識別子。
功能表的建立- 利用 CMenu 類別控制功能表
BOOL CMenu::Attach( HMENU hMenu ) 函數說明 如果連結成功則傳回非零值,失敗則傳回零
值。 參數說明 HMENU hMenu
傳入功能表的標頭( handle )。
利用 CMenu 類別控制功能表
另一種連結功能表的方式則是利用CMenu::Attach() 函數,該函數可將已經存在的功能表連結至 CMenu 物件。
需要操作視窗物件目前所使用的功能表物件時,可以利用以下方式。
利用 CMenu 類別控制功能表
執行 MyFrame::OnSwitchMenu() 函數後,程式將刪除 InsMenu 物件,若兩者資源與 CMenu物件尚未分離程式將發生錯誤。
離開 MyFrame::OnSwitchMenu() 函數前須呼叫CMenu::Detach() 函數分離 InsMenu 物件與其連結的功能表資源。
利用 CMenu 類別控制功能表
功能表與選項的取得 載入功能表列資源後,新增選項至特定功能表
時,必須取得該功能表的指標,才能操作。 MyFrame::OnSwitchMenu() 函數中,欲將
Insert Item 選項插入 Dynamic Menu 功能表裡,因此,執行這個動作前,必須先取得 Dynamic Menu 功能表的指標。
利用 CMenu 類別控制功能表
CMenu* CMenu::GetSubMenu( int nPos ) 函數說明 該函數將傳回功能表列中功能表的指標,如
果該功能表不存在則傳回 NULL 。 參數說明 int nPos
代表功能表位置的整數。功能表中第一個功能表的編號為 0 ,餘類推。
利用 CMenu 類別控制功能表
UINT CMenu::GetMenuItemID( int nPos) 函數說明 如果成功取得該選項則傳回該選項的識別子。
參數說明 int nPos
代表選項位置的整數。功能表中第一個選項的編號為 0 。
利用 CMenu 類別控制功能表
選項與下一層功能表的新增BOOL CMenu::InsertMenu( UINT nPosition, UINT
nFlags,UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL )
BOOL CMenu::InsertMenu( UINT nPosition, UINT nFlags,UINT nIDNewItem, const CBitmap* pBmp )
( 請參考下一張投影片 )
利用 CMenu 類別控制功能表
函數說明 該函數有兩種形式,第一種可以將功能表項
目加入功能表中。 參數說明 UINT nPosition
指定一功能表項目, CMenu::InsertMenu()函數將會把功能表項目插入該項目前。
( 請參考下一張投影片 )
利用 CMenu 類別控制功能表
UINT nFlags
用於指定 CMenu::InsertMenu() 函數的第一個參數 nPosition ,其指定功能表項目的方式。
下表為控制指定插入位置方式之旗標的說明:
利用 CMenu 類別控制功能表
同時使用各組旗標,需以『 | 』運算子連結,但同一組旗標不可混用,下表介紹各旗標。
利用 CMenu 類別控制功能表
利用 CMenu 類別控制功能表
UINT nIDNewItem = 0
新功能表項目的 ID 。如未輸入,預設值為 0 ,表無 ID 。
lpszNewItem = NULL
新功能表項目顯於功能表的選項名稱。如未輸入,預設值為 NULL ,表無選項名稱。
const CBitmap* pBmp
欲插入的圖形檔物件。
利用 CMenu 類別控制功能表
BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL )
BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem, const
CBitmap* pBmp )
( 請參考下一張投影片 )
利用 CMenu 類別控制功能表
函數說明 將項目新增至功能表最後,成功傳回非零值,反
之傳回零值。 參數說明 UINT nFlags
指定增加的項目,及該項目的狀態。詳細的說明請參考前面 CMenu::InsertMenu() 函數說明中,關於 nFlags 參數所使用旗標之表二的內容。
( 請參考下一張投影片 )
利用 CMenu 類別控制功能表
UINT nIDNewItem = 0
新功能表項目的 ID 。 LPCTSTR lpszNewItem = NULL
新功能表項目顯示於功能表的選項名稱。 const CBitmap* pBmp
欲插入的圖形檔物件。
利用 CMenu 類別控制功能表
滑鼠軌跡顏色的控制
利用 CMenu 類別控制功能表
利用 CMenu 類別控制功能表
選項的修改與刪除 選取 Dynamic Menu 的 Create Item 選項後,
在 Dynamic Menu 功能表新增 New Item 選項,將原先的 Create Item 選項名稱改為Delete Item 選項。
利用 CMenu 類別控制功能表
利用 CMenu 類別控制功能表
利用 CMenu 類別控制功能表
修改系統功能表與建立快顯功能表 menu 程式範例將示範如何在系統功能表新增
一個選項,以及建立快顯功能表,如下圖所示。
修改系統功能表與建立快顯功能表CMenu* CWnd::GetSystemMenu( BOOL bRevert ) const 函數說明 若傳入參數為 FALSE 時,將傳回目前執行之視
窗程式的系統功能表指標。 參數說明 BOOL bRevert
當傳入參數為 FALSE 時,將傳回目前執行之視窗程式的系統功能表指標。
修改系統功能表與建立快顯功能表