Creating a Child Window
To create an MDI child window, an application can either call the
CreateMDIWindow function or send an
WM_MDICREATE message to the MDI client window. (The application can use the
CreateWindowEx function with the WS_EX_MDICHILD style to create MDI child windows.) A
single-threaded MDI application can use either method to create a child window. A
thread in a multithreaded MDI application must use the
CreateMDIWindow or
CreateWindowEx function to create a child window in a different thread.
The
lParam parameter of a WM_MDICREATE message is a far pointer to an
MDICREATESTRUCT structure. The structure includes four dimension members:
x and
y, which indicate the horizontal and vertical positions of the window, and
cx and
cy, which indicate the horizontal and vertical extents of the window. Any of
these members may be assigned explicitly by the application, or they may be set to
CW_USEDEFAULT, in which case Windows selects a position, size, or both,
according to a cascading algorithm. In any case, all four members must be
initialized. Multipad uses CW_USEDEFAULT for all dimensions.
The last member of the
MDICREATESTRUCT structure is the
style member, which may contain style bits for the window. To create an MDI child
window that can have any combination of window styles, specify the
MDIS_ALLCHILDSTYLES window style. When this style is not specified, an MDI child window has
the WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL, and WS_VSCROLL styles as default
settings.
Multipad creates its MDI child windows by using its locally defined AddFile
function (located in the source file MPFILE.C). The AddFile function sets the
title of the child window by assigning the
szTitle member of the window's
MDICREATESTRUCT structure to either the name of the file being edited or to "Untitled." The
szClass member is set to the name of the MDI child window class registered in
Multipad's InitializeApplication function. The
hOwner member is set to the application's instance handle.
The following example shows the AddFile function in Multipad.
HWND APIENTRY AddFile(pName)
CHAR * pName;
{
HWND hwnd;
CHAR sz[160];
MDICREATESTRUCT mcs;
if (!pName) {
// If the pName parameter is NULL, load the "Untitled"
// string from the STRINGTABLE resource and set the szTitle
// member of MDICREATESTRUCT.
LoadString(hInst, IDS_UNTITLED, sz, sizeof(sz));
mcs.szTitle = (LPCTSTR) sz;
}
else
// Title the window with the full path and filename,
// obtained by calling the OpenFile function with the
// OF_PARSE flag, which is called before AddFile().
mcs.szTitle = of.szPathName;
mcs.szClass = szChild;
mcs.hOwner = hInst;
// Use the default size for the child window.
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
// Give the child window the default style. The styleDefault
// variable is defined in MULTIPAD.C.
mcs.style = styleDefault;
// Tell the MDI client window to create the child window.
hwnd = (HWND) SendMessage (hwndMDIClient, WM_MDICREATE, 0,
(LONG) (LPMDICREATESTRUCT) &mcs);
// If the file is found, read its contents into the child
// window's client area.
if (pName) {
if (!LoadFile(hwnd, pName)) {
// Cannot load the file; close the window.
SendMessage(hwndMDIClient, WM_MDIDESTROY,
(DWORD) hwnd, 0L);
}
}
return hwnd;
}
The pointer passed in the
lParam parameter of the
WM_MDICREATE message is passed to the
CreateWindow function and appears as the first member in the
CREATESTRUCT structure, passed in the
WM_CREATE message. In Multipad, the child window initializes itself during WM_CREATE
message processing by initializing document variables in its extra data and by
creating the edit control's child window.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database