Using Status Windows

The following example creates a status window that has a sizing grip and divides the window into four equal parts based on the width of the parent window's client area.

// DoCreateStatusWindow - creates a status window and divides it into

// the specified number of parts.

// Returns the handle to the status window.

// hwndParent - parent window for the status window

// nStatusID - child window identifier

// hinst - handle to the application instance

// nParts - number of parts into which to divide the status window

HWND DoCreateStatusWindow(HWND hwndParent, int nStatusID,

HINSTANCE hinst, int nParts)

{

HWND hwndStatus;

RECT rcClient;

HLOCAL hloc;

LPINT lpParts;

int i, nWidth;

// Ensure that the common control DLL is loaded.

InitCommonControls();

// Create the status window.

hwndStatus = CreateWindowEx(

0, // no extended styles

STATUSCLASSNAME, // name of status window class

(LPCTSTR) NULL, // no text when first created

SBARS_SIZEGRIP | // includes a sizing grip

WS_CHILD, // creates a child window

0, 0, 0, 0, // ignores size and position

hwndParent, // handle to parent window

(HMENU) nStatusID, // child window identifier

hinst, // handle to application instance

NULL); // no window creation data

// Get the coordinates of the parent window's client area.

GetClientRect(hwndParent, &rcClient);

// Allocate an array for holding the right edge coordinates.

hloc = LocalAlloc(LHND, sizeof(int) * nParts);

lpParts = LocalLock(hloc);

// Calculate the right edge coordinate for each part, and

// copy the coordinates to the array.

nWidth = rcClient.right / nParts;

for (i = 0; i < nParts; i++) {

lpParts[i] = nWidth;

nWidth += nWidth;

}

// Tell the status window to create the window parts.

SendMessage(hwndStatus, SB_SETPARTS, (WPARAM) nParts,

(LPARAM) lpParts);

// Free the array, and return.

LocalUnlock(hloc);

LocalFree(hloc);

return hwndStatus;

}