共用方式為


ModifyMenuW 函式 (winuser.h)

變更現有的功能表項。 此函式可用來指定功能表項的內容、外觀和行為。

NoteModifyMenu 函式已被 setMenuItemInfo 函式取代。 不過,如果您不需要 setMenuItemInfo 的任何擴充功能,您仍然可以使用 ModifyMenu
 

語法

BOOL ModifyMenuW(
  [in]           HMENU    hMnu,
  [in]           UINT     uPosition,
  [in]           UINT     uFlags,
  [in]           UINT_PTR uIDNewItem,
  [in, optional] LPCWSTR  lpNewItem
);

參數

[in] hMnu

類型:HMENU

要變更之功能表的句柄。

[in] uPosition

類型:UINT

要變更的功能表項,由 uFlags 參數所決定。

[in] uFlags

類型:UINT

控制 uPosition 參數的解譯,以及功能表項的內容、外觀和行為。 此參數必須包含下列其中一個必要值。

價值 意義
MF_BYCOMMAND
0x00000000L
表示 uPosition 參數會提供功能表項的標識碼。 如果未指定 MF_BYCOMMANDMF_BYPOSITION 旗標,則 MF_BYCOMMAND 旗標為預設值。
MF_BYPOSITION
0x00000400L
表示 uPosition 參數 會提供功能表項以零起始的相對位置。
 

參數也必須包含至少下列其中一個值。

價值 意義
MF_BITMAP
0x000000004L
使用點陣圖做為功能表項。 lpNewItem 參數包含位陣圖的句柄。
MF_CHECKED
0x00000008L
將複選標記放在項目旁邊。 如果您的應用程式提供複選標記點圖(請參閱 setMenuItemBitmaps 函式 ),此旗標會顯示功能表項旁的選取位圖。
MF_DISABLED
0x000000002L
停用功能表項,使其無法選取,但此旗標不會呈現灰色。
MF_ENABLED
0x00000000L
啟用功能表項,以便選取功能表項,並從其灰色狀態還原它。
MF_GRAYED
0x000000001L
停用功能表項並呈現灰色,使其無法選取。
MF_MENUBARBREAK
0x000000020L
函式與功能表列的 MF_MENUBREAK 旗標相同。 對於下拉功能表、子功能表或快捷方式功能表,新數據行會以垂直線分隔舊數據行。
MF_MENUBREAK
0x00000040L
將專案放在新行(適用於功能表欄)或新數據行中(針對下拉功能表、子功能表或快捷方式功能表),而不分隔數據行。
MF_OWNERDRAW
0x00000100L
指定專案為擁有者繪製的專案。 第一次顯示功能表之前,擁有功能表的視窗會收到 WM_MEASUREITEM 訊息,以擷取功能表項的寬度和高度。 每當必須更新功能表項的外觀時,就會將 WM_DRAWITEM 訊息傳送至擁有者視窗的視窗程式。
MF_POPUP
0x00000010L
指定功能表項會開啟下拉功能表或子功能表。 uIDNewItem 參數會指定下拉功能表或子功能表的句柄。 此旗標可用來將功能表名稱新增至功能表欄或功能表項,以將子功能表開啟至下拉功能表、子功能表或快捷方式功能表。
MF_SEPARATOR
0x00000800L
繪製水準分隔線。 此旗標僅適用於下拉功能表、子功能表或快捷方式功能表。 行無法呈現灰色、停用或反白顯示。 系統會忽略 lpNewItemuIDNewItem 參數。
MF_STRING
0x00000000L
指定功能表項為文字字串;lpNewItem 參數是字串的指標。
MF_UNCHECKED
0x00000000L
不會在專案旁邊放置複選標記(預設值)。 如果您的應用程式提供複選標記點圖(請參閱 SetMenuItemBitmaps 函式),此旗標會顯示功能表項旁的清楚位圖。

[in] uIDNewItem

類型:UINT_PTR

已修改功能表項的標識碼,或者,如果 uFlags 參數已設定 MF_POPUP 旗標,則為下拉功能表或子功能表的句柄。

[in, optional] lpNewItem

類型:LPCTSTR

已變更功能表項的內容。 此參數的解譯取決於 uFlags 參數是否包含 MF_BITMAPMF_OWNERDRAWMF_STRING 旗標。

價值 意義
MF_BITMAP
0x000000004L
點陣圖句柄。
MF_OWNERDRAW
0x00000100L
應用程式所提供的值,用來維護與功能表項相關的其他數據。 值位於 itemData 結構的成員中,該結構 lParam 參數所指向 WM_MEASUREITEMWM_DRAWITEM 建立功能表項或更新其外觀時所傳送的訊息。
MF_STRING
0x00000000L
Null 終止字串的指標(預設值)。

傳回值

類型:BOOL

如果函式成功,則傳回值為非零值。

如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

言論

如果 ModifyMenu 取代開啟下拉功能表或子功能表的功能表項,函式會終結舊的下拉功能表或子功能表,並釋放其所使用的記憶體。

為了讓鍵盤快捷方式使用位圖或擁有者繪製的功能表項,功能表的擁有者必須處理 WM_MENUCHAR 訊息。 如需詳細資訊,請參閱 Owner-Drawn 功能表和WM_MENUCHAR訊息

每當功能表變更時,應用程式都必須呼叫 DrawMenuBar 函式,無論功能表是否在顯示的視窗中。 若要變更現有功能表項的屬性,使用 checkMenuItemEnableMenuItem 函式的速度要快得多。

下列旗標群組不能一起使用:

  • MF_BYCOMMANDMF_BYPOSITION
  • MF_DISABLEDMF_ENABLEDMF_GRAYED
  • MF_BITMAPMF_STRINGMF_OWNERDRAWMF_SEPARATOR
  • MF_MENUBARBREAKMF_MENUBREAK
  • MF_CHECKEDMF_UNCHECKED

例子

如需範例,請參閱 設定 Menu-Item 文字字串的字型

注意

winuser.h 標頭會將ModifyMenu定義為別名,根據UNICODE預處理器常數的定義,自動選取此函式的ANSI或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winuser.h (包括 Windows.h)
連結庫 User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-menu-l1-1-3 (在 Windows 10 版本 10.0.14393 中引進)

另請參閱

AppendMenu

CheckMenuItem

概念

DrawMenuBar

EnableMenuItem

功能表

參考

SetMenuItemBitmaps

SetMenuItemInfo