プラットフォーム SDK
InsertMenu

指定されたメニューに新しいメニュー項目を挿入し、他のメニュー項目を下へ移動します。

注意  InsertMenu 関数は InsertMenuItem 関数に取って代わられましたが、InsertMenuItem の拡張機能が必要ない場合は、引き続き InsertMenu を使うこともできます。

BOOL InsertMenu(
  HMENU hMenu,          // メニューのハンドル
  UINT uPosition,       // 新しい項目の直前に位置する項目
  UINT uFlags,          // オプション
  UINT_PTR uIDNewItem,  // 識別子、メニュー、サブメニューのいずれか
  LPCTSTR lpNewItem     // メニュー項目の内容
);

パラメータ

hMenu
新しいメニュー項目の挿入先のメニューのハンドルを指定します。
uPosition
挿入するべき新しいメニュー項目の直後に位置するメニュー項目を指定します。たとえば、既存のメニューに 3 つのメニュー項目 m1、m2、m3 があり、新しいメニュー項目 m0 を m1 と m2 の間に挿入したい場合、m2 のメニュー項目を指定します。uFlags パラメータの値に基づいて、直前のメニュー項目の識別子またはメニューバー内での相対位置(オフセット)を指定します。
uFlags
uPosition パラメータの意味と、新しいメニュー項目の内容、外観(表示方法)、動作を指定します。このパラメータでは、uPosition パラメータの意味を指定する次の 2 つのフラグのいずれかと、「解説」で示す他のフラグのいずれかを指定しなければなりません。
説明
MF_BYCOMMANDuPosition パラメータは直後のメニュー項目の識別子を意味します。MF_BYCOMMAND と MF_BYPOSITION のどちらのフラグも指定されていない場合、MF_BYCOMMAND フラグは既定のフラグとして扱われます。
MF_BYPOSITIONuPosition パラメータは直後のメニュー項目の位置を意味します。この位置は、メニュー内でのメニュー項目の相対位置を、0 ベースで指定したものです。たとえば、0 を指定すると、上端のメニュー項目を意味します。uPosition パラメータで -1 を指定すると、新しいメニュー項目はメニューの最後へ追加されます。

uIDNewItem
新しいメニュー項目の識別子を指定します。uFlags パラメータで MF_POPUP フラグを指定した場合は、uIDNewItem パラメータで、新しいメニュー項目に対応するドロップダウンメニューまたはサブメニューのハンドルを指定します。
lpNewItem
新しいメニュー項目の内容を指定します。uFlags パラメータで、MF_BITMAP、MF_OWNERDRAW、MF_STRING のどのフラグが指定されているかに応じて、lpNewItem パラメータの意味が異なります。
説明
MF_BITMAPlpNewItem パラメータは、ビットマップのハンドルを保持しています。
MF_OWNERDRAWlpNewItem パラメータは、新しいメニュー項目に関係する追加のデータを維持するために使われる、アプリケーション定義の値を保持しています。新しいメニュー項目を作成した際、またはそのメニュー項目の外観を更新した際に、 または メッセージが送信されますが、そのメッセージの lparam パラメータが指す構造体の itemData メンバに、この値が格納されます。
MF_STRINGlpNewItem パラメータは、NULL で終わる文字列へのポインタを保持しています(既定)。

戻り値

関数が成功すると、0 以外の値が返ります。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

メニューを変更した場合、そのメニューに関連するウィンドウが現在表示中かどうかにかかわりなく、必ず DrawMenuBar 関数を呼び出してください。

次のリストは、パラメータで指定できるさまざまなフラグを示します。

説明
MF_BITMAPビットマップをメニュー項目として使います。lpNewItem パラメータは、このビットマップのハンドルを保持しています。
MF_CHECKEDメニュー項目の隣にチェックマークを表示します。アプリケーションがチェックマークを表すビットマップを提供している場合(SetMenuItemBitmaps 関数を参照)、このフラグを指定すると、メニューアイテムの隣にそのビットマップが表示されます。
MF_DISABLEDメニュー項目を無効にします。そのため、そのメニュー項目は選択できませんが、淡色表示にはなりません。
MF_ENABLEDメニュー項目を有効にします。そのメニュー項目は選択できますし、それまで淡色表示になっていた場合は、通常の表示へ戻ります。
MF_GRAYEDメニュー項目を無効にし、淡色表示にします。そのため、そのメニュー項目は選択できません。
MF_MENUBARBREAKメニューバーに対してこのフラグを指定した場合、MF_MENUBREAK フラグと同じことを意味します。ドロップダウンメニュー、サブメニュー、ショートカットメニューのいずれかに対してこのフラグを指定した場合、新しい列と従来の列を垂直な線で区切ります。
MF_MENUBREAKメニューバーに対してこのフラグを指定した場合、新しい行にメニュー項目を表示します。ドロップダウンメニュー、サブメニュー、ショートカットメニューのいずれかに対してこのフラグを指定した場合、新しい列にメニュー項目を表示しますが、新しい列と従来の列を区切りません。
MF_OWNERDRAWこのメニュー項目が、所有側が描く項目であることを指定します。最初にメニューを表示する前に、このメニューを所有しているウィンドウは メッセージを受信し、このメニュー項目の幅と高さを取得します。その後、このメニュー項目の外観を更新する必要が生じると、所有側ウィンドウのウィンドウプロシージャへ メッセージが送信されます。
MF_POPUPこのメニュー項目がドロップダウンメニューまたはサブメニューを開くことを指定します。uIDNewItem パラメータは、そのドロップダウンメニューまたはサブメニューのハンドルを指定しています。メニューバーへ 1 つのメニュー名を追加する場合や、ドロップダウンメニュー、サブメニュー、ショートカットメニューのいずれかへ、サブメニューを開く 1 つのメニュー項目を追加する場合は、このフラグを使います。
MF_SEPARATOR水平な分割線(区切り線)を描きます。ドロップダウンメニュー、サブメニュー、ショートカットメニューのいずれかでのみ、このフラグを使います。この分割線を淡色表示、無効、強調表示にすることはできません。lpNewItem uIDNewItem の各パラメータは無視されます。
MF_STRINGメニュー項目が文字列であることを指定します。lpNewItem パラメータは、その文字列へのポインタを保持しています。
MF_UNCHECKEDメニュー項目の隣にチェックマークを表示しません(既定)。アプリケーションがアンチェックマーク(hBitmapUnchecked パラメータで指定)を表すビットマップを提供している場合(SetMenuItemBitmaps 関数を参照)、このフラグを指定すると、メニューアイテムの隣にそのビットマップが表示されます。

次の各フラグはそれぞれ 1 つのグループを形成していて、各グループではどれか 1 つのフラグしか指定できません。

•MF_BYCOMMAND と MF_BYPOSITION

•MF_DISABLED、MF_ENABLED、MF_GRAYED

•MF_BITMAP、MF_STRING、MF_OWNERDRAW、MF_SEPARATOR

•MF_MENUBARBREAK と MF_MENUBREAK

•MF_CHECKED と MF_UNCHECKED

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

AppendMenu, DeleteMenu, DrawMenuBar, InsertMenuItem, ModifyMenu, RemoveMenu, SetMenuItemBitmaps, ,

Page view tracker