The style of a dialog is expressed through the keyword "STYLE" within the dialog template. So far, the style that has been used is shown below.
STYLE WS_POPUP | WS_DLGFRAME
Other window styles may also be supplied. For example, if the dialog is to be given a title bar with a normal border, the style
STYLE WS_POPUP | WS_CAPTION
may be applied. When the style WS_CAPTION (style::caption) is applied, the x and y coordinates used to position the dialog are the coordinates (upper-left corner) of the client area of the dialog relative to its owner's client area. In this case, the title bar of the dialog will reside above the given y-coordinate. When a title bar is present, the dialog box may be moved. The text of the title bar is expressed in the dialog template using the keyword "CAPTION". For example, the sample of the previous section may be adjusted as follows.
DialogIdentity DIALOG 20, 20, 160, 80 STYLE WS_POPUP | WS_CAPTION CAPTION "About1" { .... }
When a caption is supplied, a system menu may also be supplied using the following style statement.
DialogIdentity DIALOG 20, 20, 160, 80 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About1" { .... }
Adding the style WS_THICKFRAME (style::thick_frame) allows the dialog box to be sized. This is somewhat unusual however. The style statement is not required. If it is absent, the default style is WS_POPUP | WS_BORDER (style::popup and style::border).
A menu may be added to a dialog using the "MENU" keyword, as shown below.
MENU menu-name
The menu name that is given is the name of a menu resident in the resource script. The menu name may be character based or of numeric form. Two other keywords are FONT and CLASS. The form of the class keyword is shown below.
CLASS "class-name"
The name that is specified must be the name of a window class that has been or is to be registered.
The keywords for defining controls within a dialog template are shown in the table below.
Control Type | Window Class | i++ style | windows Header |
PUSHBUTTON | button | button_style::push_button | style::Tabstop | BS_PUSHBUTTON | WS_TABSTOP |
DEFPUSHBUTTON | button | button_style::push_button_default | style::tabstop | BS_DEFPUSHBUTTON | WS_TABSTOP |
CHECKBOX | button | button_style::check_box | style::tabstop | BS_CHECKBOX | WS_TABSTOP |
RADIOBUTTON | button | button_style::radio_button | style::tabstop | BS_RADIOBUTTON | WS_TABSTOP |
GROUPBOX | button | button_style::group_box | style::tabstop | BS_GROUPBOX | WS_TABSTOP |
LTEXT | static | display_style::left | style::group | SS_LEFT | WS_GROUP |
CTEXT | static | display_style::center | style::group | SS_CENTER | WS_GROUP |
RTEXT | static | display_style::right | style::group | SS_RIGHT | WS_GROUP |
ICON | static | display_style::icon | SS_ICON |
EDITTEXT | edit | edit_style::left | style::border | style::tabstop | ES_LEFT | WS_BORDER | WS_VSCROLL |
SCROLLBAR | scrollbar | scrollbar_style::horizontal | SBS_HORZ |
LISTBOX | listbox | listbox_style::notify | style::border | style::vertical_scroll | LBS_NOTIFY | WS_BORDER | WS_VSCROLL |
COMBOBOX | combobox | combobox_style::simple | CBS_SIMPLE | WS_TABSTOP |
In addition to the styles documented in the above table, all controls have the styles WS_CHILD and WS_VISIBLE (style::child and style::visible) applied to them. For control types other than EDITTEXT, SCROLLBAR, LISTBOX and COMBOBOX, the format of the control specification is as shown below.
control-type "text", identity, xPosition, yPosition, xWidth, yheight [,style]For control types: EDITTEXT, SCROLLBAR, LISTBOX and COMBOBOX, the format of the control specification is shown below.
control-type identity, xPosition, yPosition, xWidth, yheight [,style]
Not all possible combinations of creating controls are represented in the table above. The general form of a control statement is shown.
CONTROL "text", identity, "class", style, xPosition, yPosition, xWidth, yWidth
all dialogs may be coded with this statement alone (that is, for the child control windows). For example, instead of using the statement:
PUSHBUTTON "Ok", IDok, 20, 30, 41, 14
the statement:
CONTROL "Ok", IDok, "button", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 20, 30, 41, 14
may be used. When a dialog box is created, the dialog parent is first created; after which, each of the controls is created. The form of the creation for the child windows is shown below (for the above button example):
create_window(L"BUTTON", "Ok", style::child | style::visible | button_style::push_button | style::tabstop, (20 * character_width) / 4, (30 * character_height) / 8, (41 * character_width) / 4, (14 * character_height) / 8, dialog_handle, item_identity::ok, module_handle, (void*)null);
where character_width and character_height are the width and height (in pixels) of the font being used for the dialog and dialog_handle is the handle of the parent dialog. The dialog manager issues one create_window call per control present in the dialog template.