MENUITEMINFOW
構造体サイズ=各フィールドのバイト数(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 | LPWSTR | 8/4 | +56 | +36 | メニュー項目の内容。このメンバーの意味は fType の値によって異なり、 fMask メンバーに MIIM_TYPE フラグが設定されている場合にのみ使用されます。 MFT_STRING 型のメニュー項目を取得するには、まず MENUITEMINFO の dwTypeData メンバーを NULL に設定して GetMenuItemInfo を呼び出し、文字列のサイズを調べます。必要なサイズは cch+1 の値です。次に、このサイズのバッファーを割り当て、そのバッファーへのポインターを dwTypeData に設定し、cch をインクリメントしてから、再度 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 を呼び出す前に、アプリケーションは cch に dwTypeData メンバーが指すバッファーの長さを設定しなければなりません。取得したメニュー項目が ( fType メンバーで示されるとおり) MFT_STRING 型である場合、GetMenuItemInfo は cch をメニュー項目テキストの長さに変更します。取得したメニュー項目がそれ以外の型である場合、GetMenuItemInfo は cch フィールドに 0 を設定します。 | ||||||||||||||||||||||||
| 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>
// MENUITEMINFOW (x64 80 / x86 48 バイト)
typedef struct MENUITEMINFOW {
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;
LPWSTR dwTypeData;
DWORD cch;
HBITMAP hbmpItem;
} MENUITEMINFOW;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MENUITEMINFOW
{
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 MENUITEMINFOW
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 MENUITEMINFOW(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 MENUITEMINFOW {
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 MENUITEMINFOW 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
MENUITEMINFOW = 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 MENUITEMINFOW = 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
MENUITEMINFOW {.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 MENUITEMINFOW
{
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 レイアウト)
; MENUITEMINFOW サイズ: 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 : LPWSTR (+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 レイアウト)
; MENUITEMINFOW サイズ: 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 : LPWSTR (+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 MENUITEMINFOW
#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, MENUITEMINFOW ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize