Win32 API 日本語リファレンス
ホームUI.WindowsAndMessaging › MENUITEMINFOA

MENUITEMINFOA

構造体
サイズx64: 80 バイト / x86: 48 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0構造体のサイズ (バイト単位)。呼び出し元はこのメンバーに sizeof(MENUITEMINFO) を設定しなければなりません。
fMaskMENU_ITEM_MASK4+4+4

取得または設定するメンバーを示します。このメンバーには次の値の 1 つ以上を指定できます。

意味
MIIM_BITMAP
0x00000080
hbmpItem メンバーを取得または設定します。
MIIM_CHECKMARKS
0x00000008
hbmpChecked メンバーと hbmpUnchecked メンバーを取得または設定します。
MIIM_DATA
0x00000020
dwItemData メンバーを取得または設定します。
MIIM_FTYPE
0x00000100
fType メンバーを取得または設定します。
MIIM_ID
0x00000002
wID メンバーを取得または設定します。
MIIM_STATE
0x00000001
fState メンバーを取得または設定します。
MIIM_STRING
0x00000040
dwTypeData メンバーを取得または設定します。
MIIM_SUBMENU
0x00000004
hSubMenu メンバーを取得または設定します。
MIIM_TYPE
0x00000010
fType メンバーと dwTypeData メンバーを取得または設定します。

MIIM_TYPEMIIM_BITMAPMIIM_FTYPEMIIM_STRING に置き換えられています。

fTypeMENU_ITEM_TYPE4+8+8

メニュー項目の種類。このメンバーには次の値の 1 つ以上を指定できます。

MFT_BITMAPMFT_SEPARATORMFT_STRING の各値を互いに組み合わせることはできません。fType を使用するには fMaskMIIM_TYPE を設定します。

fTypefMaskMIIM_FTYPE の値を持つ場合にのみ使用されます。

意味
MFT_BITMAP
0x00000004L
ビットマップを使用してメニュー項目を表示します。dwTypeData メンバーの下位ワードがビットマップのハンドルとなり、cch メンバーは無視されます。

MFT_BITMAPMIIM_BITMAPhbmpItem に置き換えられています。

MFT_MENUBARBREAK
0x00000020L
メニュー項目を新しい行 (メニューバーの場合) または新しい列 (ドロップダウンメニュー、サブメニュー、ショートカットメニューの場合) に配置します。ドロップダウンメニュー、サブメニュー、ショートカットメニューでは、新しい列と元の列が縦線で区切られます。
MFT_MENUBREAK
0x00000040L
メニュー項目を新しい行 (メニューバーの場合) または新しい列 (ドロップダウンメニュー、サブメニュー、ショートカットメニューの場合) に配置します。ドロップダウンメニュー、サブメニュー、ショートカットメニューでは、列は縦線で区切られません。
MFT_OWNERDRAW
0x00000100L
メニュー項目を描画する責任を、そのメニューを所有するウィンドウに割り当てます。ウィンドウは、メニューが初めて表示される前に WM_MEASUREITEM メッセージを受け取り、メニュー項目の外観を更新する必要があるたびに WM_DRAWITEM メッセージを受け取ります。この値を指定した場合、dwTypeData メンバーにはアプリケーション定義の値が格納されます。
MFT_RADIOCHECK
0x00000200L
hbmpChecked メンバーが NULL の場合に、選択されたメニュー項目をチェックマークではなくラジオボタン マークで表示します。
MFT_RIGHTJUSTIFY
0x00004000L
そのメニュー項目と以降の項目を右揃えにします。この値は、メニュー項目がメニューバーにある場合にのみ有効です。
MFT_RIGHTORDER
0x00002000L
メニューを右から左へカスケード表示することを指定します (既定は左から右)。これは、アラビア語やヘブライ語などの右から左に記述する言語をサポートするために使用されます。
MFT_SEPARATOR
0x00000800L
メニュー項目が区切りであることを指定します。メニュー項目の区切りは水平の分割線として表示されます。dwTypeData メンバーと cch メンバーは無視されます。この値は、ドロップダウンメニュー、サブメニュー、ショートカットメニューでのみ有効です。
MFT_STRING
0x00000000L
テキスト文字列を使用してメニュー項目を表示します。dwTypeData メンバーは NULL で終わる文字列へのポインターであり、cch メンバーはその文字列の長さです。

MFT_STRINGMIIM_STRING に置き換えられています。

fStateMENU_ITEM_STATE4+12+12

メニュー項目の状態。このメンバーには次の値の 1 つ以上を指定できます。fState を使用するには fMaskMIIM_STATE を設定します。

意味
MFS_CHECKED
0x00000008L
メニュー項目にチェックを付けます。選択されたメニュー項目の詳細については、hbmpChecked メンバーを参照してください。
MFS_DEFAULT
0x00001000L
メニュー項目が既定の項目であることを指定します。1 つのメニューに設定できる既定のメニュー項目は 1 つだけで、太字で表示されます。
MFS_DISABLED
0x00000003L
メニュー項目を無効にして淡色表示にし、選択できないようにします。これは MFS_GRAYED と同等です。
MFS_ENABLED
0x00000000L
メニュー項目を有効にし、選択できるようにします。これが既定の状態です。
MFS_GRAYED
0x00000003L
メニュー項目を無効にして淡色表示にし、選択できないようにします。これは MFS_DISABLED と同等です。
MFS_HILITE
0x00000080L
メニュー項目を強調表示します。
MFS_UNCHECKED
0x00000000L
メニュー項目のチェックを外します。チェックが付いていないメニュー項目の詳細については、hbmpChecked メンバーを参照してください。
MFS_UNHILITE
0x00000000L
メニュー項目の強調表示を解除します。これが既定の状態です。
wIDDWORD4+16+16メニュー項目を識別するアプリケーション定義の値。wID を使用するには fMaskMIIM_ID を設定します。
hSubMenuHMENU8/4+24+20メニュー項目に関連付けられたドロップダウンメニューまたはサブメニューへのハンドル。メニュー項目がドロップダウンメニューやサブメニューを開く項目でない場合、このメンバーは NULL です。hSubMenu を使用するには fMaskMIIM_SUBMENU を設定します。
hbmpCheckedHBITMAP8/4+32+24項目が選択されている場合にその横に表示するビットマップへのハンドル。このメンバーが NULL の場合は、既定のビットマップが使用されます。型の値として MFT_RADIOCHECK が指定されている場合、既定のビットマップは中黒 (ビュレット) です。それ以外の場合はチェックマークです。hbmpChecked を使用するには fMaskMIIM_CHECKMARKS を設定します。
hbmpUncheckedHBITMAP8/4+40+28項目が選択されていない場合にその横に表示するビットマップへのハンドル。このメンバーが NULL の場合、ビットマップは使用されません。hbmpUnchecked を使用するには fMaskMIIM_CHECKMARKS を設定します。
dwItemDataUINT_PTR8/4+48+32メニュー項目に関連付けられたアプリケーション定義の値。dwItemData を使用するには fMaskMIIM_DATA を設定します。
dwTypeDataLPSTR8/4+56+36

メニュー項目の内容。このメンバーの意味は fType の値によって決まり、fMask メンバーに MIIM_TYPE フラグが設定されている場合にのみ使用されます。

MFT_STRING 型のメニュー項目を取得するには、まず MENUITEMINFOdwTypeData メンバーを NULL に設定して GetMenuItemInfo を呼び出し、文字列のサイズを調べます。必要なサイズは cch+1 の値です。次に、このサイズのバッファーを確保し、そのバッファーへのポインターを dwTypeData に設定し、cch を 1 増やしてから、再度 GetMenuItemInfo を呼び出してバッファーに文字列を格納します。取得したメニュー項目が他の型である場合、GetMenuItemInfodwTypeData メンバーに fType メンバーで指定された型の値を設定します。

SetMenuItemInfo 関数と共に使用する場合、このメンバーには fType メンバーで指定された型の値を格納します。

dwTypeData は、fMask メンバーに MIIM_STRING フラグが設定されている場合にのみ使用されます

cchDWORD4+64+40

MFT_STRING 型のメニュー項目に関する情報を受け取るときの、メニュー項目テキストの長さ (文字数)。ただし、cchfMask メンバーに MIIM_TYPE フラグが設定されている場合にのみ使用され、それ以外の場合は 0 になります。また、SetMenuItemInfo を呼び出してメニュー項目の内容を設定する場合、cch は無視されます。

GetMenuItemInfo を呼び出す前に、アプリケーションは dwTypeData メンバーが指すバッファーの長さを cch に設定しなければならない点に注意してください。取得したメニュー項目が (fType メンバーで示されるとおり) MFT_STRING 型である場合、GetMenuItemInfocch をメニュー項目テキストの長さに変更します。取得したメニュー項目が他の型である場合、GetMenuItemInfocch フィールドに 0 を設定します。

cch メンバーは、fMask メンバーに MIIM_STRING フラグが設定されている場合に使用されます。

hbmpItemHBITMAP8/4+72+44

表示するビットマップへのハンドル。または次の表に示す値のいずれかを指定できます。これは fMask メンバーに MIIM_BITMAP フラグが設定されている場合に使用されます。

意味
HBMMENU_CALLBACK
((HBITMAP) -1)
メニューを所有するウィンドウによって描画されるビットマップ。アプリケーションは WM_MEASUREITEM メッセージと WM_DRAWITEM メッセージを処理しなければなりません。
HBMMENU_MBAR_CLOSE
((HBITMAP) 5)
メニューバーの閉じるボタン。
HBMMENU_MBAR_CLOSE_D
((HBITMAP) 6)
メニューバーの無効状態の閉じるボタン。
HBMMENU_MBAR_MINIMIZE
((HBITMAP) 3)
メニューバーの最小化ボタン。
HBMMENU_MBAR_MINIMIZE_D
((HBITMAP) 7)
メニューバーの無効状態の最小化ボタン。
HBMMENU_MBAR_RESTORE
((HBITMAP) 2)
メニューバーの元のサイズに戻すボタン。
HBMMENU_POPUP_CLOSE
((HBITMAP) 8)
サブメニューの閉じるボタン。
HBMMENU_POPUP_MAXIMIZE
((HBITMAP) 10)
サブメニューの最大化ボタン。
HBMMENU_POPUP_MINIMIZE
((HBITMAP) 11)
サブメニューの最小化ボタン。
HBMMENU_POPUP_RESTORE
((HBITMAP) 9)
サブメニューの元のサイズに戻すボタン。
HBMMENU_SYSTEM
((HBITMAP) 1)
Windows アイコン、または dwItemData で指定されたウィンドウのアイコン。

公式ドキュメント

メニュー項目に関する情報を格納します。

解説(Remarks)

MENUITEMINFO 構造体は、GetMenuItemInfoInsertMenuItemSetMenuItemInfo の各関数で使用されます。

メニューは、テキスト、ビットマップ、またはその両方を使用して項目を表示できます。

メモ

winuser.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして MENUITEMINFO を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、Conventions for Function Prototypes を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// MENUITEMINFOA  (x64 80 / x86 48 バイト)
typedef struct MENUITEMINFOA {
    DWORD cbSize;
    MENU_ITEM_MASK fMask;
    MENU_ITEM_TYPE fType;
    MENU_ITEM_STATE fState;
    DWORD wID;
    HMENU hSubMenu;
    HBITMAP hbmpChecked;
    HBITMAP hbmpUnchecked;
    UINT_PTR dwItemData;
    LPSTR dwTypeData;
    DWORD cch;
    HBITMAP hbmpItem;
} MENUITEMINFOA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MENUITEMINFOA
{
    public uint cbSize;
    public uint fMask;
    public uint fType;
    public uint fState;
    public uint wID;
    public IntPtr hSubMenu;
    public IntPtr hbmpChecked;
    public IntPtr hbmpUnchecked;
    public UIntPtr dwItemData;
    public IntPtr dwTypeData;
    public uint cch;
    public IntPtr hbmpItem;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MENUITEMINFOA
    Public cbSize As UInteger
    Public fMask As UInteger
    Public fType As UInteger
    Public fState As UInteger
    Public wID As UInteger
    Public hSubMenu As IntPtr
    Public hbmpChecked As IntPtr
    Public hbmpUnchecked As IntPtr
    Public dwItemData As UIntPtr
    Public dwTypeData As IntPtr
    Public cch As UInteger
    Public hbmpItem As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class MENUITEMINFOA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("fMask", wintypes.DWORD),
        ("fType", wintypes.DWORD),
        ("fState", wintypes.DWORD),
        ("wID", wintypes.DWORD),
        ("hSubMenu", ctypes.c_void_p),
        ("hbmpChecked", ctypes.c_void_p),
        ("hbmpUnchecked", ctypes.c_void_p),
        ("dwItemData", ctypes.c_size_t),
        ("dwTypeData", ctypes.c_void_p),
        ("cch", wintypes.DWORD),
        ("hbmpItem", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct MENUITEMINFOA {
    pub cbSize: u32,
    pub fMask: u32,
    pub fType: u32,
    pub fState: u32,
    pub wID: u32,
    pub hSubMenu: *mut core::ffi::c_void,
    pub hbmpChecked: *mut core::ffi::c_void,
    pub hbmpUnchecked: *mut core::ffi::c_void,
    pub dwItemData: usize,
    pub dwTypeData: *mut core::ffi::c_void,
    pub cch: u32,
    pub hbmpItem: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type MENUITEMINFOA struct {
	cbSize uint32
	fMask uint32
	fType uint32
	fState uint32
	wID uint32
	hSubMenu uintptr
	hbmpChecked uintptr
	hbmpUnchecked uintptr
	dwItemData uintptr
	dwTypeData uintptr
	cch uint32
	hbmpItem uintptr
}
type
  MENUITEMINFOA = record
    cbSize: DWORD;
    fMask: DWORD;
    fType: DWORD;
    fState: DWORD;
    wID: DWORD;
    hSubMenu: Pointer;
    hbmpChecked: Pointer;
    hbmpUnchecked: Pointer;
    dwItemData: NativeUInt;
    dwTypeData: Pointer;
    cch: DWORD;
    hbmpItem: Pointer;
  end;
const MENUITEMINFOA = extern struct {
    cbSize: u32,
    fMask: u32,
    fType: u32,
    fState: u32,
    wID: u32,
    hSubMenu: ?*anyopaque,
    hbmpChecked: ?*anyopaque,
    hbmpUnchecked: ?*anyopaque,
    dwItemData: usize,
    dwTypeData: ?*anyopaque,
    cch: u32,
    hbmpItem: ?*anyopaque,
};
type
  MENUITEMINFOA {.bycopy.} = object
    cbSize: uint32
    fMask: uint32
    fType: uint32
    fState: uint32
    wID: uint32
    hSubMenu: pointer
    hbmpChecked: pointer
    hbmpUnchecked: pointer
    dwItemData: uint
    dwTypeData: pointer
    cch: uint32
    hbmpItem: pointer
struct MENUITEMINFOA
{
    uint cbSize;
    uint fMask;
    uint fType;
    uint fState;
    uint wID;
    void* hSubMenu;
    void* hbmpChecked;
    void* hbmpUnchecked;
    size_t dwItemData;
    void* dwTypeData;
    uint cch;
    void* hbmpItem;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MENUITEMINFOA サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; fMask : MENU_ITEM_MASK (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; fType : MENU_ITEM_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; fState : MENU_ITEM_STATE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; wID : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; hSubMenu : HMENU (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; hbmpChecked : HBITMAP (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; hbmpUnchecked : HBITMAP (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwItemData : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwTypeData : LPSTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; cch : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; hbmpItem : HBITMAP (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MENUITEMINFOA サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; fMask : MENU_ITEM_MASK (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; fType : MENU_ITEM_TYPE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; fState : MENU_ITEM_STATE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; wID : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; hSubMenu : HMENU (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; hbmpChecked : HBITMAP (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; hbmpUnchecked : HBITMAP (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwItemData : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; dwTypeData : LPSTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; cch : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; hbmpItem : HBITMAP (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MENUITEMINFOA
    #field int cbSize
    #field int fMask
    #field int fType
    #field int fState
    #field int wID
    #field intptr hSubMenu
    #field intptr hbmpChecked
    #field intptr hbmpUnchecked
    #field intptr dwItemData
    #field intptr dwTypeData
    #field int cch
    #field intptr hbmpItem
#endstruct

stdim st, MENUITEMINFOA        ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize