Structure MENUITEMINFO declared in PB has to be updated, the very last item is lacking (since Windows 2000)
WINVER = 0x500 = Windows 2000
WINVER = 0x501 = Windows XP
WINVER = 0x600 = Windows Vista
WINVER = 0x601 = Windows 7
WINVER = 0x602 = Windows 8
WINVER = 0x603 = Windows Blue
WINVER = 0xA00 = Windows 10
added The lacking item, hbmpItem
C/C++ Structure using Visual Studio Community 2022 Version 17.5.1 (use hfile declarations 10.0.22621.0)
Declaration MS
winuser.h line 7866
typedef struct tagMENUITEMINFOW
{
UINT cbSize;
UINT fMask;
UINT fType; // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0)
UINT fState; // used if MIIM_STATE
UINT wID; // used if MIIM_ID
HMENU hSubMenu; // used if MIIM_SUBMENU
HBITMAP hbmpChecked; // used if MIIM_CHECKMARKS
HBITMAP hbmpUnchecked; // used if MIIM_CHECKMARKS
ULONG_PTR dwItemData; // used if MIIM_DATA
LPWSTR dwTypeData; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
UINT cch; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
#if(WINVER >= 0x0500)
HBITMAP hbmpItem; // used if MIIM_BITMAP
#endif /* WINVER >= 0x0500
} MENUITEMINFOW, FAR* LPMENUITEMINFOW;
C/C++ code using Visual Studio 2019 Version 16.7.6 (use declarations 10.0.18362.0)
Code: Select all
#include <iostream>
#include <windows.h>
#include <commCtrl.h>
#include <winuser.h>
#define PRINTF_SIZEOF(type) printf(" SizeOf( " #type " ) = %zu\n", sizeof(type))
#define PRINTF_OffsetOf(type,member) printf(" OffsetOf( " #member " ) = %zu\n", offsetof(type,member))
#define PRINTF_Normal(type) printf(" IS_INTRESOURCE( " #type " ) = %zu\n", (type))
int main()
{
#ifdef UNICODE
#if defined(_WIN64)
printf("\n");
printf("\n");
printf(" Compilation Window 64 bit - mode unicode\n");
#else
printf("\n");
printf("\n");
printf(" Compilation Window 32 bit - mode unicode\n");
#endif
/*
#if(WINVER >= 0x0500)
WINVER = 0x500 = Windows 2000
WINVER = 0x501 = Windows XP
WINVER = 0x600 = Windows Vista
WINVER = 0x601 = Windows 7
WINVER = 0x602 = Windows 8
WINVER = 0x603 = Windows Blue
WINVER = 0xA00 = Windows 10
winuser.h line 7866 version Visual Studio 2022 10.0.22621.0
typedef struct tagMENUITEMINFOW
{
UINT cbSize;
UINT fMask;
UINT fType; // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0)
UINT fState; // used if MIIM_STATE
UINT wID; // used if MIIM_ID
HMENU hSubMenu; // used if MIIM_SUBMENU
HBITMAP hbmpChecked; // used if MIIM_CHECKMARKS
HBITMAP hbmpUnchecked; // used if MIIM_CHECKMARKS
ULONG_PTR dwItemData; // used if MIIM_DATA
LPWSTR dwTypeData; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
UINT cch; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
#if(WINVER >= 0x0500)
HBITMAP hbmpItem; // used if MIIM_BITMAP
#endif /* WINVER >= 0x0500
} MENUITEMINFOW, FAR* LPMENUITEMINFOW;
*/
printf("\n");
printf(" Structure MENUITEMINFO\n");
printf(" -----------------\n");
PRINTF_SIZEOF(MENUITEMINFO);
printf("\n");
PRINTF_OffsetOf(MENUITEMINFO, cbSize);
PRINTF_OffsetOf(MENUITEMINFO, fMask);
PRINTF_OffsetOf(MENUITEMINFO, fType);
PRINTF_OffsetOf(MENUITEMINFO, fState);
PRINTF_OffsetOf(MENUITEMINFO, wID);
PRINTF_OffsetOf(MENUITEMINFO, hSubMenu);
PRINTF_OffsetOf(MENUITEMINFO, hbmpChecked);
PRINTF_OffsetOf(MENUITEMINFO, hbmpUnchecked);
PRINTF_OffsetOf(MENUITEMINFO, dwItemData);
PRINTF_OffsetOf(MENUITEMINFO, dwTypeData);
PRINTF_OffsetOf(MENUITEMINFO, cch);
PRINTF_OffsetOf(MENUITEMINFO, hbmpItem);
#else
printf("You must compile in unicode mode!\n");
#endif
return 0;
}
PB 6.02 b2 code
Code: Select all
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x86
Structure My_MENUITEMINFO
cbSize.l
fMask.l
fType.l
fState.l
wID.l
hSubMenu.i
hbmpChecked.i
hbmpUnchecked.i
dwItemData.i
*dwTypeData
cch.l
hbmpItem.i
EndStructure
CompilerCase #PB_Processor_x64
Structure My_MENUITEMINFO
cbSize.l
fMask.l
fType.l
fState.l
wID.l
PB_Alignment1.b[4]
hSubMenu.i
hbmpChecked.i
hbmpUnchecked.i
dwItemData.i
*dwTypeData
cch.l
PB_Alignment2.b[4]
hbmpItem.i
EndStructure
CompilerEndSelect
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x86
Debug ""
Debug ""
Debug "Compilation Window 32 bit - mode Unicode "
Debug "---------------------------"
Debug ""
Debug "SizeOf(My_MENUITEMINFO) = " + Str(SizeOf(My_MENUITEMINFO))
Debug ""
Debug "OffsetOf( cbSize ) = " + Str(OffsetOf( My_MENUITEMINFO\cbSize ))
Debug "OffsetOf( fMask ) = " + Str(OffsetOf( My_MENUITEMINFO\fMask ))
Debug "OffsetOf( fType ) = " + Str(OffsetOf( My_MENUITEMINFO\fType ))
Debug "OffsetOf( fState ) = " + Str(OffsetOf( My_MENUITEMINFO\fState ))
Debug "OffsetOf( wID ) = " + Str(OffsetOf( My_MENUITEMINFO\wID ))
Debug "OffsetOf( hSubMenu ) = " + Str(OffsetOf( My_MENUITEMINFO\hSubMenu ))
Debug "OffsetOf( hbmpChecked ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpChecked ))
Debug "OffsetOf( hbmpUnchecked ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpUnchecked ))
Debug "OffsetOf( dwItemData ) = " + Str(OffsetOf( My_MENUITEMINFO\ dwItemData ))
Debug "OffsetOf( *dwTypeData ) = " + Str(OffsetOf( My_MENUITEMINFO\dwTypeData ))
Debug "OffsetOf( cch ) = " + Str(OffsetOf( My_MENUITEMINFO\cch ))
Debug "OffsetOf( hbmpItem ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpItem ))
CompilerCase #PB_Processor_x64
Debug ""
Debug ""
Debug "Compilation Window 64 bit - mode Unicode "
Debug "---------------------------"
Debug ""
Debug "SizeOf(My_MENUITEMINFO) = " + Str(SizeOf(My_MENUITEMINFO))
Debug ""
Debug "OffsetOf( cbSize ) = " + Str(OffsetOf( My_MENUITEMINFO\cbSize ))
Debug "OffsetOf( fMask ) = " + Str(OffsetOf( My_MENUITEMINFO\fMask ))
Debug "OffsetOf( fType ) = " + Str(OffsetOf( My_MENUITEMINFO\fType ))
Debug "OffsetOf( fState ) = " + Str(OffsetOf( My_MENUITEMINFO\fState ))
Debug "OffsetOf( wID ) = " + Str(OffsetOf( My_MENUITEMINFO\wID ))
; Debug "OffsetOf( PB_Alignment1 ) = " + Str(OffsetOf( My_MENUITEMINFO\PB_Alignment1 ))
Debug "OffsetOf( hSubMenu ) = " + Str(OffsetOf( My_MENUITEMINFO\hSubMenu ))
Debug "OffsetOf( hbmpChecked ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpChecked ))
Debug "OffsetOf( hbmpUnchecked ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpUnchecked ))
Debug "OffsetOf( dwItemData ) = " + Str(OffsetOf( My_MENUITEMINFO\ dwItemData ))
Debug "OffsetOf( *dwTypeData ) = " + Str(OffsetOf( My_MENUITEMINFO\dwTypeData ))
Debug "OffsetOf( cch ) = " + Str(OffsetOf( My_MENUITEMINFO\cch ))
; Debug "OffsetOf( PB_Alignment2 ) = " + Str(OffsetOf( My_MENUITEMINFO\PB_Alignment2 ))
Debug "OffsetOf( hbmpItem ) = " + Str(OffsetOf( My_MENUITEMINFO\hbmpItem ))
CompilerEndSelect
result in x86 mode :
G:\Site PB\Structures
result in x64 mode :