MENUITEMINFOA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | 構造体のサイズ (バイト単位)。呼び出し元はこのメンバーに sizeof(MENUITEMINFO) を設定しなければなりません。 | ||||||||||||||||||||||||
| fMask | MENU_ITEM_MASK | 4 | +4 | +4 | 取得または設定するメンバーを示します。このメンバーには次の値の 1 つ以上を指定できます。
| ||||||||||||||||||||||||
| fType | MENU_ITEM_TYPE | 4 | +8 | +8 | メニュー項目の種類。このメンバーには次の値の 1 つ以上を指定できます。 MFT_BITMAP、MFT_SEPARATOR、MFT_STRING の各値を互いに組み合わせることはできません。fType を使用するには fMask に MIIM_TYPE を設定します。 fType は fMask が MIIM_FTYPE の値を持つ場合にのみ使用されます。
| ||||||||||||||||||||||||
| fState | MENU_ITEM_STATE | 4 | +12 | +12 | メニュー項目の状態。このメンバーには次の値の 1 つ以上を指定できます。fState を使用するには fMask に MIIM_STATE を設定します。
| ||||||||||||||||||||||||
| wID | DWORD | 4 | +16 | +16 | メニュー項目を識別するアプリケーション定義の値。wID を使用するには fMask に MIIM_ID を設定します。 | ||||||||||||||||||||||||
| hSubMenu | HMENU | 8/4 | +24 | +20 | メニュー項目に関連付けられたドロップダウンメニューまたはサブメニューへのハンドル。メニュー項目がドロップダウンメニューやサブメニューを開く項目でない場合、このメンバーは NULL です。hSubMenu を使用するには fMask に MIIM_SUBMENU を設定します。 | ||||||||||||||||||||||||
| hbmpChecked | HBITMAP | 8/4 | +32 | +24 | 項目が選択されている場合にその横に表示するビットマップへのハンドル。このメンバーが NULL の場合は、既定のビットマップが使用されます。型の値として MFT_RADIOCHECK が指定されている場合、既定のビットマップは中黒 (ビュレット) です。それ以外の場合はチェックマークです。hbmpChecked を使用するには fMask に MIIM_CHECKMARKS を設定します。 | ||||||||||||||||||||||||
| hbmpUnchecked | HBITMAP | 8/4 | +40 | +28 | 項目が選択されていない場合にその横に表示するビットマップへのハンドル。このメンバーが NULL の場合、ビットマップは使用されません。hbmpUnchecked を使用するには fMask に MIIM_CHECKMARKS を設定します。 | ||||||||||||||||||||||||
| dwItemData | UINT_PTR | 8/4 | +48 | +32 | メニュー項目に関連付けられたアプリケーション定義の値。dwItemData を使用するには fMask に MIIM_DATA を設定します。 | ||||||||||||||||||||||||
| dwTypeData | LPSTR | 8/4 | +56 | +36 | メニュー項目の内容。このメンバーの意味は fType の値によって決まり、fMask メンバーに MIIM_TYPE フラグが設定されている場合にのみ使用されます。 MFT_STRING 型のメニュー項目を取得するには、まず MENUITEMINFO の dwTypeData メンバーを NULL に設定して GetMenuItemInfo を呼び出し、文字列のサイズを調べます。必要なサイズは cch+1 の値です。次に、このサイズのバッファーを確保し、そのバッファーへのポインターを dwTypeData に設定し、cch を 1 増やしてから、再度 GetMenuItemInfo を呼び出してバッファーに文字列を格納します。取得したメニュー項目が他の型である場合、GetMenuItemInfo は dwTypeData メンバーに fType メンバーで指定された型の値を設定します。 SetMenuItemInfo 関数と共に使用する場合、このメンバーには fType メンバーで指定された型の値を格納します。 dwTypeData は、fMask メンバーに MIIM_STRING フラグが設定されている場合にのみ使用されます | ||||||||||||||||||||||||
| cch | DWORD | 4 | +64 | +40 | MFT_STRING 型のメニュー項目に関する情報を受け取るときの、メニュー項目テキストの長さ (文字数)。ただし、cch は fMask メンバーに MIIM_TYPE フラグが設定されている場合にのみ使用され、それ以外の場合は 0 になります。また、SetMenuItemInfo を呼び出してメニュー項目の内容を設定する場合、cch は無視されます。 GetMenuItemInfo を呼び出す前に、アプリケーションは dwTypeData メンバーが指すバッファーの長さを cch に設定しなければならない点に注意してください。取得したメニュー項目が (fType メンバーで示されるとおり) MFT_STRING 型である場合、GetMenuItemInfo は cch をメニュー項目テキストの長さに変更します。取得したメニュー項目が他の型である場合、GetMenuItemInfo は cch フィールドに 0 を設定します。 cch メンバーは、fMask メンバーに MIIM_STRING フラグが設定されている場合に使用されます。 | ||||||||||||||||||||||||
| hbmpItem | HBITMAP | 8/4 | +72 | +44 | 表示するビットマップへのハンドル。または次の表に示す値のいずれかを指定できます。これは fMask メンバーに MIIM_BITMAP フラグが設定されている場合に使用されます。
|
公式ドキュメント
メニュー項目に関する情報を格納します。
解説(Remarks)
MENUITEMINFO 構造体は、GetMenuItemInfo、InsertMenuItem、SetMenuItemInfo の各関数で使用されます。
メニューは、テキスト、ビットマップ、またはその両方を使用して項目を表示できます。
winuser.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして MENUITEMINFO を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、Conventions for Function Prototypes を参照してください。
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 Structureimport 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: pointerstruct 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