The Window structure contains functions and structures to create and operate on windows. Many other operations are available by sending messages to windows.
structure Window : sig type HWND and HINSTANCE and HMENU type POINT = { x: int, y: int } type RECT = { left: int, top: int, right: int, bottom: int } structure Style: sig include BIT_FLAGS val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags end datatype WindowPositionStyle = SWP_ASYNCWINDOWPOS | SWP_DEFERERASE | SWP_FRAMECHANGED | SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_OTHER of int datatype ShowWindowOptions = SW_HIDE | SW_MAXIMIZE | SW_MINIMIZE | SW_RESTORE | SW_SHOW | SW_SHOWDEFAULT | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_SHOWMINNOACTIVE | SW_SHOWNA | SW_SHOWNOACTIVATE | SW_SHOWNORMAL val SW_NORMAL: ShowWindowOptions val SW_MAX: ShowWindowOptions val ShowWindow: HWND * ShowWindowOptions -> bool datatype GetWindowFlags = GW_CHILD | GW_HWNDFIRST | GW_HWNDLAST | GW_HWNDNEXT | GW_HWNDPREV | GW_OWNER datatype ParentType = ChildWindow of {id: int, parent: HWND} | PopupWindow of HMENU | PopupWithClassMenu val GWL_EXSTYLE : int val GWL_HINSTANCE : int val GWL_HWNDPARENT : int val GWL_ID : int val GWL_STYLE : int val GWL_USERDATA : int val AdjustWindowRect : RECT * Style.flags * bool -> RECT val AdjustWindowRectEx : RECT * Style.flags * bool * int -> RECT val ArrangeIconicWindows : HWND -> int val BringWindowToTop : HWND -> unit val CW_USEDEFAULT : int val ChildWindowFromPoint : HWND * POINT -> HWND option val CloseWindow : HWND -> unit val CreateWindow : {x: int, y: int, init: 'a, name: string, class: 'a Class.ATOM, style: Style.flags, width: int, height: int, instance: HINSTANCE, relation: ParentType} -> HWND val DestroyWindow: HWND -> unit val FindWindow: string * string option -> HWND val FindWindowEx: HWND option * HWND option * string * string option -> HWND val GetClassName : HWND -> string val GetClientRect : HWND -> RECT val GetDesktopWindow : unit -> HWND val GetForegroundWindow : unit -> HWND val GetLastActivePopup : HWND -> HWND val GetNextWindow : HWND * GetWindowFlags -> HWND val GetParent : HWND -> HWND option val GetTopWindow : HWND option-> HWND option val GetWindow : HWND * GetWindowFlags -> HWND option val GetWindowContextHelpId : HWND -> int val GetWindowLong : HWND * int -> int val GetWindowRect : HWND -> RECT val GetWindowText : HWND -> string val GetWindowTextLength : HWND -> int val IsChild : HWND * HWND -> bool val IsIconic : HWND -> bool val IsWindow : HWND -> bool val IsWindowVisible : HWND -> bool val IsZoomed : HWND -> bool val MoveWindow : {x: int, y: int, hWnd: HWND, width: int, height: int, repaint: bool} -> unit val OpenIcon : HWND -> unit val SetForegroundWindow : HWND -> bool val SetParent : HWND * HWND option -> HWND val SetWindowContextHelpId : HWND * int -> unit val SetWindowLong : HWND * int * int -> int val SetWindowPos : HWND * HWND * int * int * int * int * WindowPositionStyle list -> unit val SetWindowText : HWND * string -> unit val SubclassWindow : HWND * (HWND * Message.Message * 'a -> Message.LRESULT option * 'a) * 'a -> unit val WindowFromPoint : POINT -> HWND option end
datatype ParentType = ChildWindow of {id: int, parent:
HWND} | PopupWindow of HMENU | PopupWithClassMenu
The ParentType datatype is used as one of the arguments to CreateWindow.
PopupWithClassMenu and PopupWindow both create top-level windows. PopupWindow
provides a menu to be used whereas PopupWithClassMenu uses the menu, if any, given when
the class was created. ChildWindow creates a child of the given parent window and
provides an id for the child. All children must have different identifiers.
The identifier is used in WM_NOTIFY messages to
notify the parent about changes in the child and can be used to find a child window from
the parent using GetDlgItem.
It is possible to replace a window procedure for a window by subclassing the window. This is useful where a window is required which is almost the same as, say an Edit window, but it needs to process a few messages in a special way. A new window procedure is installed which process the particular messages but calls the original window procedure for any of the others.
(The terminology is, in my opinion confusing: subclassing a window does not create a new class of window but changes only a single window). In C this is done using the SetWindowLong function: in ML there is a SubclassWindow function which does this and automatically calls the window procedure of the base class for any messages which are not otherwise processed.