using System; using System.IO; using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Vestris.ResourceLib { /// /// A popup menu item. /// public class MenuTemplateItemPopup : MenuTemplateItem { MenuTemplateItemCollection _subMenuItems = new MenuTemplateItemCollection(); /// /// Sub menu items. /// public MenuTemplateItemCollection SubMenuItems { get { return _subMenuItems; } set { _subMenuItems = value; } } /// /// A popup menu item. /// public MenuTemplateItemPopup() { } /// /// Read a popup menu item. /// /// Address in memory. /// End of the menu item structure. internal override IntPtr Read(IntPtr lpRes) { _header = (User32.MENUITEMTEMPLATE) Marshal.PtrToStructure( lpRes, typeof(User32.MENUITEMTEMPLATE)); lpRes = new IntPtr(lpRes.ToInt32() + Marshal.SizeOf(_header)); lpRes = base.Read(lpRes); return _subMenuItems.Read(lpRes); } /// /// Write menu item to a binary stream. /// /// Binary stream. internal override void Write(BinaryWriter w) { w.Write(_header.mtOption); base.Write(w); _subMenuItems.Write(w); } /// /// String representation in the MENU format. /// /// String representation. public override string ToString(int indent) { StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Format("{0}POPUP \"{1}\"", new String(' ', indent), _menuString == null ? string.Empty : _menuString.Replace("\t", @"\t"))); sb.Append(_subMenuItems.ToString(indent)); return sb.ToString(); } } }