CMenu クラスCMenu Class

Windows の HMENUをカプセル化したものです。An encapsulation of the Windows HMENU.

構文Syntax

class CMenu : public CObject

メンバーMembers

パブリック コンストラクターPublic Constructors

名前Name 説明Description
CMenu:: CMenuCMenu::CMenu CMenu オブジェクトを構築します。Constructs a CMenu object.

パブリック メソッドPublic Methods

名前Name 説明Description
CMenu::AppendMenuCMenu::AppendMenu このメニューの末尾に新しい項目を追加します。Appends a new item to the end of this menu.
CMenu:: AttachCMenu::Attach Windows のメニューハンドルをオブジェクトにアタッチ CMenu します。Attaches a Windows menu handle to a CMenu object.
CMenu:: CheckMenuItemCMenu::CheckMenuItem ポップアップメニューのメニュー項目の横にチェックマークを付けたり、チェックマークを削除したりします。Places a check mark next to or removes a check mark from a menu item in the pop-up menu.
CMenu:: Checkmenuro ItemCMenu::CheckMenuRadioItem メニュー項目の横にラジオボタンを配置し、グループ内の他のすべてのメニュー項目からオプションボタンを削除します。Places a radio button next to a menu item and removes the radio button from all of the other menu items in the group.
CMenu:: CreateMenuCMenu::CreateMenu 空のメニューを作成し、オブジェクトにアタッチし CMenu ます。Creates an empty menu and attaches it to a CMenu object.
CMenu:: CreatePopupMenuCMenu::CreatePopupMenu 空のポップアップメニューを作成し、オブジェクトにアタッチし CMenu ます。Creates an empty pop-up menu and attaches it to a CMenu object.
CMenu::D eleteMenuCMenu::DeleteMenu 指定した項目をメニューから削除します。Deletes a specified item from the menu. メニュー項目にポップアップメニューが関連付けられている場合、はポップアップメニューへのハンドルを破棄し、それによって使用されているメモリを解放します。If the menu item has an associated pop-up menu, destroys the handle to the pop-up menu and frees the memory used by it.
CMenu::D eleteTempMapCMenu::DeleteTempMap CMenuメンバー関数によって作成された一時オブジェクトを削除 FromHandle します。Deletes any temporary CMenu objects created by the FromHandle member function.
CMenu::D estroyMenuCMenu::DestroyMenu オブジェクトに関連付けられているメニューを破棄し、メニューによっ CMenu て占有されているすべてのメモリを解放します。Destroys the menu attached to a CMenu object and frees any memory that the menu occupied.
CMenu::D etachCMenu::Detach Windows のメニューハンドルをオブジェクトからデタッチ CMenu し、ハンドルを返します。Detaches a Windows menu handle from a CMenu object and returns the handle.
CMenu: rawItem:DCMenu::DrawItem オーナー描画メニューの外観が変化したときにフレームワークによって呼び出されます。Called by the framework when a visual aspect of an owner-drawn menu changes.
CMenu:: EnableMenuItemCMenu::EnableMenuItem メニュー項目を有効または無効にしたり、淡色 (灰色) したりします。Enables, disables, or dims (grays) a menu item.
CMenu:: FromHandleCMenu::FromHandle CMenuWindows のメニューハンドルを指定して、オブジェクトへのポインターを返します。Returns a pointer to a CMenu object given a Windows menu handle.
CMenu:: GetDefaultItemCMenu::GetDefaultItem 指定したメニューの既定のメニュー項目を決定します。Determines the default menu item on the specified menu.
CMenu:: GetMenuContextHelpIdCMenu::GetMenuContextHelpId メニューに関連付けられたヘルプコンテキスト ID を取得します。Retrieves the help context ID associated with the menu.
CMenu:: GetMenuInfoCMenu::GetMenuInfo 特定のメニューに関する情報を取得します。Retrieves information on a specific menu.
CMenu:: GetMenuItemCountCMenu::GetMenuItemCount ポップアップメニューまたはトップレベルメニュー内の項目数を決定します。Determines the number of items in a pop-up or top-level menu.
CMenu:: GetMenuItemIDCMenu::GetMenuItemID 指定した位置にあるメニュー項目のメニュー項目の識別子を取得します。Obtains the menu-item identifier for a menu item located at the specified position.
CMenu:: GetMenuItemInfoCMenu::GetMenuItemInfo メニュー項目に関する情報を取得します。Retrieves information about a menu item.
CMenu:: GetMenuStateCMenu::GetMenuState 指定されたメニュー項目のステータス、またはポップアップメニュー内の項目数を返します。Returns the status of the specified menu item or the number of items in a pop-up menu.
CMenu:: GetMenuStringCMenu::GetMenuString 指定したメニュー項目のラベルを取得します。Retrieves the label of the specified menu item.
CMenu:: GetSafeHmenuCMenu::GetSafeHmenu m_hMenuこのオブジェクトによってラップされたを返し CMenu ます。Returns the m_hMenu wrapped by this CMenu object.
CMenu:: GetSubMenu メニューCMenu::GetSubMenu ポップアップメニューへのポインターを取得します。Retrieves a pointer to a pop-up menu.
CMenu::InsertMenuCMenu::InsertMenu 新しいメニュー項目を指定した位置に挿入し、他の項目をメニューの下に移動します。Inserts a new menu item at the specified position, moving other items down the menu.
CMenu:: InsertMenuItemCMenu::InsertMenuItem メニュー内の指定した位置に新しいメニュー項目を挿入します。Inserts a new menu item at the specified position in a menu.
CMenu:: LoadMenuCMenu::LoadMenu 実行可能ファイルからメニューリソースを読み込み、それをオブジェクトにアタッチし CMenu ます。Loads a menu resource from the executable file and attaches it to a CMenu object.
CMenu:: LoadMenuIndirectCMenu::LoadMenuIndirect メニューをメモリ内のメニューテンプレートから読み込み、オブジェクトにアタッチし CMenu ます。Loads a menu from a menu template in memory and attaches it to a CMenu object.
CMenu:: MeasureItemCMenu::MeasureItem オーナー描画メニューが作成されたときにメニューのサイズを決定するために、フレームワークによって呼び出されます。Called by the framework to determine menu dimensions when an owner-drawn menu is created.
CMenu::ModifyMenuCMenu::ModifyMenu 指定した位置にある既存のメニュー項目を変更します。Changes an existing menu item at the specified position.
CMenu:: RemoveMenuCMenu::RemoveMenu 指定したメニューから、関連付けられたポップアップメニューを含むメニュー項目を削除します。Deletes a menu item with an associated pop-up menu from the specified menu.
CMenu:: SetDefaultItemCMenu::SetDefaultItem 指定したメニューの既定のメニュー項目を設定します。Sets the default menu item for the specified menu.
CMenu:: SetMenuContextHelpIdCMenu::SetMenuContextHelpId メニューに関連付けられるヘルプコンテキスト ID を設定します。Sets the help context ID to be associated with the menu.
CMenu:: SetMenuInfoCMenu::SetMenuInfo 特定のメニューに関する情報を設定します。Sets information on a specific menu.
CMenu:: SetMenuItemBitmapsCMenu::SetMenuItemBitmaps 指定されたチェックマークビットマップをメニュー項目に関連付けます。Associates the specified check-mark bitmaps with a menu item.
CMenu:: SetMenuItemInfoCMenu::SetMenuItemInfo メニュー項目に関する情報を変更します。Changes information about a menu item.
CMenu:: TrackPopupMenuCMenu::TrackPopupMenu 指定した位置にフローティングポップアップメニューを表示し、ポップアップメニュー上の項目の選択を追跡します。Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu.
CMenu:: TrackPopupMenuExCMenu::TrackPopupMenuEx 指定した位置にフローティングポップアップメニューを表示し、ポップアップメニュー上の項目の選択を追跡します。Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu.

パブリック演算子Public Operators

名前Name 説明Description
CMenu:: operator HMENUCMenu::operator HMENU メニューオブジェクトのハンドルを取得します。Retrieves the handle of the menu object.
CMenu:: operator! =CMenu::operator != 2つのメニューオブジェクトが等しくないかどうかを判断します。Determines if two menu objects are not equal.
CMenu:: operator = =CMenu::operator == 2つのメニューオブジェクトが等しいかどうかを判断します。Determines if two menu objects are equal.

パブリック データ メンバーPublic Data Members

名前Name 説明Description
CMenu:: m_hMenuCMenu::m_hMenu オブジェクトに関連付けられている Windows メニューへのハンドルを指定し CMenu ます。Specifies the handle to the Windows menu attached to the CMenu object.

解説Remarks

これには、メニューを作成、追跡、更新、および破棄するためのメンバー関数が用意されています。It provides member functions for creating, tracking, updating, and destroying a menu.

CMenuローカルとしてスタックフレームにオブジェクトを作成し、その後 CMenu 、のメンバー関数を呼び出して、必要に応じて新しいメニューを操作します。Create a CMenu object on the stack frame as a local, then call CMenu's member functions to manipulate the new menu as needed. 次に、 CWnd:: SetMenu を呼び出して、メニューをウィンドウに設定し、その直後に CMenu オブジェクトの Detach メンバー関数を呼び出します。Next, call CWnd::SetMenu to set the menu to a window, followed immediately by a call to the CMenu object's Detach member function. この CWnd::SetMenu メンバー関数は、ウィンドウのメニューを新しいメニューに設定し、メニューの変更を反映するようにウィンドウを再描画します。また、メニューの所有権をウィンドウに渡します。The CWnd::SetMenu member function sets the window's menu to the new menu, causes the window to be redrawn to reflect the menu change, and also passes ownership of the menu to the window. を呼び出すと、 Detach オブジェクトから HMENU が切り離され CMenu ます。これにより、ローカル変数がスコープ外に出ると、 CMenu オブジェクトデストラクターは、 CMenu 所有していないメニューを破棄しようとしません。The call to Detach detaches the HMENU from the CMenu object, so that when the local CMenu variable passes out of scope, the CMenu object destructor does not attempt to destroy a menu it no longer owns. メニュー自体は、ウィンドウが破棄されると自動的に破棄されます。The menu itself is automatically destroyed when the window is destroyed.

Loadmenuindirectメンバー関数を使用すると、メモリ内のテンプレートからメニューを作成できますが、 loadmenuの呼び出しによってリソースから作成されたメニューはより簡単に管理でき、メニューリソース自体はメニューエディターで作成および変更できます。You can use the LoadMenuIndirect member function to create a menu from a template in memory, but a menu created from a resource by a call to LoadMenu is more easily maintained, and the menu resource itself can be created and modified by the menu editor.

継承階層Inheritance Hierarchy

CObjectCObject

CMenu

要件Requirements

ヘッダー: afxwin.hHeader: afxwin.h

CMenu:: AppendMenuCMenu::AppendMenu

メニューの末尾に新しい項目を追加します。Appends a new item to the end of a menu.

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL AppendMenu(
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp);

パラメーターParameters

nFlagsnFlags
メニューに追加されたときの新しいメニュー項目の状態に関する情報を指定します。Specifies information about the state of the new menu item when it is added to the menu. これは、「解説」に記載されている1つ以上の値で構成されます。It consists of one or more of the values listed in the Remarks section.

nIDNewItemnIDNewItem
新しいメニュー項目のコマンド ID を指定するか、または nFlags が MF_POPUP に設定されている場合は、ポップアップメニューのメニューハンドル () を指定し HMENU ます。Specifies either the command ID of the new menu item or, if nFlags is set to MF_POPUP, the menu handle ( HMENU) of a pop-up menu. NFlags が MF_SEPARATOR に設定されている場合、 nIDNewItem パラメーターは無視されます (必要ありません)。The nIDNewItem parameter is ignored (not needed) if nFlags is set to MF_SEPARATOR.

lpszNewItemlpszNewItem
新しいメニュー項目の内容を指定します。Specifies the content of the new menu item. NFlags パラメーターは、次の方法で lpszNewItem を解釈するために使用されます。The nFlags parameter is used to interpret lpszNewItem in the following way:

nFlagsnFlags LpszNewItem の解釈Interpretation of lpszNewItem
MF_OWNERDRAWMF_OWNERDRAW アプリケーションが、メニュー項目に関連付けられた追加データを保持するために使用できる32ビット値を格納します。Contains an application-supplied 32-bit value that the application can use to maintain additional data associated with the menu item. この32ビット値は、アプリケーションが WM_MEASUREITEM メッセージと WM_DRAWITEM メッセージを処理するときに使用できます。This 32-bit value is available to the application when it processes WM_MEASUREITEM and WM_DRAWITEM messages. 値は、 itemData これらのメッセージと共に提供される構造体のメンバーに格納されます。The value is stored in the itemData member of the structure supplied with those messages.
MF_STRINGMF_STRING Null で終わる文字列へのポインターが含まれています。Contains a pointer to a null-terminated string. これが既定の解釈です。This is the default interpretation.
MF_SEPARATORMF_SEPARATOR LpszNewItem パラメーターは無視されます (不要)。The lpszNewItem parameter is ignored (not needed).

.PbmppBmp
CBitmapメニュー項目として使用されるオブジェクトを指します。Points to a CBitmap object that will be used as the menu item.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

アプリケーションでは、値を nFlags に設定することによって、メニュー項目の状態を指定できます。The application can specify the state of the menu item by setting values in nFlags. NIDNewItem がポップアップメニューを指定すると、それが追加されるメニューの一部になります。When nIDNewItem specifies a pop-up menu, it becomes part of the menu to which it is appended. このメニューが破棄された場合、追加されたメニューも破棄されます。If that menu is destroyed, the appended menu will also be destroyed. 競合を回避するには、追加されたメニューをオブジェクトからデタッチする必要があり CMenu ます。An appended menu should be detached from a CMenu object to avoid conflict. MF_STRING と MF_OWNERDRAW は、のビットマップバージョンでは有効ではないことに注意して AppendMenu ください。Note that MF_STRING and MF_OWNERDRAW are not valid for the bitmap version of AppendMenu.

次の一覧では、 nFlags で設定できるフラグについて説明します。The following list describes the flags that may be set in nFlags:

  • MF_CHECKED は、MF_UNCHECKED の切り替えとして機能し、項目の横に既定のチェックマークを配置します。MF_CHECKED Acts as a toggle with MF_UNCHECKED to place the default check mark next to the item. アプリケーションがチェックマークビットマップ ( Setmenuitembitmaps メンバー関数を参照) を提供する場合は、[チェックマーク] ビットマップが表示されます。When the application supplies check-mark bitmaps (see the SetMenuItemBitmaps member function), the "check mark on" bitmap is displayed.

  • MF_UNCHECKED は、項目の横にあるチェックマークを解除するための MF_CHECKED の切り替えとして機能します。MF_UNCHECKED Acts as a toggle with MF_CHECKED to remove a check mark next to the item. アプリケーションがチェックマークビットマップ (メンバー関数を参照) を提供する場合 SetMenuItemBitmaps 、[チェックマークをオフにする] ビットマップが表示されます。When the application supplies check-mark bitmaps (see the SetMenuItemBitmaps member function), the "check mark off" bitmap is displayed.

  • メニュー項目を選択できないように MF_DISABLED 無効にしますが、淡色は設定されません。MF_DISABLED Disables the menu item so that it cannot be selected but does not dim it.

  • MF_ENABLED では、メニュー項目を選択して、淡色表示の状態から復元することができます。MF_ENABLED Enables the menu item so that it can be selected and restores it from its dimmed state.

  • メニュー項目を無効にして、選択できないように MF_GRAYED します。MF_GRAYED Disables the menu item so that it cannot be selected and dims it.

  • MF_MENUBARBREAK は、静的メニューまたはポップアップメニューの新しい列に項目を新しい行に配置します。MF_MENUBARBREAK Places the item on a new line in static menus or in a new column in pop-up menus. 新しいポップアップメニュー列は、前の列から垂直の区切り線で区切られます。The new pop-up menu column will be separated from the old column by a vertical dividing line.

  • MF_MENUBREAK は、静的メニューまたはポップアップメニューの新しい列に項目を新しい行に配置します。MF_MENUBREAK Places the item on a new line in static menus or in a new column in pop-up menus. 列の間には、分割線は挿入されません。No dividing line is placed between the columns.

  • MF_OWNERDRAW 項目がオーナー描画項目であることを指定します。MF_OWNERDRAW Specifies that the item is an owner-draw item. メニューが初めて表示されるとき、メニューを所有するウィンドウは、メニュー項目の高さと幅を取得する WM_MEASUREITEM メッセージを受け取ります。When the menu is displayed for the first time, the window that owns the menu receives a WM_MEASUREITEM message, which retrieves the height and width of the menu item. WM_DRAWITEM メッセージは、オーナーがメニュー項目の外観を更新する必要があるときに送信されるメッセージです。The WM_DRAWITEM message is the one sent whenever the owner must update the visual appearance of the menu item. このオプションは、トップレベルのメニュー項目に対しては無効です。This option is not valid for a top-level menu item.

  • MF_POPUP メニュー項目にポップアップメニューが関連付けられていることを指定します。MF_POPUP Specifies that the menu item has a pop-up menu associated with it. ID パラメーターは、項目に関連付けられるポップアップメニューへのハンドルを指定します。The ID parameter specifies a handle to a pop-up menu that is to be associated with the item. これは、トップレベルのポップアップメニューまたは階層のポップアップメニューをポップアップメニュー項目に追加するために使用されます。This is used for adding either a top-level pop-up menu or a hierarchical pop-up menu to a pop-up menu item.

  • MF_SEPARATOR は、水平方向の区切り線を描画します。MF_SEPARATOR Draws a horizontal dividing line. ポップアップメニューでのみ使用できます。Can only be used in a pop-up menu. この行を淡色表示、無効、または強調表示することはできません。This line cannot be dimmed, disabled, or highlighted. その他のパラメーターは無視されます。Other parameters are ignored.

  • MF_STRING メニュー項目が文字列であることを指定します。MF_STRING Specifies that the menu item is a character string.

次の各グループには、相互に排他的で、同時に使用できないフラグが一覧表示されます。Each of the following groups lists flags that are mutually exclusive and cannot be used together:

  • MF_DISABLED、MF_ENABLED、および MF_GRAYEDMF_DISABLED, MF_ENABLED, and MF_GRAYED

  • MF_STRING、MF_OWNERDRAW、MF_SEPARATOR、およびビットマップバージョンMF_STRING, MF_OWNERDRAW, MF_SEPARATOR, and the bitmap version

  • MF_MENUBARBREAK と MF_MENUBREAKMF_MENUBARBREAK and MF_MENUBREAK

  • MF_CHECKED と MF_UNCHECKEDMF_CHECKED and MF_UNCHECKED

ウィンドウに表示されているメニューが変更された場合 (ウィンドウが表示されているかどうかにかかわらず)、アプリケーションは CWnd::D rawMenuBarを呼び出す必要があります。Whenever a menu that resides in a window is changed (whether or not the window is displayed), the application should call CWnd::DrawMenuBar.

Example

CMenu:: CreateMenu」の例を参照してください。See the example for CMenu::CreateMenu.

CMenu:: AttachCMenu::Attach

既存の Windows メニューをオブジェクトにアタッチ CMenu します。Attaches an existing Windows menu to a CMenu object.

BOOL Attach(HMENU hMenu);

パラメーターParameters

hMenuhMenu
Windows メニューのハンドルを指定します。Specifies a handle to a Windows menu.

戻り値Return Value

操作が成功した場合は0以外の。それ以外の場合は0です。Nonzero if the operation was successful; otherwise 0.

解説Remarks

メニューが既にオブジェクトにアタッチされている場合、この関数を呼び出すことはできません CMenuThis function should not be called if a menu is already attached to the CMenu object. メニューハンドルは、データメンバーに格納され m_hMenu ます。The menu handle is stored in the m_hMenu data member.

操作するメニューが既にウィンドウに関連付けられている場合は、 CWnd:: getmenu 関数を使用して、メニューへのハンドルを取得できます。If the menu you want to manipulate is already associated with a window, you can use the CWnd::GetMenu function to get a handle to the menu.

Example

CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);

// Now you can manipulate the window's menu as a CMenu
// object...

mnu.Detach();

CMenu:: CheckMenuItemCMenu::CheckMenuItem

ポップアップメニューのメニュー項目からチェックマークを追加または削除します。Adds check marks to or removes check marks from menu items in the pop-up menu.

UINT CheckMenuItem(
    UINT nIDCheckItem,
    UINT nCheck);

パラメーターParameters

nIDCheckItemnIDCheckItem
N によって決定される、チェックするメニュー項目を指定します。Specifies the menu item to be checked, as determined by nCheck.

nnCheck
メニュー項目を確認する方法、およびメニュー内の項目の位置を確認する方法を指定します。Specifies how to check the menu item and how to determine the item's position in the menu. N パラメーターは、MF_BYPOSITION または MF_BYCOMMAND フラグを持つ MF_CHECKED または MF_UNCHECKED の組み合わせにすることができます。The nCheck parameter can be a combination of MF_CHECKED or MF_UNCHECKED with MF_BYPOSITION or MF_BYCOMMAND flags. これらのフラグは、ビットごとの OR 演算子を使用して組み合わせることができます。These flags can be combined by using the bitwise OR operator. これらの意味は次のとおりです。They have the following meanings:

  • MF_BYCOMMAND は、パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。MF_BYCOMMAND Specifies that the parameter gives the command ID of the existing menu item. 既定値です。This is the default.

  • MF_BYPOSITION は、パラメーターが既存のメニュー項目の位置を示すことを指定します。MF_BYPOSITION Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

  • MF_CHECKED は、MF_UNCHECKED の切り替えとして機能し、項目の横に既定のチェックマークを配置します。MF_CHECKED Acts as a toggle with MF_UNCHECKED to place the default check mark next to the item.

  • MF_UNCHECKED は、項目の横にあるチェックマークを解除するための MF_CHECKED の切り替えとして機能します。MF_UNCHECKED Acts as a toggle with MF_CHECKED to remove a check mark next to the item.

戻り値Return Value

項目の以前の状態: MF_CHECKED または MF_UNCHECKED、またはメニュー項目が存在しない場合は0xFFFFFFFF。The previous state of the item: MF_CHECKED or MF_UNCHECKED, or 0xFFFFFFFF if the menu item did not exist.

解説Remarks

NIDCheckItem パラメーターは、変更する項目を指定します。The nIDCheckItem parameter specifies the item to be modified.

NIDCheckItem パラメーターは、ポップアップメニュー項目およびメニュー項目を識別できます。The nIDCheckItem parameter may identify a pop-up menu item as well as a menu item. ポップアップメニュー項目をチェックするために特別な手順は必要ありません。No special steps are required to check a pop-up menu item. トップレベルのメニュー項目を確認することはできません。Top-level menu items cannot be checked. ポップアップメニュー項目は、メニュー項目識別子が関連付けられていないため、位置によって確認する必要があります。A pop-up menu item must be checked by position since it does not have a menu-item identifier associated with it.

Example

CMenu:: GetMenuState」の例を参照してください。See the example for CMenu::GetMenuState.

CMenu:: Checkmenuro ItemCMenu::CheckMenuRadioItem

指定されたメニュー項目をチェックし、それをラジオ項目にします。Checks a specified menu item and makes it a radio item.

BOOL CheckMenuRadioItem(
    UINT nIDFirst,
    UINT nIDLast,
    UINT nIDItem,
    UINT nFlags);

パラメーターParameters

nIDFirstnIDFirst
オプションボタングループの最初のメニュー項目を、( nFlags の値に応じて) ID またはオフセットとして指定します。Specifies (as an ID or offset, depending on the value of nFlags) the first menu item in the radio button group.

nIDLastnIDLast
オプションボタングループの最後のメニュー項目を、( nFlags の値に応じて) ID またはオフセットとして指定します。Specifies (as an ID or offset, depending on the value of nFlags) the last menu item in the radio button group.

nIDItemnIDItem
オプションボタンを使用してチェックするグループ内の項目を、(値が nFlags の場合は ID またはオフセットとして) 指定します。Specifies (as an ID or offset, depending on the value of nFlags) the item in the group which will be checked with a radio button.

nFlagsnFlags
次のように、 nIDFirstNIDLast、および nIDItem の解釈を指定します。Specifies interpretation of nIDFirst, nIDLast, and nIDItem in the following way:

nFlagsnFlags 解釈Interpretation
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

戻り値Return Value

成功した場合は0以外の。それ以外の場合は0Nonzero if successful; otherwise 0

解説Remarks

同時に、関数は、関連付けられているグループ内の他のすべてのメニュー項目をオフにし、それらの項目のオプション項目の種類フラグをクリアします。At the same time, the function unchecks all other menu items in the associated group and clears the radio-item type flag for those items. チェックマークの付いた項目は、チェックマークのビットマップの代わりに、オプションボタン (または箇条書き) のビットマップを使用して表示されます。The checked item is displayed using a radio button (or bullet) bitmap instead of a check mark bitmap.

Example

ON_COMMAND_RANGEの例を参照してください。See the example for ON_COMMAND_RANGE.

CMenu:: CMenuCMenu::CMenu

空のメニューを作成し、オブジェクトにアタッチし CMenu ます。Creates an empty menu and attaches it to a CMenu object.

CMenu();

解説Remarks

メニューは、の create または load メンバー関数のいずれかを呼び出すまでは作成されません。 CMenu:The menu is not created until you call one of the create or load member functions of CMenu:

CMenu:: CreateMenuCMenu::CreateMenu

メニューを作成し、オブジェクトにアタッチし CMenu ます。Creates a menu and attaches it to the CMenu object.

BOOL CreateMenu();

戻り値Return Value

メニューが正常に作成された場合は0以外の。それ以外の場合は0です。Nonzero if the menu was created successfully; otherwise 0.

解説Remarks

このメニューは、最初は空です。The menu is initially empty. メニュー項目を追加するには、 AppendMenu またはメンバー関数を使用し InsertMenu ます。Menu items can be added by using the AppendMenu or InsertMenu member function.

メニューがウィンドウに割り当てられている場合は、ウィンドウが破棄されると自動的に破棄されます。If the menu is assigned to a window, it is automatically destroyed when the window is destroyed.

終了する前に、メニューがウィンドウに割り当てられていない場合は、アプリケーションでメニューに関連付けられているシステムリソースを解放する必要があります。Before exiting, an application must free system resources associated with a menu if the menu is not assigned to a window. アプリケーションは、 destroymenu メンバー関数を呼び出すことによってメニューを解放します。An application frees a menu by calling the DestroyMenu member function.

Example

// The code fragment below shows how to create a new menu for the
// application window using CreateMenu() and CreatePopupMenu().
// Then, the created menu will replace the current menu of the
// application. The old menu will be destroyed with DestroyMenu().
// NOTE: The code fragment below is done in a CFrameWnd-derived class.

// Create a new menu for the application window.
VERIFY(m_NewMenu.CreateMenu());

// Create a "File" popup menu and insert this popup menu to the
// new menu of the application window. The "File" menu has only
// one menu item, i.e. "Exit".
VERIFY(m_FileMenu.CreatePopupMenu());
m_FileMenu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("E&xit"));
m_NewMenu.AppendMenu(MF_POPUP, (UINT_PTR)m_FileMenu.m_hMenu, _T("&File"));

// Remove and destroy old menu
SetMenu(NULL);
CMenu *old_menu = CMenu::FromHandle(m_hMenuDefault);
old_menu->DestroyMenu();

// Add new menu.
SetMenu(&m_NewMenu);

// Assign default menu
m_hMenuDefault = m_NewMenu.m_hMenu;

CMenu:: CreatePopupMenuCMenu::CreatePopupMenu

ポップアップメニューを作成し、オブジェクトにアタッチし CMenu ます。Creates a pop-up menu and attaches it to the CMenu object.

BOOL CreatePopupMenu();

戻り値Return Value

ポップアップメニューが正常に作成された場合は0以外の。それ以外の場合は0です。Nonzero if the pop-up menu was successfully created; otherwise 0.

解説Remarks

このメニューは、最初は空です。The menu is initially empty. メニュー項目を追加するには、 AppendMenu またはメンバー関数を使用し InsertMenu ます。Menu items can be added by using the AppendMenu or InsertMenu member function. アプリケーションでは、既存のメニューまたはポップアップメニューにポップアップメニューを追加できます。The application can add the pop-up menu to an existing menu or pop-up menu. TrackPopupMenuこのメンバー関数を使用すると、このメニューをフローティングポップアップメニューとして表示したり、ポップアップメニューで選択を追跡したりできます。The TrackPopupMenu member function may be used to display this menu as a floating pop-up menu and to track selections on the pop-up menu.

メニューがウィンドウに割り当てられている場合は、ウィンドウが破棄されると自動的に破棄されます。If the menu is assigned to a window, it is automatically destroyed when the window is destroyed. メニューが既存のメニューに追加されると、メニューが破棄されると自動的に破棄されます。If the menu is added to an existing menu, it is automatically destroyed when that menu is destroyed.

メニューがウィンドウに割り当てられていない場合、終了する前に、アプリケーションでポップアップメニューに関連付けられているシステムリソースを解放する必要があります。Before exiting, an application must free system resources associated with a pop-up menu if the menu is not assigned to a window. アプリケーションは、 destroymenu メンバー関数を呼び出すことによってメニューを解放します。An application frees a menu by calling the DestroyMenu member function.

Example

CMenu:: CreateMenu」の例を参照してください。See the example for CMenu::CreateMenu.

CMenu::D eleteMenuCMenu::DeleteMenu

メニューから項目を削除します。Deletes an item from the menu.

BOOL DeleteMenu(
    UINT nPosition,
    UINT nFlags);

パラメーターParameters

nPositionnPosition
NFlags によって決定される、削除するメニュー項目を指定します。Specifies the menu item that is to be deleted, as determined by nFlags.

nFlagsnFlags
は、次のように nPosition を解釈するために使用されます。Is used to interpret nPosition in the following way:

nFlagsnFlags NPosition の解釈Interpretation of nPosition
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

メニュー項目にポップアップメニューが関連付けられている場合は、ポップアップメニュー DeleteMenu のハンドルを破棄し、ポップアップメニューによって使用されているメモリを解放します。If the menu item has an associated pop-up menu, DeleteMenu destroys the handle to the pop-up menu and frees the memory used by the pop-up menu.

ウィンドウに表示されているメニューが変更された場合 (ウィンドウが表示されているかどうかにかかわらず)、アプリケーションは CWnd::D rawMenuBarを呼び出す必要があります。Whenever a menu that resides in a window is changed (whether or not the window is displayed), the application must call CWnd::DrawMenuBar.

Example

CWnd:: GetMenuの例を参照してください。See the example for CWnd::GetMenu.

CMenu::D eleteTempMapCMenu::DeleteTempMap

アイドルタイムハンドラーによって自動的に呼び出され CWinAppCMenu FromHandle メンバー関数によって作成された一時オブジェクトを削除します。Called automatically by the CWinApp idle-time handler, deletes any temporary CMenu objects created by the FromHandle member function.

static void PASCAL DeleteTempMap();

解説Remarks

DeleteTempMap オブジェクトを削除する前に、一時オブジェクトにアタッチされている Windows メニューオブジェクトをデタッチし CMenu CMenu ます。DeleteTempMap detaches the Windows menu object attached to a temporary CMenu object before deleting the CMenu object.

Example

// DeleteTempMap() is a static member and does not need
// an instantiated CMenu object.
CMenu::DeleteTempMap();

CMenu::D estroyMenuCMenu::DestroyMenu

メニューと、使用されたすべての Windows リソースを破棄します。Destroys the menu and any Windows resources that were used.

BOOL DestroyMenu();

戻り値Return Value

メニューが破棄された場合は0以外の。それ以外の場合は0です。Nonzero if the menu is destroyed; otherwise 0.

解説Remarks

メニューは、 CMenu 破棄される前にオブジェクトからデタッチされます。The menu is detached from the CMenu object before it is destroyed. Windows の DestroyMenu 関数は、デストラクターで自動的に呼び出され CMenu ます。The Windows DestroyMenu function is automatically called in the CMenu destructor.

Example

CMenu:: CreateMenu」の例を参照してください。See the example for CMenu::CreateMenu.

CMenu::D etachCMenu::Detach

Windows メニューをオブジェクトからデタッチ CMenu し、ハンドルを返します。Detaches a Windows menu from a CMenu object and returns the handle.

HMENU Detach();

戻り値Return Value

成功した場合は、HMENU 型のハンドルを Windows メニューに返します。それ以外の場合は NULL。The handle, of type HMENU, to a Windows menu, if successful; otherwise NULL.

解説Remarks

m_hMenuデータメンバーが NULL に設定されています。The m_hMenu data member is set to NULL.

Example

CMenu mnu;
HMENU hmnu = AfxGetMainWnd()->GetMenu()->GetSafeHmenu();
mnu.Attach(hmnu);

// Now you can manipulate the window's menu as a CMenu
// object...

mnu.Detach();

CMenu: rawItem:DCMenu::DrawItem

オーナー描画メニューの外観が変化したときにフレームワークによって呼び出されます。Called by the framework when a visual aspect of an owner-drawn menu changes.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

パラメーターParameters

lpDrawItemStructlpDrawItemStruct
必要な描画の種類に関する情報を格納している DRAWITEMSTRUCT 構造体へのポインター。A pointer to a DRAWITEMSTRUCT structure that contains information about the type of drawing required.

解説Remarks

itemAction構造体のメンバーは、 DRAWITEMSTRUCT 実行する描画アクションを定義します。The itemAction member of the DRAWITEMSTRUCT structure defines the drawing action that is to be performed. オーナー描画オブジェクトの描画を実装するには、このメンバー関数をオーバーライドし CMenu ます。Override this member function to implement drawing for an owner-draw CMenu object. アプリケーションは、このメンバー関数が終了する前に、 lpDrawItemStruct で指定された表示コンテキスト用に選択されたすべてのグラフィックスデバイスインターフェイス (GDI) オブジェクトを復元する必要があります。The application should restore all graphics device interface (GDI) objects selected for the display context supplied in lpDrawItemStruct before the termination of this member function.

構造の説明については、「 CWnd:: OnDrawItem 」を参照してください DRAWITEMSTRUCTSee CWnd::OnDrawItem for a description of the DRAWITEMSTRUCT structure.

Example

次のコードは、MFC CTRLTEST サンプルからのものです。The following code is from the MFC CTRLTEST sample:

// Override DrawItem() to implement drawing for an owner-draw CMenu object.
// CColorMenu is a CMenu-derived class.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
   CDC *pDC = CDC::FromHandle(lpDIS->hDC);
   COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data

   if (lpDIS->itemAction & ODA_DRAWENTIRE)
   {
      // Paint the color item in the color requested
      CBrush br(cr);
      pDC->FillRect(&lpDIS->rcItem, &br);
   }

   if ((lpDIS->itemState & ODS_SELECTED) &&
       (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
   {
      // item has been selected - hilite frame
      COLORREF crHilite = RGB(255 - GetRValue(cr),
                              255 - GetGValue(cr), 255 - GetBValue(cr));
      CBrush br(crHilite);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }

   if (!(lpDIS->itemState & ODS_SELECTED) &&
       (lpDIS->itemAction & ODA_SELECT))
   {
      // Item has been de-selected -- remove frame
      CBrush br(cr);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }
}

CMenu:: EnableMenuItemCMenu::EnableMenuItem

メニュー項目を有効、無効、または暗くします。Enables, disables, or dims a menu item.

UINT EnableMenuItem(
    UINT nIDEnableItem,
    UINT nEnable);

パラメーターParameters

nIDEnableItemnIDEnableItem
NEnable によって決定される、有効にするメニュー項目を指定します。Specifies the menu item to be enabled, as determined by nEnable. このパラメーターでは、ポップアップメニュー項目だけでなく、標準のメニュー項目を指定できます。This parameter can specify pop-up menu items as well as standard menu items.

nEnablenEnable
実行するアクションを指定します。Specifies the action to take. MF_BYCOMMAND または MF_BYPOSITION を使用して、MF_DISABLED、MF_ENABLED、または MF_GRAYED の組み合わせにすることができます。It can be a combination of MF_DISABLED, MF_ENABLED, or MF_GRAYED, with MF_BYCOMMAND or MF_BYPOSITION. これらの値は、ビットごとの OR 演算子を使用して組み合わせることができます。These values can be combined by using the bitwise OR operator. これらの値には次の意味があります。These values have the following meanings:

  • MF_BYCOMMAND は、パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。MF_BYCOMMAND Specifies that the parameter gives the command ID of the existing menu item. 既定値です。This is the default.

  • MF_BYPOSITION は、パラメーターが既存のメニュー項目の位置を示すことを指定します。MF_BYPOSITION Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

  • メニュー項目を選択できないように MF_DISABLED 無効にしますが、淡色は設定されません。MF_DISABLED Disables the menu item so that it cannot be selected but does not dim it.

  • MF_ENABLED では、メニュー項目を選択して、淡色表示の状態から復元することができます。MF_ENABLED Enables the menu item so that it can be selected and restores it from its dimmed state.

  • メニュー項目を無効にして、選択できないように MF_GRAYED します。MF_GRAYED Disables the menu item so that it cannot be selected and dims it.

戻り値Return Value

以前の状態 (MF_DISABLED、MF_ENABLED、または MF_GRAYED)、または有効でない場合は-1。Previous state ( MF_DISABLED, MF_ENABLED, or MF_GRAYED) or -1 if not valid.

解説Remarks

CreateMenuinsertmenuModifymenu、およびloadmenuindirectメンバー関数は、メニュー項目の状態 (有効、無効、または淡色表示) を設定することもできます。The CreateMenu, InsertMenu, ModifyMenu, and LoadMenuIndirect member functions can also set the state (enabled, disabled, or dimmed) of a menu item.

MF_BYPOSITION 値を使用するには、アプリケーションが正しいを使用する必要があり CMenu ます。Using the MF_BYPOSITION value requires an application to use the correct CMenu. メニューバーのが使用されている場合は、 CMenu トップレベルのメニュー項目 (メニューバーの項目) が影響を受けます。If the CMenu of the menu bar is used, a top-level menu item (an item in the menu bar) is affected. ポップアップメニューまたは入れ子になったポップアップメニューの位置によって項目の状態を設定するには、アプリケーションでポップアップメニューのを指定する必要があり CMenu ます。To set the state of an item in a pop-up or nested pop-up menu by position, an application must specify the CMenu of the pop-up menu.

アプリケーションで MF_BYCOMMAND フラグが指定されている場合、Windows はの下位にあるすべてのポップアップメニュー項目をチェックします CMenu 。したがって、重複するメニュー項目が存在しない場合 CMenu は、メニューバーのを使用するだけで十分です。When an application specifies the MF_BYCOMMAND flag, Windows checks all pop-up menu items that are subordinate to the CMenu; therefore, unless duplicate menu items are present, using the CMenu of the menu bar is sufficient.

Example

// The code fragment below shows how to disable (and gray out) the
// File\New menu item.
// NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
// CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are
// needed, and CMenu::EnableMenuItem() will work as expected.

CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

CMenu:: FromHandleCMenu::FromHandle

メニューへの Windows ハンドルを指定して、オブジェクトへのポインターを返し CMenu ます。Returns a pointer to a CMenu object given a Windows handle to a menu.

static CMenu* PASCAL FromHandle(HMENU hMenu);

パラメーターParameters

hMenuhMenu
メニューを対象とした Windows ハンドル。A Windows handle to a menu.

戻り値Return Value

CMenu一時的または永続的なへのポインター。A pointer to a CMenu that may be temporary or permanent.

解説Remarks

CMenuオブジェクトが Windows メニューオブジェクトにまだアタッチされていない場合は、一時 CMenu オブジェクトが作成され、アタッチされます。If a CMenu object is not already attached to the Windows menu object, a temporary CMenu object is created and attached.

この一時 CMenu オブジェクトは、アプリケーションが次にそのイベントループ内でアイドル状態になるまで有効です。その時点で、すべての一時オブジェクトが削除されます。This temporary CMenu object is only valid until the next time the application has idle time in its event loop, at which time all temporary objects are deleted.

Example

CMenu:: CreateMenu」の例を参照してください。See the example for CMenu::CreateMenu.

CMenu:: GetDefaultItemCMenu::GetDefaultItem

指定したメニューの既定のメニュー項目を決定します。Determines the default menu item on the specified menu.

UINT GetDefaultItem(
    UINT gmdiFlags,
    BOOL fByPos = FALSE);

パラメーターParameters

gmdiFlagsgmdiFlags
関数がメニュー項目を検索する方法を指定する値。Value specifying how the function searches for menu items. このパラメーターには、none、1、または次の値の組み合わせを指定できます。This parameter can be none, one, or a combination of the following values:

Value 説明Meaning
GMDI_GOINTOPOPUPSGMDI_GOINTOPOPUPS 既定の項目がサブメニューを開く場合は、対応するサブメニュー内を再帰的に検索することを指定します。Specifies that, if the default item is one that opens a submenu, the function is to search in the corresponding submenu recursively. サブメニューに既定の項目がない場合は、そのサブメニューを開く項目が戻り値によって識別されます。If the submenu has no default item, the return value identifies the item that opens the submenu.

既定では、この関数は、サブメニューを開く項目であるかどうかに関係なく、指定されたメニューの最初の既定の項目を返します。By default, the function returns the first default item on the specified menu, regardless of whether it is an item that opens a submenu.
GMDI_USEDISABLEDGMDI_USEDISABLED 関数が無効になっている場合でも、既定の項目を返すことを指定します。Specifies that the function is to return a default item, even if it is disabled.

既定では、この関数は、無効またはグレーの項目をスキップします。By default, the function skips disabled or grayed items.

fByPosfByPos
メニュー項目の識別子またはその位置を取得するかどうかを指定する値。Value specifying whether to retrieve the menu item's identifier or its position. このパラメーターが FALSE の場合は、識別子が返されます。If this parameter is FALSE, the identifier is returned. それ以外の場合は、位置が返されます。Otherwise, the position is returned.

戻り値Return Value

関数が成功した場合、戻り値はメニュー項目の識別子または位置になります。If the function succeeds, the return value is the identifier or position of the menu item. 関数が失敗した場合、戻り値は-1 になります。If the function fails, the return value is - 1.

解説Remarks

このメンバー関数は、Windows SDK で説明されているように、Win32 関数 Getmenudefaultitemの動作を実装します。This member function implements the behavior of the Win32 function GetMenuDefaultItem, as described in the Windows SDK.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: GetMenuContextHelpIdCMenu::GetMenuContextHelpId

に関連付けられているコンテキストヘルプ ID を取得 CMenu します。Retrieves the context help ID associated with CMenu.

DWORD GetMenuContextHelpId() const;

戻り値Return Value

現在に関連付けられているコンテキストヘルプ ID がある場合は、 CMenu それ以外の場合は0。The context help ID currently associated with CMenu if it has one; zero otherwise.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: GetMenuInfoCMenu::GetMenuInfo

メニューの情報を取得します。Retrieves information for a menu.

BOOL GetMenuInfo(LPMENUINFO lpcmi) const;

パラメーターParameters

lpcmilpcmi
メニューの情報を格納している Menuinfo 構造体へのポインター。A pointer to a MENUINFO structure containing information for the menu.

戻り値Return Value

関数が成功した場合、戻り値は0以外になります。それ以外の場合、戻り値は0です。If the function succeeds, the return value is nonzero; otherwise, the return value is zero.

解説Remarks

メニューに関する情報を取得するには、この関数を呼び出します。Call this function to retrieve information about the menu.

CMenu:: GetMenuItemCountCMenu::GetMenuItemCount

ポップアップメニューまたはトップレベルメニュー内の項目数を決定します。Determines the number of items in a pop-up or top-level menu.

UINT GetMenuItemCount() const;

戻り値Return Value

関数が成功した場合のメニュー内の項目数。それ以外の場合は-1。The number of items in the menu if the function is successful; otherwise -1.

Example

CWnd:: GetMenuの例を参照してください。See the example for CWnd::GetMenu.

CMenu:: GetMenuItemIDCMenu::GetMenuItemID

NPos で定義された位置にあるメニュー項目のメニュー項目識別子を取得します。Obtains the menu-item identifier for a menu item located at the position defined by nPos.

UINT GetMenuItemID(int nPos) const;

パラメーターParameters

nPosnPos
ID を取得するメニュー項目の位置 (0 から始まる) を指定します。Specifies the position (zero-based) of the menu item whose ID is being retrieved.

戻り値Return Value

関数が成功した場合のポップアップメニュー内の指定された項目の項目 ID。The item ID for the specified item in a pop-up menu if the function is successful. ポップアップメニュー内の項目ではなく、指定した項目がポップアップメニューの場合、戻り値は-1 です。If the specified item is a pop-up menu (as opposed to an item within the pop-up menu), the return value is -1. NPos が SEPARATOR メニュー項目に対応している場合、戻り値は0です。If nPos corresponds to a SEPARATOR menu item, the return value is 0.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: GetMenuItemInfoCMenu::GetMenuItemInfo

メニュー項目に関する情報を取得します。Retrieves information about a menu item.

BOOL GetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

パラメーターParameters

uItemuItem
情報を取得するメニュー項目の識別子または位置。Identifier or position of the menu item to get information about. このパラメーターの意味は、の値によって異なり ByPos ます。The meaning of this parameter depends on the value of ByPos.

lpMenuItemInfolpMenuItemInfo
Windows SDK で説明されているように、メニューに関する情報を格納している MENUITEMINFOへのポインター。A pointer to a MENUITEMINFO, as described in the Windows SDK, that contains information about the menu.

fByPosfByPos
の意味を指定する値 nIDItemValue specifying the meaning of nIDItem. 既定で ByPos は、は FALSE です。これは、uItem がメニュー項目識別子であることを示します。By default, ByPos is FALSE, which indicates that uItem is a menu item identifier. ByPosが FALSE に設定されていない場合は、メニュー項目の位置を示します。If ByPos is not set to FALSE, it indicates a menu item position.

戻り値Return Value

関数が成功すると、戻り値は 0 以外になります。If the function succeeds, the return value is nonzero. 関数が失敗した場合は、0 を返します。If the function fails, the return value is zero. 拡張エラー情報を取得するには、Windows SDK で説明されているように、Win32 関数 GetLastErrorを使用します。To get extended error information, use the Win32 function GetLastError, as described in the Windows SDK.

解説Remarks

このメンバー関数は、Windows SDK で説明されているように、Win32 関数 GetMenuItemInfoのの動作を実装します。This member function implements the behavior of the of the Win32 function GetMenuItemInfo, as described in the Windows SDK. の MFC 実装では、メニューへのハンドルを使用しないことに注意してください GetMenuItemInfoNote that in the MFC implementation of GetMenuItemInfo, you do not use a handle to a menu.

Example

// CMainFrame::OnToggleTestMenuInfo() is a menu command handler for 
// "Toggle Info" menu item (whose resource id is ID_MENU_TOGGLEINFO). It 
// toggles the checked or unchecked state of the "Toggle Info" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuItemInfo()
{
   // Get the popup menu which contains the "Toggle Info" menu item.
   CMenu* mmenu = GetMenu();
   CMenu* submenu = mmenu->GetSubMenu(4);

   // Check the state of the "Toggle Info" menu item. Check the menu item
   // if it is currently unchecked. Otherwise, uncheck the menu item
   // if it is not currently checked.
   MENUITEMINFO info;
   info.cbSize = sizeof (MENUITEMINFO); // must fill up this field
   info.fMask = MIIM_STATE;             // get the state of the menu item
   VERIFY(submenu->GetMenuItemInfo(ID_MENU_TOGGLEINFO, &info));

   if (info.fState & MF_CHECKED)
      submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_UNCHECKED | MF_BYCOMMAND);
   else
      submenu->CheckMenuItem(ID_MENU_TOGGLEINFO, MF_CHECKED | MF_BYCOMMAND);
}

CMenu:: GetMenuStateCMenu::GetMenuState

指定されたメニュー項目のステータス、またはポップアップメニュー内の項目数を返します。Returns the status of the specified menu item or the number of items in a pop-up menu.

UINT GetMenuState(
    UINT nID,
    UINT nFlags) const;

パラメーターParameters

nIDnID
NFlags によって決定されるメニュー項目 ID を指定します。Specifies the menu item ID, as determined by nFlags.

nFlagsnFlags
NID の性質を指定します。Specifies the nature of nID. 次のいずれかの値を指定できます。It can be one of the following values:

  • MF_BYCOMMAND は、パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。MF_BYCOMMAND Specifies that the parameter gives the command ID of the existing menu item. 既定値です。This is the default.

  • MF_BYPOSITION は、パラメーターが既存のメニュー項目の位置を示すことを指定します。MF_BYPOSITION Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

戻り値Return Value

指定した項目が存在しない場合は0xFFFFFFFF。The value 0xFFFFFFFF if the specified item does not exist. NId がポップアップメニューを識別する場合、上位バイトにはポップアップメニュー内の項目の数が含まれ、下位バイトにはポップアップメニューに関連付けられているメニューフラグが格納されます。If nId identifies a pop-up menu, the high-order byte contains the number of items in the pop-up menu and the low-order byte contains the menu flags associated with the pop-up menu. それ以外の場合、戻り値は次の一覧の値のマスク (ブール値または) になります (このマスクは、 nId が識別するメニュー項目の状態を示します)。Otherwise the return value is a mask (Boolean OR) of the values from the following list (this mask describes the status of the menu item that nId identifies):

  • MF_CHECKED は、MF_UNCHECKED の切り替えとして機能し、項目の横に既定のチェックマークを配置します。MF_CHECKED Acts as a toggle with MF_UNCHECKED to place the default check mark next to the item. アプリケーションがチェックマークビットマップ (メンバー関数を参照) を提供する場合 SetMenuItemBitmaps 、[チェックマーク] ビットマップが表示されます。When the application supplies check-mark bitmaps (see the SetMenuItemBitmaps member function), the "check mark on" bitmap is displayed.

  • メニュー項目を選択できないように MF_DISABLED 無効にしますが、淡色は設定されません。MF_DISABLED Disables the menu item so that it cannot be selected but does not dim it.

  • MF_ENABLED では、メニュー項目を選択して、淡色表示の状態から復元することができます。MF_ENABLED Enables the menu item so that it can be selected and restores it from its dimmed state. この定数の値が0であることに注意してください。アプリケーションでは、この値を使用しているときにエラーが発生した場合、0に対してテストしないでください。Note that the value of this constant is 0; an application should not test against 0 for failure when using this value.

  • メニュー項目を無効にして、選択できないように MF_GRAYED します。MF_GRAYED Disables the menu item so that it cannot be selected and dims it.

  • MF_MENUBARBREAK は、静的メニューまたはポップアップメニューの新しい列に項目を新しい行に配置します。MF_MENUBARBREAK Places the item on a new line in static menus or in a new column in pop-up menus. 新しいポップアップメニュー列は、前の列から垂直の区切り線で区切られます。The new pop-up menu column will be separated from the old column by a vertical dividing line.

  • MF_MENUBREAK は、静的メニューまたはポップアップメニューの新しい列に項目を新しい行に配置します。MF_MENUBREAK Places the item on a new line in static menus or in a new column in pop-up menus. 列の間には、分割線は挿入されません。No dividing line is placed between the columns.

  • MF_SEPARATOR は、水平方向の区切り線を描画します。MF_SEPARATOR Draws a horizontal dividing line. ポップアップメニューでのみ使用できます。Can only be used in a pop-up menu. この行を淡色表示、無効、または強調表示することはできません。This line cannot be dimmed, disabled, or highlighted. その他のパラメーターは無視されます。Other parameters are ignored.

  • MF_UNCHECKED は、項目の横にあるチェックマークを解除するための MF_CHECKED の切り替えとして機能します。MF_UNCHECKED Acts as a toggle with MF_CHECKED to remove a check mark next to the item. アプリケーションがチェックマークビットマップ (メンバー関数を参照) を提供する場合 SetMenuItemBitmaps 、[チェックマークをオフにする] ビットマップが表示されます。When the application supplies check-mark bitmaps (see the SetMenuItemBitmaps member function), the "check mark off" bitmap is displayed. この定数の値が0であることに注意してください。アプリケーションでは、この値を使用しているときにエラーが発生した場合、0に対してテストしないでください。Note that the value of this constant is 0; an application should not test against 0 for failure when using this value.

Example

// CMainFrame::OnToggleTestMenuState() is a menu command handler for
// "Toggle State" menu item (whose resource id is ID_MENU_TOGGLESTATE).
// It toggles the checked or unchecked state of the "Toggle State" menu item.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnToggleTestMenuState()
{
   // Get the popup menu which contains the "Toggle State" menu item.
   CMenu *mmenu = GetMenu();
   CMenu *submenu = mmenu->GetSubMenu(4);

   // Check the state of the "Toggle State" menu item. Check the menu item
   // if it is currently unchecked. Otherwise, uncheck the menu item
   // if it is not currently checked.
   UINT state = submenu->GetMenuState(ID_MENU_TOGGLESTATE, MF_BYCOMMAND);
   ASSERT(state != 0xFFFFFFFF);

   if (state & MF_CHECKED)
      submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_UNCHECKED | MF_BYCOMMAND);
   else
      submenu->CheckMenuItem(ID_MENU_TOGGLESTATE, MF_CHECKED | MF_BYCOMMAND);
}

CMenu:: GetMenuStringCMenu::GetMenuString

指定したメニュー項目のラベルを指定したバッファーにコピーします。Copies the label of the specified menu item to the specified buffer.

int GetMenuString(
    UINT nIDItem,
    LPTSTR lpString,
    int nMaxCount,
    UINT nFlags) const;

int GetMenuString(
    UINT nIDItem,
    CString& rString,
    UINT nFlags) const;

パラメーターParameters

nIDItemnIDItem
NFlags の値に応じて、メニュー項目の整数識別子、またはメニュー項目のオフセットを指定します。Specifies the integer identifier of the menu item or the offset of the menu item in the menu, depending on the value of nFlags.

lpStringlpString
は、ラベルを受け取るバッファーを指します。Points to the buffer that is to receive the label.

rStringrString
コピーされた CString メニュー文字列を受け取るオブジェクトへの参照。A reference to a CString object that is to receive the copied menu string.

nMaxCountnMaxCount
コピーするラベルの最大長 (文字数) を指定します。Specifies the maximum length (in characters) of the label to be copied. ラベルが nMaxCount で指定された最大値より長い場合は、余分な文字が切り捨てられます。If the label is longer than the maximum specified in nMaxCount, the extra characters are truncated.

nFlagsnFlags
NIDItem パラメーターの解釈を指定します。Specifies the interpretation of the nIDItem parameter. 次のいずれかの値を指定できます。It can be one of the following values:

nFlagsnFlags NIDItem の解釈Interpretation of nIDItem
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

戻り値Return Value

Null 終端文字を含まない、バッファーにコピーされる実際の文字数を指定します。Specifies the actual number of characters copied to the buffer, not including the null terminator.

解説Remarks

NMaxCount パラメーターは、文字列を終了する null 文字を格納するために、ラベル内の文字数よりも1つ大きい値にする必要があります。The nMaxCount parameter should be one larger than the number of characters in the label to accommodate the null character that terminates a string.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: GetSafeHmenuCMenu::GetSafeHmenu

このオブジェクトによってラップされた HMENU、 CMenu または NULL ポインターを返し CMenu ます。Returns the HMENU wrapped by this CMenu object, or a NULLCMenu pointer.

HMENU GetSafeHmenu() const;

Example

CMenu:: LoadMenu」の例を参照してください。See the example for CMenu::LoadMenu.

CMenu:: GetSubMenu メニューCMenu::GetSubMenu

CMenuポップアップメニューのオブジェクトを取得します。Retrieves the CMenu object of a pop-up menu.

CMenu* GetSubMenu(int nPos) const;

パラメーターParameters

nPosnPos
メニューに表示されるポップアップメニューの位置を指定します。Specifies the position of the pop-up menu contained in the menu. 最初のメニュー項目の位置の値は0から始まります。Position values start at 0 for the first menu item. ポップアップメニューの識別子は、この関数では使用できません。The pop-up menu's identifier cannot be used in this function.

戻り値Return Value

指定された CMenu m_hMenu 位置にポップアップメニューが存在する場合は、そのメンバーにポップアップメニューへのハンドルを格納しているオブジェクトへのポインター。それ以外の場合は NULL。A pointer to a CMenu object whose m_hMenu member contains a handle to the pop-up menu if a pop-up menu exists at the given position; otherwise NULL. オブジェクトが存在しない場合は、 CMenu 一時的なものが作成されます。If a CMenu object does not exist, then a temporary one is created. 返された CMenu ポインターを格納することはできません。The CMenu pointer returned should not be stored.

Example

CMenu:: TrackPopupMenu」の例を参照してください。See the example for CMenu::TrackPopupMenu.

CMenu:: InsertMenuCMenu::InsertMenu

NPosition で指定した位置に新しいメニュー項目を挿入し、他の項目をメニューの下に移動します。Inserts a new menu item at the position specified by nPosition and moves other items down the menu.

BOOL InsertMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL InsertMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp);

パラメーターParameters

nPositionnPosition
新しいメニュー項目を挿入する前のメニュー項目を指定します。Specifies the menu item before which the new menu item is to be inserted. NFlags パラメーターを使用すると、次の方法で nPosition を解釈できます。The nFlags parameter can be used to interpret nPosition in the following ways:

nFlagsnFlags NPosition の解釈Interpretation of nPosition
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0. NPosition が-1 の場合、新しいメニュー項目がメニューの最後に追加されます。If nPosition is -1, the new menu item is appended to the end of the menu.

nFlagsnFlags
NPosition をどのように解釈するかを指定し、メニューに追加されたときの新しいメニュー項目の状態に関する情報を指定します。Specifies how nPosition is interpreted and specifies information about the state of the new menu item when it is added to the menu. 設定できるフラグの一覧については、「 Appendmenu メンバー関数」を参照してください。For a list of the flags that may be set, see the AppendMenu member function. 複数の値を指定するには、ビットごとの OR 演算子を使用して、MF_BYCOMMAND または MF_BYPOSITION フラグと結合します。To specify more than one value, use the bitwise OR operator to combine them with the MF_BYCOMMAND or MF_BYPOSITION flag.

nIDNewItemnIDNewItem
新しいメニュー項目のコマンド ID を指定するか、または nFlags が MF_POPUP に設定されている場合は、ポップアップメニューのメニューハンドル (HMENU) を指定します。Specifies either the command ID of the new menu item or, if nFlags is set to MF_POPUP, the menu handle ( HMENU) of the pop-up menu. NFlags が MF_SEPARATOR に設定されている場合、 nIDNewItem パラメーターは無視されます (必要ありません)。The nIDNewItem parameter is ignored (not needed) if nFlags is set to MF_SEPARATOR.

lpszNewItemlpszNewItem
新しいメニュー項目の内容を指定します。Specifies the content of the new menu item. nFlags は、次の方法で lpszNewItem を解釈するために使用できます。nFlags can be used to interpret lpszNewItem in the following ways:

nFlagsnFlags LpszNewItem の解釈Interpretation of lpszNewItem
MF_OWNERDRAWMF_OWNERDRAW アプリケーションが、メニュー項目に関連付けられた追加データを保持するために使用できる32ビット値を格納します。Contains an application-supplied 32-bit value that the application can use to maintain additional data associated with the menu item. この32ビット値は、 itemData WM_MEASUREITEM および WM_DRAWITEM メッセージによって提供される構造体のメンバー内のアプリケーションで使用できます。This 32-bit value is available to the application in the itemData member of the structure supplied by the WM_MEASUREITEM and WM_DRAWITEM messages. これらのメッセージは、メニュー項目が最初に表示されたとき、または変更されたときに送信されます。These messages are sent when the menu item is initially displayed or is changed.
MF_STRINGMF_STRING Null で終わる文字列への long ポインターを格納します。Contains a long pointer to a null-terminated string. これが既定の解釈です。This is the default interpretation.
MF_SEPARATORMF_SEPARATOR LpszNewItem パラメーターは無視されます (不要)。The lpszNewItem parameter is ignored (not needed).

.PbmppBmp
CBitmapメニュー項目として使用されるオブジェクトを指します。Points to a CBitmap object that will be used as the menu item.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

アプリケーションでは、値を nFlags に設定することによって、メニュー項目の状態を指定できます。The application can specify the state of the menu item by setting values in nFlags.

ウィンドウに表示されているメニューが変更された場合 (ウィンドウが表示されているかどうかにかかわらず)、アプリケーションはを呼び出す必要があり CWnd::DrawMenuBar ます。Whenever a menu that resides in a window is changed (whether or not the window is displayed), the application should call CWnd::DrawMenuBar.

NIDNewItem がポップアップメニューを指定すると、それが挿入されるメニューの一部になります。When nIDNewItem specifies a pop-up menu, it becomes part of the menu in which it is inserted. このメニューが破棄されると、挿入されたメニューも破棄されます。If that menu is destroyed, the inserted menu will also be destroyed. 競合を回避するには、挿入されたメニューをオブジェクトからデタッチする必要があり CMenu ます。An inserted menu should be detached from a CMenu object to avoid conflict.

アクティブなマルチドキュメントインターフェイス (MDI) 子ウィンドウが最大化されていて、アプリケーションがこの関数を呼び出して MF_BYPOSITION フラグを指定することによって、MDI アプリケーションのメニューにポップアップメニューを挿入する場合、メニューは予想よりも1つ上の位置に挿入されます。If the active multiple document interface (MDI) child window is maximized and an application inserts a pop-up menu into the MDI application's menu by calling this function and specifying the MF_BYPOSITION flag, the menu is inserted one position farther left than expected. これは、アクティブな MDI 子ウィンドウのコントロールメニューが MDI フレームウィンドウのメニューバーの最初の位置に挿入されるために発生します。This happens because the Control menu of the active MDI child window is inserted into the first position of the MDI frame window's menu bar. メニューを適切に配置するには、アプリケーションで、使用する位置の値に1を追加する必要があります。To position the menu properly, the application must add 1 to the position value that would otherwise be used. アプリケーションでは、WM_MDIGETACTIVE メッセージを使用して、現在アクティブな子ウィンドウが最大化されているかどうかを判断できます。An application can use the WM_MDIGETACTIVE message to determine whether the currently active child window is maximized.

Example

// CMainFrame::OnChangeFileMenu() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class.
// It modifies the File menu by inserting, removing and renaming
// some menu items. Other operations include associating a context
// help id and setting default menu item to the File menu.
// CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnChangeFileMenu()
{
   // Get the menu from the application window.
   CMenu *mmenu = GetMenu();

   // Look for "File" menu.
   int pos = FindMenuItem(mmenu, _T("&File"));
   if (pos == -1)
      return;

   // Remove "New" menu item from the File menu.
   CMenu *submenu = mmenu->GetSubMenu(pos);
   pos = FindMenuItem(submenu, _T("&New\tCtrl+N"));
   if (pos > -1)
      submenu->RemoveMenu(pos, MF_BYPOSITION);

   // Look for "Open" menu item from the File menu. Insert a new
   // menu item called "Close" right after the "Open" menu item.
   // ID_CLOSEFILE is the command id for the "Close" menu item.
   pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
   if (pos > -1)
      submenu->InsertMenu(pos + 1, MF_BYPOSITION, ID_CLOSEFILE, _T("&Close"));

   // Rename menu item "Exit" to "Exit Application".
   pos = FindMenuItem(submenu, _T("E&xit"));
   if (pos > -1)
   {
      UINT id = submenu->GetMenuItemID(pos);
      submenu->ModifyMenu(id, MF_BYCOMMAND, id, _T("E&xit Application"));
   }

   // Associate a context help ID with File menu, if one is not found.
   // ID_FILE_CONTEXT_HELPID is the context help ID for the File menu
   // that is defined in resource file.
   if (submenu->GetMenuContextHelpId() == 0)
      submenu->SetMenuContextHelpId(ID_FILE_CONTEXT_HELPID);

   // Set "Open" menu item as the default menu item for the File menu,
   // if one is not found. So, when a user double-clicks the File
   // menu, the system sends a command message to the menu's owner
   // window and closes the menu as if the File\Open command item had
   // been chosen.
   if (submenu->GetDefaultItem(GMDI_GOINTOPOPUPS, TRUE) == -1)
   {
      pos = FindMenuItem(submenu, _T("&Open...\tCtrl+O"));
      submenu->SetDefaultItem(pos, TRUE);
   }
}

// FindMenuItem() will find a menu item string from the specified
// popup menu and returns its position (0-based) in the specified
// popup menu. It returns -1 if no such menu item string is found.
int FindMenuItem(CMenu *Menu, LPCTSTR MenuString)
{
   ASSERT(Menu);
   ASSERT(::IsMenu(Menu->GetSafeHmenu()));

   int count = Menu->GetMenuItemCount();
   for (int i = 0; i < count; i++)
   {
      CString str;
      if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
          str.Compare(MenuString) == 0)
         return i;
   }

   return -1;
}

CMenu:: InsertMenuItemCMenu::InsertMenuItem

メニュー内の指定した位置に新しいメニュー項目を挿入します。Inserts a new menu item at the specified position in a menu.

BOOL InsertMenuItem(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

パラメーターParameters

uItemuItem
Windows SDK の Insertmenuitemuitem の説明を参照してください。See description of uItem in InsertMenuItem in the Windows SDK.

lpMenuItemInfolpMenuItemInfo
Windows SDK の「 lpmii in」を参照してください InsertMenuItemSee description of lpmii in InsertMenuItem in the Windows SDK.

fByPosfByPos
Windows SDK の「」の Fbyposition の説明を参照してください InsertMenuItemSee description of fByPosition in InsertMenuItem in the Windows SDK.

解説Remarks

この関数は、Windows SDK で説明されている Insertmenuitemをラップします。This function wraps InsertMenuItem, described in the Windows SDK.

CMenu:: LoadMenuCMenu::LoadMenu

アプリケーションの実行可能ファイルからメニューリソースを読み込み、それをオブジェクトにアタッチし CMenu ます。Loads a menu resource from the application's executable file and attaches it to the CMenu object.

BOOL LoadMenu(LPCTSTR lpszResourceName);
BOOL LoadMenu(UINT nIDResource);

パラメーターParameters

lpszResourceNamelpszResourceName
読み込むメニューリソースの名前を含む、null で終わる文字列を指します。Points to a null-terminated string that contains the name of the menu resource to load.

nIDResourcenIDResource
読み込むメニューリソースのメニュー ID を指定します。Specifies the menu ID of the menu resource to load.

戻り値Return Value

メニューリソースが正常に読み込まれた場合は0以外の。それ以外の場合は0です。Nonzero if the menu resource was loaded successfully; otherwise 0.

解説Remarks

終了する前に、メニューがウィンドウに割り当てられていない場合は、アプリケーションでメニューに関連付けられているシステムリソースを解放する必要があります。Before exiting, an application must free system resources associated with a menu if the menu is not assigned to a window. アプリケーションは、 destroymenu メンバー関数を呼び出すことによってメニューを解放します。An application frees a menu by calling the DestroyMenu member function.

Example

// CMainFrame::OnReplaceMenu() is a menu command handler for CMainFrame
// class, which in turn is a CFrameWnd-derived class. It loads a new
// menu resource and replaces the SDI application window's menu bar with
// this new menu. CMainFrame is a CFrameWnd-derived class.
void CMainFrame::OnReplaceMenu()
{
   // Load the new menu.
   m_ShortMenu.LoadMenu(IDR_SHORT_MENU);
   ASSERT(m_ShortMenu);

   // Remove and destroy the old menu
   SetMenu(NULL);
   ::DestroyMenu(m_hMenuDefault);

   // Add the new menu
   SetMenu(&m_ShortMenu);

   // Assign default menu
   m_hMenuDefault = m_ShortMenu.GetSafeHmenu(); // or m_ShortMenu.m_hMenu;
}

CMenu:: LoadMenuIndirectCMenu::LoadMenuIndirect

メモリ内のメニューテンプレートからリソースを読み込み、それをオブジェクトにアタッチし CMenu ます。Loads a resource from a menu template in memory and attaches it to the CMenu object.

BOOL LoadMenuIndirect(const void* lpMenuTemplate);

パラメーターParameters

lpMenuTemplatelpMenuTemplate
メニューテンプレート (1 つの Menuitemtemplateheader 構造体と1つ以上の menuitemtemplate 構造体のコレクション) をポイントします。Points to a menu template (which is a single MENUITEMTEMPLATEHEADER structure and a collection of one or more MENUITEMTEMPLATE structures). これらの2つの構造体の詳細については、Windows SDK を参照してください。For more information on these two structures, see the Windows SDK.

戻り値Return Value

メニューリソースが正常に読み込まれた場合は0以外の。それ以外の場合は0です。Nonzero if the menu resource was loaded successfully; otherwise 0.

解説Remarks

メニューテンプレートとは、1つまたは複数のメニュー項目とポップアップメニューを含む、1つ以上の Menuitemtemplate 構造体で構成されるヘッダーです。A menu template is a header followed by a collection of one or more MENUITEMTEMPLATE structures, each of which may contain one or more menu items and pop-up menus.

バージョン番号は0にする必要があります。The version number should be 0.

フラグには、 mtOption ポップアップリストの最後の項目、およびメインリストの最後の項目の MF_END が含まれている必要があります。The mtOption flags should include MF_END for the last item in a pop-up list and for the last item in the main list. AppendMenu他のフラグについては、メンバー関数を参照してください。See the AppendMenu member function for other flags. mtIdで MF_POPUP が指定されている場合は、MENUITEMTEMPLATE 構造体からメンバーを省略する必要があり mtOption ます。The mtId member must be omitted from the MENUITEMTEMPLATE structure when MF_POPUP is specified in mtOption.

MENUITEMTEMPLATE 構造体に割り当てられた領域は、 mtString メニュー項目の名前を null で終わる文字列として格納するのに十分な大きさである必要があります。The space allocated for the MENUITEMTEMPLATE structure must be large enough for mtString to contain the name of the menu item as a null-terminated string.

終了する前に、メニューがウィンドウに割り当てられていない場合は、アプリケーションでメニューに関連付けられているシステムリソースを解放する必要があります。Before exiting, an application must free system resources associated with a menu if the menu is not assigned to a window. アプリケーションは、 destroymenu メンバー関数を呼び出すことによってメニューを解放します。An application frees a menu by calling the DestroyMenu member function.

Example

// CMainFrame::OnLoadMenuIndirect() is a menu command handler for
// CMainFrame class, which in turn is a CFrameWnd-derived class. It
// shows how to use LoadMenuIndirect() to load a resource from a
// menu template in memory.
void CMainFrame::OnLoadMenuIndirect()
{
   // For simplicity, allocate 500 bytes from stack. May use
   // GlobalAlloc() to allocate memory bytes from heap.
   BYTE milist[500];
   memset(milist, 0, 500);
   int bytes_left = sizeof(milist);

   // Fill up the MENUITEMTEMPLATEHEADER structure.
   MENUITEMTEMPLATEHEADER *mheader = (MENUITEMTEMPLATEHEADER*)milist;
   mheader->versionNumber = 0;
   mheader->offset = 0;

   int bytes_used = sizeof(MENUITEMTEMPLATEHEADER);
   bytes_left -= bytes_used;

   // Add the following menu items to menu bar:
   // File     Edit
   //   Exit     Copy
   //            Paste
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&File", 0,
                             TRUE, FALSE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"E&xit",
                             ID_APP_EXIT, FALSE, TRUE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Edit", 0,
                             TRUE, TRUE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Copy",
                             ID_EDIT_COPY, FALSE, FALSE);
   bytes_left -= bytes_used;
   bytes_used += AddMenuItem(milist + bytes_used, bytes_left, L"&Paste",
                             ID_EDIT_PASTE, FALSE, TRUE);
   bytes_left -= bytes_used;

   // Load resource from a menu template in memory.
   ASSERT(m_IndiMenu.LoadMenuIndirect(milist));

   // Remove and destroy old menu
   SetMenu(NULL);
   ::DestroyMenu(m_hMenuDefault);

   // Add new menu.
   SetMenu(&m_IndiMenu);

   // Assign default menu
   m_hMenuDefault = m_IndiMenu.m_hMenu;
}

// This is a helper function for adding a menu item (either a popup
// or command item) to the specified menu template.
//
//    MenuTemplate  - pointer to a menu template
//    TemplateBytes - space remaining in MenuTemplate
//    MenuString    - string for the menu item to be added
//    MenuID        - id for the command item. Its value is ignored if
//                    IsPopup is TRUE.
//    IsPopup       - TRUE for popup menu (or submenu); FALSE for command
//                    item
//    LastItem      - TRUE if MenuString is the last item for the popup;
//                    FALSE otherwise.
UINT AddMenuItem(LPVOID MenuTemplate, int TemplateBytes, WCHAR *MenuString,
                 WORD MenuID, BOOL IsPopup, BOOL LastItem)
{
   MENUITEMTEMPLATE *mitem = (MENUITEMTEMPLATE*)MenuTemplate;

   UINT bytes_used = 0;
   if (IsPopup) // for popup menu
   {
      if (LastItem)
         mitem->mtOption = MF_POPUP | MF_END;
      else
         mitem->mtOption = MF_POPUP;
      bytes_used += sizeof(mitem->mtOption);

      mitem = (MENUITEMTEMPLATE*)((BYTE*)MenuTemplate + bytes_used);
      // a popup doesn't have mtID!!!

      TemplateBytes -= bytes_used;
      wcscpy_s((WCHAR*)mitem, TemplateBytes / sizeof(WCHAR), MenuString);
      bytes_used += (UINT)(sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
   }
   else // for command item
   {
      mitem->mtOption = LastItem ? MF_END : 0;
      mitem->mtID = MenuID;
      TemplateBytes -= bytes_used;
      wcscpy_s(mitem->mtString, TemplateBytes / sizeof(WCHAR), MenuString);
      bytes_used += (UINT)(sizeof(mitem->mtOption) + sizeof(mitem->mtID) +
                           sizeof(WCHAR) * (wcslen(MenuString) + 1)); // include '\0'
   }

   return bytes_used;
}

CMenu:: m_hMenuCMenu::m_hMenu

オブジェクトに関連付けられている Windows メニューの HMENU ハンドルを指定し CMenu ます。Specifies the HMENU handle of the Windows menu attached to the CMenu object.

HMENU m_hMenu;

Example

CMenu:: LoadMenu」の例を参照してください。See the example for CMenu::LoadMenu.

CMenu:: MeasureItemCMenu::MeasureItem

オーナー描画スタイルのメニューが作成されたときにフレームワークによって呼び出されます。Called by the framework when a menu with the owner-draw style is created.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

パラメーターParameters

lpMeasureItemStructlpMeasureItemStruct
構造体へのポインター MEASUREITEMSTRUCTA pointer to a MEASUREITEMSTRUCT structure.

解説Remarks

既定では、このメンバー関数は何も行いません。By default, this member function does nothing. このメンバー関数をオーバーライドし、構造体に入力して MEASUREITEMSTRUCT 、メニューの次元をウィンドウに通知します。Override this member function and fill in the MEASUREITEMSTRUCT structure to inform Windows of the menu's dimensions.

構造の説明については、「 CWnd:: OnMeasureItem 」を参照してください MEASUREITEMSTRUCTSee CWnd::OnMeasureItem for a description of the MEASUREITEMSTRUCT structure.

Example

次のコードは、MFC CTRLTEST サンプルからのものです。The following code is from the MFC CTRLTEST sample:

// Override MeasureItem() to return the size of the menu item.
// CColorMenu is a CMenu-derived class.

#define COLOR_BOX_WIDTH 20
#define COLOR_BOX_HEIGHT 20

void CColorMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
   // all items are of fixed size
   lpMIS->itemWidth = COLOR_BOX_WIDTH;
   lpMIS->itemHeight = COLOR_BOX_HEIGHT;
}

CMenu:: ModifyMenuCMenu::ModifyMenu

NPosition によって指定された位置にある既存のメニュー項目を変更します。Changes an existing menu item at the position specified by nPosition.

BOOL ModifyMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem = 0,
    LPCTSTR lpszNewItem = NULL);

BOOL ModifyMenu(
    UINT nPosition,
    UINT nFlags,
    UINT_PTR nIDNewItem,
    const CBitmap* pBmp);

パラメーターParameters

nPositionnPosition
変更するメニュー項目を指定します。Specifies the menu item to be changed. NFlags パラメーターを使用すると、次の方法で nPosition を解釈できます。The nFlags parameter can be used to interpret nPosition in the following ways:

nFlagsnFlags NPosition の解釈Interpretation of nPosition
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

nFlagsnFlags
NPosition をどのように解釈するかを指定し、メニュー項目に加えられる変更に関する情報を提供します。Specifies how nPosition is interpreted and gives information about the changes to be made to the menu item. 設定できるフラグの一覧については、「 Appendmenu メンバー関数」を参照してください。For a list of flags that may be set, see the AppendMenu member function.

nIDNewItemnIDNewItem
変更したメニュー項目のコマンド ID を指定するか、または nFlags が MF_POPUP に設定されている場合は、ポップアップメニューのメニューハンドル (HMENU) を指定します。Specifies either the command ID of the modified menu item or, if nFlags is set to MF_POPUP, the menu handle (HMENU) of a pop-up menu. NFlags が MF_SEPARATOR に設定されている場合、 nIDNewItem パラメーターは無視されます (必要ありません)。The nIDNewItem parameter is ignored (not needed) if nFlags is set to MF_SEPARATOR.

lpszNewItemlpszNewItem
新しいメニュー項目の内容を指定します。Specifies the content of the new menu item. NFlags パラメーターを使用すると、次の方法で lpszNewItem を解釈できます。The nFlags parameter can be used to interpret lpszNewItem in the following ways:

nFlagsnFlags LpszNewItem の解釈Interpretation of lpszNewItem
MF_OWNERDRAWMF_OWNERDRAW アプリケーションが、メニュー項目に関連付けられた追加データを保持するために使用できる32ビット値を格納します。Contains an application-supplied 32-bit value that the application can use to maintain additional data associated with the menu item. この32ビット値は、アプリケーションが MF_MEASUREITEM と MF_DRAWITEM を処理するときに使用できます。This 32-bit value is available to the application when it processes MF_MEASUREITEM and MF_DRAWITEM.
MF_STRINGMF_STRING Null で終わる文字列またはへの long ポインターを格納し CString ます。Contains a long pointer to a null-terminated string or to a CString.
MF_SEPARATORMF_SEPARATOR LpszNewItem パラメーターは無視されます (不要)。The lpszNewItem parameter is ignored (not needed).

.PbmppBmp
CBitmapメニュー項目として使用されるオブジェクトを指します。Points to a CBitmap object that will be used as the menu item.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

アプリケーションでは、値を nFlags に設定することによって、メニュー項目の新しい状態を指定します。The application specifies the new state of the menu item by setting values in nFlags. この関数がメニュー項目に関連付けられているポップアップメニューを置き換える場合は、古いポップアップメニューを破棄し、ポップアップメニューで使用されているメモリを解放します。If this function replaces a pop-up menu associated with the menu item, it destroys the old pop-up menu and frees the memory used by the pop-up menu.

NIDNewItem がポップアップメニューを指定すると、それが挿入されるメニューの一部になります。When nIDNewItem specifies a pop-up menu, it becomes part of the menu in which it is inserted. このメニューが破棄されると、挿入されたメニューも破棄されます。If that menu is destroyed, the inserted menu will also be destroyed. 競合を回避するには、挿入されたメニューをオブジェクトからデタッチする必要があり CMenu ます。An inserted menu should be detached from a CMenu object to avoid conflict.

ウィンドウに表示されているメニューが変更された場合 (ウィンドウが表示されているかどうかにかかわらず)、アプリケーションはを呼び出す必要があり CWnd::DrawMenuBar ます。Whenever a menu that resides in a window is changed (whether or not the window is displayed), the application should call CWnd::DrawMenuBar. 既存のメニュー項目の属性を変更するには、 CheckMenuItem およびメンバー関数を使用する方がはるかに高速です EnableMenuItemTo change the attributes of existing menu items, it is much faster to use the CheckMenuItem and EnableMenuItem member functions.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: operator HMENUCMenu::operator HMENU

オブジェクトのハンドルを取得するには、この演算子を使用し CMenu ます。Use this operator to retrieve the handle of the CMenu object.

operator HMENU() const;

戻り値Return Value

成功した場合は、オブジェクトのハンドル CMenu 。それ以外の場合は NULL。If successful, the handle of the CMenu object; otherwise, NULL.

解説Remarks

ハンドルを使用すると、Windows Api を直接呼び出すことができます。You can use the handle to call Windows APIs directly.

CMenu:: operator! =CMenu::operator !=

2つのメニューが論理的に等しくないかどうかを判断します。Determines if two menus are logically not equal.

BOOL operator!=(const CMenu& menu) const;

パラメーターParameters

メニューmenu
比較対象の CMenu オブジェクトです。A CMenu object for comparison.

解説Remarks

左側のメニューオブジェクトが右側のメニューオブジェクトと等しくないかどうかをテストします。Tests if a menu object on the left side is not equal to a menu object on the right side.

CMenu:: operator = =CMenu::operator ==

2つのメニューが論理的に等しいかどうかを判断します。Determines if two menus are logically equal.

BOOL operator==(const CMenu& menu) const;

パラメーターParameters

メニューmenu
比較対象の CMenu オブジェクトです。A CMenu object for comparison.

解説Remarks

左側のメニューオブジェクトが右側のメニューオブジェクトに等しいかどうかをテストします (HMENU 値の観点から)。Tests if a menu object on the left side is equal (in terms of the HMENU value) to a menu object on the right side.

CMenu:: RemoveMenuCMenu::RemoveMenu

メニューから、関連付けられたポップアップメニューを含むメニュー項目を削除します。Deletes a menu item with an associated pop-up menu from the menu.

BOOL RemoveMenu(
    UINT nPosition,
    UINT nFlags);

パラメーターParameters

nPositionnPosition
削除するメニュー項目を指定します。Specifies the menu item to be removed. NFlags パラメーターを使用すると、次の方法で nPosition を解釈できます。The nFlags parameter can be used to interpret nPosition in the following ways:

nFlagsnFlags NPosition の解釈Interpretation of nPosition
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

nFlagsnFlags
NPosition をどのように解釈するかを指定します。Specifies how nPosition is interpreted.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

ポップアップメニューのハンドルは破棄されないため、メニューを再利用できます。It does not destroy the handle for a pop-up menu, so the menu can be reused. この関数を呼び出す前に、アプリケーションはメンバー関数を呼び出して、 GetSubMenu 再利用のためにポップアップオブジェクトを取得することがあり CMenu ます。Before calling this function, the application may call the GetSubMenu member function to retrieve the pop-up CMenu object for reuse.

ウィンドウに表示されているメニューが変更された場合 (ウィンドウが表示されているかどうかにかかわらず)、アプリケーションはを呼び出す必要があり CWnd::DrawMenuBar ます。Whenever a menu that resides in a window is changed (whether or not the window is displayed), the application must call CWnd::DrawMenuBar.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: SetDefaultItemCMenu::SetDefaultItem

指定したメニューの既定のメニュー項目を設定します。Sets the default menu item for the specified menu.

BOOL SetDefaultItem(
    UINT uItem,
    BOOL fByPos = FALSE);

パラメーターParameters

uItemuItem
新しい既定のメニュー項目の識別子または位置。既定の項目がない場合は-1。Identifier or position of the new default menu item or - 1 for no default item. このパラメーターの意味は、 fByPos の値によって異なります。The meaning of this parameter depends on the value of fByPos.

fByPosfByPos
Uitem の意味を指定する値。Value specifying the meaning of uItem. このパラメーターが FALSE の場合、 Uitem はメニュー項目識別子です。If this parameter is FALSE, uItem is a menu item identifier. それ以外の場合は、メニュー項目の位置になります。Otherwise, it is a menu item position.

戻り値Return Value

関数が成功すると、戻り値は 0 以外になります。If the function succeeds, the return value is nonzero. 関数が失敗した場合は、0 を返します。If the function fails, the return value is zero. 拡張エラー情報を取得するには、Windows SDK で説明されているように、Win32 関数 GetLastErrorを使用します。To get extended error information, use the Win32 function GetLastError, as described in the Windows SDK.

解説Remarks

このメンバー関数は、Windows SDK で説明されているように、Win32 関数 Setmenudefaultitemの動作を実装します。This member function implements the behavior of the Win32 function SetMenuDefaultItem, as described in the Windows SDK.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: SetMenuContextHelpIdCMenu::SetMenuContextHelpId

コンテキストヘルプ ID をに関連付け CMenu ます。Associates a context help ID with CMenu.

BOOL SetMenuContextHelpId(DWORD dwContextHelpId);

パラメーターParameters

dwContextHelpIddwContextHelpId
に関連付けるコンテキストヘルプ ID CMenuContext help ID to associate with CMenu.

戻り値Return Value

成功した場合は0以外の。それ以外の場合は0Nonzero if successful; otherwise 0

解説Remarks

メニュー内のすべての項目はこの識別子を共有します。個々のメニュー項目にヘルプコンテキスト識別子をアタッチすることはできません。All items in the menu share this identifier — it is not possible to attach a help context identifier to the individual menu items.

Example

CMenu:: InsertMenu」の例を参照してください。See the example for CMenu::InsertMenu.

CMenu:: SetMenuInfoCMenu::SetMenuInfo

メニューの情報を設定します。Sets information for a menu.

BOOL SetMenuInfo(LPCMENUINFO lpcmi);

パラメーターParameters

lpcmilpcmi
メニューの情報を格納している Menuinfo 構造体へのポインター。A pointer to a MENUINFO structure containing information for the menu.

戻り値Return Value

関数が成功した場合、戻り値は0以外になります。それ以外の場合、戻り値は0です。If the function succeeds, the return value is nonzero; otherwise, the return value is zero.

解説Remarks

この関数を呼び出して、メニューに関する特定の情報を設定します。Call this function to set specific information about the menu.

CMenu:: SetMenuItemBitmapsCMenu::SetMenuItemBitmaps

指定したビットマップをメニュー項目に関連付けます。Associates the specified bitmaps with a menu item.

BOOL SetMenuItemBitmaps(
    UINT nPosition,
    UINT nFlags,
    const CBitmap* pBmpUnchecked,
    const CBitmap* pBmpChecked);

パラメーターParameters

nPositionnPosition
変更するメニュー項目を指定します。Specifies the menu item to be changed. NFlags パラメーターを使用すると、次の方法で nPosition を解釈できます。The nFlags parameter can be used to interpret nPosition in the following ways:

nFlagsnFlags NPosition の解釈Interpretation of nPosition
MF_BYCOMMANDMF_BYCOMMAND パラメーターが既存のメニュー項目のコマンド ID を与えることを指定します。Specifies that the parameter gives the command ID of the existing menu item. これは、MF_BYCOMMAND も MF_BYPOSITION も設定されていない場合の既定値です。This is the default if neither MF_BYCOMMAND nor MF_BYPOSITION is set.
MF_BYPOSITIONMF_BYPOSITION パラメーターが既存のメニュー項目の位置を指定することを指定します。Specifies that the parameter gives the position of the existing menu item. 最初の項目の位置は0です。The first item is at position 0.

nFlagsnFlags
NPosition をどのように解釈するかを指定します。Specifies how nPosition is interpreted.

pBmpUncheckedpBmpUnchecked
チェックされていないメニュー項目に使用するビットマップを指定します。Specifies the bitmap to use for menu items that are not checked.

pBmpCheckedpBmpChecked
チェックされるメニュー項目に使用するビットマップを指定します。Specifies the bitmap to use for menu items that are checked.

戻り値Return Value

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。Nonzero if the function is successful; otherwise 0.

解説Remarks

メニュー項目がチェックされているかどうかにかかわらず、Windows ではメニュー項目の横に適切なビットマップが表示されます。Whether the menu item is checked or unchecked, Windows displays the appropriate bitmap next to the menu item.

Pbmpunchecked または pbmpunchecked が NULL の場合は、対応する属性のメニュー項目の横に何も表示されません。If either pBmpUnchecked or pBmpChecked is NULL, then Windows displays nothing next to the menu item for the corresponding attribute. 両方のパラメーターが NULL の場合、項目がチェックされるときに既定のチェックマークが使用され、項目がオフの場合はチェックマークが削除されます。If both parameters are NULL, Windows uses the default check mark when the item is checked and removes the check mark when the item is unchecked.

メニューが破棄されても、これらのビットマップは破棄されません。アプリケーションでそれらを破棄する必要があります。When the menu is destroyed, these bitmaps are not destroyed; the application must destroy them.

Windows 関数は、 GetMenuCheckMarkDimensions メニュー項目に使用される既定のチェックマークの寸法を取得します。The Windows GetMenuCheckMarkDimensions function retrieves the dimensions of the default check mark used for menu items. アプリケーションでは、これらの値を使用して、この関数で提供されるビットマップの適切なサイズを決定します。The application uses these values to determine the appropriate size for the bitmaps supplied with this function. サイズを取得し、ビットマップを作成して、設定します。Get the size, create your bitmaps, and then set them.

Example

// The code fragment below is from CMainFrame::OnCreate and shows
// how to associate bitmaps with the "Bitmap" menu item.
// Whether the "Bitmap" menu item is checked or unchecked, Windows
// displays the appropriate bitmap next to the menu item. Both
// IDB_CHECKBITMAP and IDB_UNCHECKBITMAP bitmaps are loaded
// in OnCreate() and destroyed in the destructor of CMainFrame class.
// CMainFrame is a CFrameWnd-derived class.

// Load bitmaps from resource. Both m_CheckBitmap and m_UnCheckBitmap
// are member variables of CMainFrame class of type CBitmap.
ASSERT(m_CheckBitmap.LoadBitmap(IDB_CHECKBITMAP));
ASSERT(m_UnCheckBitmap.LoadBitmap(IDB_UNCHECKBITMAP));

// Associate bitmaps with the "Bitmap" menu item.
CMenu *mmenu = GetMenu();
CMenu *submenu = mmenu->GetSubMenu(4);
ASSERT(submenu->SetMenuItemBitmaps(ID_MENU_BITMAP, MF_BYCOMMAND,
                                   &m_CheckBitmap, &m_UnCheckBitmap));
// This code fragment is taken from CMainFrame::~CMainFrame

// Destroy the bitmap objects if they are loaded successfully
// in OnCreate().
if (m_CheckBitmap.m_hObject)
   m_CheckBitmap.DeleteObject();

if (m_UnCheckBitmap.m_hObject)
   m_UnCheckBitmap.DeleteObject();

CMenu:: SetMenuItemInfoCMenu::SetMenuItemInfo

メニュー項目に関する情報を変更します。Changes information about a menu item.

BOOL SetMenuItemInfo(
    UINT uItem,
    LPMENUITEMINFO lpMenuItemInfo,
    BOOL fByPos = FALSE);

パラメーターParameters

uItemuItem
Windows SDK の「 SetMenuItemInfouitem の説明」を参照してください。See description of uItem in SetMenuItemInfo in the Windows SDK.

lpMenuItemInfolpMenuItemInfo
Windows SDK の「 lpmii in」を参照してください SetMenuItemInfoSee description of lpmii in SetMenuItemInfo in the Windows SDK.

fByPosfByPos
Windows SDK の「」の Fbyposition の説明を参照してください SetMenuItemInfoSee description of fByPosition in SetMenuItemInfo in the Windows SDK.

解説Remarks

この関数は、Windows SDK で説明されている SetMenuItemInfoをラップします。This function wraps SetMenuItemInfo, described in the Windows SDK.

CMenu:: TrackPopupMenuCMenu::TrackPopupMenu

指定した位置にフローティングポップアップメニューを表示し、ポップアップメニュー上の項目の選択を追跡します。Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu.

BOOL TrackPopupMenu(
    UINT nFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPCRECT lpRect = 0);

パラメーターParameters

nFlagsnFlags
画面位置とマウス位置のフラグを指定します。Specifies screen-position and mouse-position flags. 使用可能なフラグの一覧については、「 TrackPopupMenu 」を参照してください。See TrackPopupMenu for a list of available flags.

xx
ポップアップメニューの画面座標の水平位置を指定します。Specifies the horizontal position in screen coordinates of the pop-up menu. NFlags パラメーターの値に応じて、この位置を基準として左揃え、右揃え、または中央揃えにすることができます。Depending on the value of the nFlags parameter, the menu can be left-aligned, right-aligned, or centered relative to this position.

yy
画面上のメニューの上部の画面座標での垂直位置を指定します。Specifies the vertical position in screen coordinates of the top of the menu on the screen.

pWndpWnd
ポップアップメニューを所有するウィンドウを識別します。Identifies the window that owns the pop-up menu. TPM_NONOTIFY フラグが指定されている場合でも、このパラメーターを NULL にすることはできません。This parameter cannot be NULL, even if the TPM_NONOTIFY flag is specified. このウィンドウは、メニューからすべての WM_COMMAND メッセージを受信します。This window receives all WM_COMMAND messages from the menu. Windows バージョン3.1 以降では、が返されるまで、ウィンドウは WM_COMMAND メッセージを受信しません TrackPopupMenuIn Windows versions 3.1 and later, the window does not receive WM_COMMAND messages until TrackPopupMenu returns. Windows 3.0 では、ウィンドウはを返す前に WM_COMMAND メッセージを受信し TrackPopupMenu ます。In Windows 3.0, the window receives WM_COMMAND messages before TrackPopupMenu returns.

lpRectlpRect
無視されます。Ignored.

戻り値Return Value

このメソッドは、Windows SDK で TrackPopupMenu を呼び出した結果を返します。This method returns the result of calling TrackPopupMenu in the Windows SDK.

解説Remarks

フローティングポップアップメニューは、画面上の任意の場所に表示されます。A floating pop-up menu can appear anywhere on the screen.

Example

// The code fragment shows how to get the File menu from the
// application window and displays it as a floating popup menu
// when the right mouse button is clicked in view.
// CMdiView is a CView-derived class.
void CMdiView::OnRButtonDown(UINT nFlags, CPoint point)
{
   CView::OnRButtonDown(nFlags, point);

   CMenu *menu_bar = AfxGetMainWnd()->GetMenu();
   CMenu *file_menu = menu_bar->GetSubMenu(0);
   ASSERT(file_menu);

   ClientToScreen(&point);
   file_menu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x,
                             point.y, this);
}

CMenu:: TrackPopupMenuExCMenu::TrackPopupMenuEx

指定した位置にフローティングポップアップメニューを表示し、ポップアップメニュー上の項目の選択を追跡します。Displays a floating pop-up menu at the specified location and tracks the selection of items on the pop-up menu.

BOOL TrackPopupMenuEx(
    UINT fuFlags,
    int x,
    int y,
    CWnd* pWnd,
    LPTPMPARAMS lptpm);

パラメーターParameters

Futex フラグfuFlags
拡張メニューのさまざまな機能を指定します。Specifies various functions for the extended menu. すべての値とその意味の一覧については、「 Trackpopupmenuex」を参照してください。For a listing of all values and their meaning, see TrackPopupMenuEx.

xx
ポップアップメニューの画面座標の水平位置を指定します。Specifies the horizontal position in screen coordinates of the pop-up menu.

yy
画面上のメニューの上部の画面座標での垂直位置を指定します。Specifies the vertical position in screen coordinates of the top of the menu on the screen.

pWndpWnd
ポップアップメニューを所有し、作成されたメニューからメッセージを受信するウィンドウへのポインター。A pointer to the window owning the pop-up menu and receiving the messages from the created menu. このウィンドウは、現在のアプリケーションの任意のウィンドウにすることができますが、NULL にすることはできません。This window can be any window from the current application but cannot be NULL. Futex フラグ パラメーターに TPM_NONOTIFY を指定した場合、この関数は、メッセージを pWnd に送信しません。If you specify TPM_NONOTIFY in the fuFlags parameter, the function does not send any messages to pWnd. この関数は、WM_COMMAND メッセージを受信するために、 pWnd が指すウィンドウに対してを返す必要があります。The function must return for the window pointed to by pWnd to receive the WM_COMMAND message.

lptpmlptpm
メニューを重ねることができない画面の領域を指定する TPMPARAMS 構造体へのポインター。Pointer to a TPMPARAMS structure that specifies an area of the screen the menu should not overlap. このパラメーターは、NULL でもかまいません。This parameter can be NULL.

戻り値Return Value

Futex フラグ パラメーターに TPM_RETURNCMD を指定した場合、戻り値は、ユーザーが選択した項目のメニュー項目識別子になります。If you specify TPM_RETURNCMD in the fuFlags parameter, the return value is the menu-item identifier of the item that the user selected. ユーザーが選択を行わずにメニューをキャンセルした場合、またはエラーが発生した場合、戻り値は0になります。If the user cancels the menu without making a selection, or if an error occurs, then the return value is 0.

Futex フラグ パラメーターに TPM_RETURNCMD を指定しなかった場合、戻り値は、関数が成功した場合は0以外の値になり、失敗した場合は0になります。If you do not specify TPM_RETURNCMD in the fuFlags parameter, the return value is nonzero if the function succeeds and 0 if it fails. 詳細なエラー情報を得るには、GetLastError を呼び出します。To get extended error information, call GetLastError.

解説Remarks

フローティングポップアップメニューは、画面上の任意の場所に表示されます。A floating pop-up menu can appear anywhere on the screen. ポップアップメニューを作成するときのエラー処理の詳細については、「 Trackpopupmenuex」を参照してください。For more information on handling errors when creating the pop-up menu, see TrackPopupMenuEx.

関連項目See also

MFC のサンプル CTRLTESTMFC Sample CTRLTEST
MFC のサンプル DYNAMENUMFC Sample DYNAMENU
CObject クラスCObject Class
階層図Hierarchy Chart
CObject クラスCObject Class