2 out of 4 rated this helpful Rate this topic

SetWindowPlacement function

Sets the show state and the restored, minimized, and maximized positions of the specified window.

Syntax

BOOL WINAPI SetWindowPlacement(
  __in  HWND hWnd,
  __in  const WINDOWPLACEMENT *lpwndpl
);

Parameters

hWnd [in]

Type: HWND

A handle to the window.

lpwndpl [in]

Type: const WINDOWPLACEMENT*

A pointer to a WINDOWPLACEMENT structure that specifies the new show state and window positions.

Before calling SetWindowPlacement, set the length member of the WINDOWPLACEMENT structure to sizeof(WINDOWPLACEMENT). SetWindowPlacement fails if the length member is not set correctly.

Return value

Type: BOOL

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

If the information specified in WINDOWPLACEMENT would result in a window that is completely off the screen, the system will automatically adjust the coordinates so that the window is visible, taking into account changes in screen resolution and multiple monitor configuration.

The length member of WINDOWPLACEMENT must be set to sizeof(WINDOWPLACEMENT). If this member is not set correctly, the function returns FALSE. For additional remarks on the proper use of window placement coordinates, see WINDOWPLACEMENT.

Requirements

Minimum supported client

Windows 2000 Professional

Minimum supported server

Windows 2000 Server

Header

Winuser.h (include Windows.h)

Library

User32.lib

DLL

User32.dll

See also

Reference
GetWindowPlacement
WINDOWPLACEMENT
Conceptual
Windows

 

 

Send comments about this topic to Microsoft

Build date: 9/11/2011

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Unexpected results multi monitor
I get unexpected results when doing the following on an environment with multiple monitors. Firstly the PT_MAXPOSITION does not seem to do anything when the showCmd = SW_MAXIMIZED, so the only way to maximize to a different monitor is to set the rcNormalPosition rect to bounds within the other monitor and showCmd = SW_MAXIMIZED. To avoid having the window being restored to the temporary bounds set jut to do the maximize, I call SetWindowPlacement with the rcNormalPosition  with the bounds from the original monitor with showCmd = SW_SHOW. This works fine the window is maximized to the other monitor and the rcNormalPosition is the rect bounds of the original monitor and is confirmed with a call to GetWindowPlacement. But when the user clicks on Restore via the control box the window seems to resize to the original rect in the original monitor but then bounces back over to other monitor where it was maximized.

Here is code snippet:

WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = System.Runtime.InteropServices.Marshal.SizeOf(placement);

//this maximizes to other window
GetWindowPlacement(FormHandle, ref placement);
placement.showCmd = SW_MAXIMIZE;
placement.rcNormalPosition.left = 1300;
placement.rcNormalPosition.right = 1700;
SetWindowPlacement(FormHandle, ref placement);
          
GetWindowPlacement(FormHandle, ref placement);
//this sets the normal position back to original postion and retains maximized window state
placement.showCmd = SW_SHOW;
placement.rcNormalPosition.left = 300;
placement.rcNormalPosition.right = 740;
SetWindowPlacement(FormHandle, ref placement);

//confirmed with this call
GetWindowPlacement(FormHandle, ref placement);