Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
D

Decco

@Decco
About
Posts
1
Topics
0
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • InsertMenuItem WinAPI problem
    D Decco

    Thanks, I had exactly the same problem ! Here my new code, if it can help someone esle :)

    \[StructLayout(LayoutKind.Sequential)\]
    public struct MENUITEMINFO
    {
    	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 IntPtr dwItemData;
    	public string dwTypeData;
    	public uint cch;
    	public IntPtr hbmpItem;
    }
    
    public class DllImports
    {
    \[DllImport("user32.dll")\]
        public static extern bool InsertMenuItem(IntPtr hMenu, uint uPosition, uint uFlags, \[In\] ref MENUITEMINFO mii);
    
        \[DllImport("user32")\]
        public static extern UInt32 SetMenuItemBitmaps(IntPtr hMenu, uint uPosition, uint uFlags, IntPtr hBitmapUnchecked, IntPtr hBitmapChecked);
    }
    
        private void AddMenuItem(IntPtr hMenu, uint id, uint position, string text, Bitmap icon, IntPtr? hSubMenu)
        {
            MENUITEMINFO mii = new MENUITEMINFO();
            mii.cbSize = (uint)Marshal.SizeOf(typeof(MENUITEMINFO)); //48;
            mii.fMask = (uint)MIIM.ID | (uint)MIIM.STRING | (uint)MIIM.SUBMENU;
            mii.wID = id;
            mii.dwTypeData = text;
    
            if (hSubMenu.HasValue)
            {
                mii.hSubMenu = hSubMenu.Value;
            }
    
            DllImports.InsertMenuItem(hMenu, position, (uint)MF.BYPOSITION, ref mii);
    
            if (icon != null)
            {
                DllImports.SetMenuItemBitmaps(hMenu, id, (uint)MF.BYCOMMAND, icon.GetHbitmap(), icon.GetHbitmap());
            }
        }
    

    The biggest problem was this line :

            mii.cbSize = (uint)Marshal.SizeOf(typeof(MENUITEMINFO)); //48;
    

    As in all exemples you found on web, the size is set to 48 by default and not calculate. Thanks again. Decco

    C# help csharp linux
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups