/// <summary>
        /// Read the menu item collection.
        /// </summary>
        /// <param name="lpRes">Address in memory.</param>
        /// <returns>End of the menu item structure.</returns>
        internal IntPtr Read(IntPtr lpRes)
        {
            while (true)
            {
                lpRes = ResourceUtil.Align(lpRes.ToInt64());

                User32.MENUEXITEMTEMPLATE childItem = (User32.MENUEXITEMTEMPLATE)Marshal.PtrToStructure(
                    lpRes, typeof(User32.MENUEXITEMTEMPLATE));

                MenuExTemplateItem childMenu = null;
                if ((childItem.bResInfo & (uint)User32.MenuResourceType.Sub) > 0)
                {
                    childMenu = new MenuExTemplateItemPopup();
                }
                else
                {
                    childMenu = new MenuExTemplateItemCommand();
                }

                lpRes = childMenu.Read(lpRes);
                Add(childMenu);

                if ((childItem.bResInfo & (uint)User32.MenuResourceType.Last) > 0)
                {
                    break;
                }
            }

            return(lpRes);
        }
        /// <summary>
        /// Read the menu item collection.
        /// </summary>
        /// <param name="lpRes">Address in memory.</param>
        /// <returns>End of the menu item structure.</returns>
        internal IntPtr Read(IntPtr lpRes)
        {
            _dwContextHelpID = (UInt32)Marshal.ReadInt32(lpRes);
            lpRes            = new IntPtr(lpRes.ToInt32() + 4);

            while (true)
            {
                User32.MENUEXITEMTEMPLATE childItem = (User32.MENUEXITEMTEMPLATE)Marshal.PtrToStructure(
                    lpRes, typeof(User32.MENUEXITEMTEMPLATE));

                MenuExTemplateItem childMenu = null;
                if (childItem.dwOptions == (uint)User32.MenuResourceType.Sub)
                {
                    childMenu = new MenuExTemplateItemPopup();
                }
                else
                {
                    childMenu = new MenuExTemplateItemCommand();
                }

                lpRes = childMenu.Read(lpRes);
                Add(childMenu);

                if (childItem.dwOptions == (uint)User32.MenuResourceType.Last)
                {
                    break;
                }
            }

            return(lpRes);
        }
Example #3
0
        /// <summary>
        /// Read the menu item.
        /// </summary>
        /// <param name="lpRes">Address in memory.</param>
        /// <returns>End of the menu item structure.</returns>
        internal virtual IntPtr Read(IntPtr lpRes)
        {
            _header = (User32.MENUEXITEMTEMPLATE)Marshal.PtrToStructure(
                lpRes, typeof(User32.MENUEXITEMTEMPLATE));

            lpRes = new IntPtr(lpRes.ToInt32() + Marshal.SizeOf(_header));

            switch ((UInt32)Marshal.ReadInt32(lpRes))
            {
            case 0:
                lpRes = ResourceUtil.Align(lpRes.ToInt32() + 2);
                break;

            default:
                _menuString = Marshal.PtrToStringUni(lpRes);
                lpRes       = ResourceUtil.Align(lpRes.ToInt32() +
                                                 (_menuString.Length + 1) * Marshal.SystemDefaultCharSize);
                break;
            }

            return(lpRes);
        }