namespace SabreTools.Data.Models.PortableExecutable.Resource.Entries { /// /// Defines the dimensions and style of a control in a dialog box. One or more of these /// structures are combined with a DLGTEMPLATE structure to form a standard template /// for a dialog box. /// /// public sealed class DialogItemTemplate { /// /// The style of the control. This member can be a combination of window style values /// (such as WS_BORDER) and one or more of the control style values (such as /// BS_PUSHBUTTON and ES_LEFT). /// public WindowStyles Style { get; set; } /// /// The extended styles for a window. This member is not used to create dialog boxes, /// but applications that use dialog box templates can use it to create other types /// of windows. /// public ExtendedWindowStyles ExtendedStyle { get; set; } /// /// The x-coordinate, in dialog box units, of the upper-left corner of the control. /// This coordinate is always relative to the upper-left corner of the dialog box's /// client area. /// /// /// The x, y, cx, and cy members specify values in dialog box units. You can convert these values to screen /// units (pixels) by using the MapDialogRect function. /// public short PositionX { get; set; } /// /// The y-coordinate, in dialog box units, of the upper-left corner of the control. /// This coordinate is always relative to the upper-left corner of the dialog box's /// client area. /// /// /// The x, y, cx, and cy members specify values in dialog box units. You can convert these values to screen /// units (pixels) by using the MapDialogRect function. /// public short PositionY { get; set; } /// /// The width, in dialog box units, of the control. /// /// /// The x, y, cx, and cy members specify values in dialog box units. You can convert these values to screen /// units (pixels) by using the MapDialogRect function. /// public short WidthX { get; set; } /// /// The height, in dialog box units, of the control. /// /// /// The x, y, cx, and cy members specify values in dialog box units. You can convert these values to screen /// units (pixels) by using the MapDialogRect function. /// public short HeightY { get; set; } /// /// The control identifier. /// public ushort ID { get; set; } // In a standard template for a dialog box, the DLGITEMTEMPLATE structure is always immediately // followed by three variable-length arrays specifying the class, title, and creation data for // the control. Each array consists of one or more 16-bit elements. // // Each DLGITEMTEMPLATE structure in the template must be aligned on a DWORD boundary. The class // and title arrays must be aligned on WORD boundaries. The creation data array must be aligned // on a WORD boundary. /// /// Immediately following each DLGITEMTEMPLATE structure is a class array that specifies the window /// class of the control. If the first element of this array is any value other than 0xFFFF, the /// system treats the array as a null-terminated Unicode string that specifies the name of a /// registered window class. If the first element is 0xFFFF, the array has one additional element /// that specifies the ordinal value of a predefined system class. /// /// /// If you specify character strings in the class and title arrays, you must use Unicode strings. Use the /// MultiByteToWideChar function to generate Unicode strings from ANSI strings. /// public string ClassResource { get; set; } = string.Empty; /// /// The ordinal value of a predefined system class. /// public DialogItemTemplateOrdinal ClassResourceOrdinal { get; set; } /// /// Following the class array is a title array that contains the initial text or resource identifier /// of the control. If the first element of this array is 0xFFFF, the array has one additional element /// that specifies an ordinal value of a resource, such as an icon, in an executable file. You can use /// a resource identifier for controls, such as static icon controls, that load and display an icon /// or other resource rather than text. If the first element is any value other than 0xFFFF, the system /// treats the array as a null-terminated Unicode string that specifies the initial text. /// /// /// If you specify character strings in the class and title arrays, you must use Unicode strings. Use the /// MultiByteToWideChar function to generate Unicode strings from ANSI strings. /// public string TitleResource { get; set; } = string.Empty; /// /// An ordinal value of a resource, such as an icon, in an executable file /// public ushort TitleResourceOrdinal { get; set; } /// /// The creation data array begins at the next WORD boundary after the title array. This creation data /// can be of any size and format. If the first word of the creation data array is nonzero, it indicates /// the size, in bytes, of the creation data (including the size word). /// public ushort CreationDataSize { get; set; } /// /// The creation data array begins at the next WORD boundary after the title array. This creation data /// can be of any size and format. The control's window procedure must be able to interpret the data. /// When the system creates the control, it passes a pointer to this data in the lParam parameter of the /// WM_CREATE message that it sends to the control. /// public byte[] CreationData { get; set; } = []; } }