功能表的建立 製作
簡介功能表 功能表的組成 功能表是視窗介面中,提供使用者選取執行指令的主要控制項。 下圖為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程式範例將示範如何在系統功能表新增一個選項,以及建立快顯功能表,如下圖所示。
修改系統功能表與建立快顯功能表 函數說明 若傳入參數為FALSE時,將傳回目前執行之視窗程式的系統功能表指標。 參數說明 CMenu* CWnd::GetSystemMenu( BOOL bRevert ) const 函數說明 若傳入參數為FALSE時,將傳回目前執行之視窗程式的系統功能表指標。 參數說明 BOOL bRevert 當傳入參數為FALSE時,將傳回目前執行之視窗程式的系統功能表指標。
修改系統功能表與建立快顯功能表