ShowWindow function
Applies to: desktop apps only
Sets the specified window's show state.
Syntax
BOOL WINAPI ShowWindow( __in HWND hWnd, __in int nCmdShow );
Parameters
- hWnd [in]
-
Type: HWND
A handle to the window.
- nCmdShow [in]
-
Type: int
Controls how the window is to be shown. This parameter is ignored the first time an application calls ShowWindow, if the program that launched the application provides a STARTUPINFO structure. Otherwise, the first time ShowWindow is called, the value should be the value obtained by the WinMain function in its nCmdShow parameter. In subsequent calls, this parameter can be one of the following values.
Value Meaning - SW_FORCEMINIMIZE
- 11
Minimizes a window, even if the thread that owns the window is not responding. This flag should only be used when minimizing windows from a different thread.
- SW_HIDE
- 0
Hides the window and activates another window.
- SW_MAXIMIZE
- 3
Maximizes the specified window.
- SW_MINIMIZE
- 6
Minimizes the specified window and activates the next top-level window in the Z order.
- SW_RESTORE
- 9
Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
- SW_SHOW
- 5
Activates the window and displays it in its current size and position.
- SW_SHOWDEFAULT
- 10
Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.
- SW_SHOWMAXIMIZED
- 3
Activates the window and displays it as a maximized window.
- SW_SHOWMINIMIZED
- 2
Activates the window and displays it as a minimized window.
- SW_SHOWMINNOACTIVE
- 7
Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except the window is not activated.
- SW_SHOWNA
- 8
Displays the window in its current size and position. This value is similar to SW_SHOW, except that the window is not activated.
- SW_SHOWNOACTIVATE
- 4
Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.
- SW_SHOWNORMAL
- 1
Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
Return value
Type:
Type: BOOL
If the window was previously visible, the return value is nonzero.
If the window was previously hidden, the return value is zero.
Remarks
To perform certain special effects when showing or hiding a window, use AnimateWindow.
The first time an application calls ShowWindow, it should use the WinMain function's nCmdShow parameter as its nCmdShow parameter. Subsequent calls to ShowWindow must use one of the values in the given list, instead of the one specified by the WinMain function's nCmdShow parameter.
As noted in the discussion of the nCmdShow parameter, the nCmdShow value is ignored in the first call to ShowWindow if the program that launched the application specifies startup information in the structure. In this case, ShowWindow uses the information specified in the STARTUPINFO structure to show the window. On subsequent calls, the application must call ShowWindow with nCmdShow set to SW_SHOWDEFAULT to use the startup information provided by the program that launched the application. This behavior is designed for the following situations:
- Applications create their main window by calling CreateWindow with the WS_VISIBLE flag set.
- Applications create their main window by calling CreateWindow with the WS_VISIBLE flag cleared, and later call ShowWindow with the SW_SHOW flag set to make it visible.
Examples
For an example, see Creating a Main Window.
Requirements
|
Minimum supported client | Windows 2000 Professional |
|---|---|
|
Minimum supported server | Windows 2000 Server |
|
Header |
|
|
Library |
|
|
DLL |
|
See also
- Reference
- CreateWindow
- ShowWindowAsync
- ShowOwnedPopups
- AnimateWindow
- WinMain
- Conceptual
- Windows
- Other Resources
- CreateProcess
- STARTUPINFO
Send comments about this topic to Microsoft
Build date: 2/3/2012
User Interface Privilege Isolation (UIPI) seems to be preventing ShowWindow calls from working when trying to restore a window of a process owned by Admin (this might only be the case when UAC is turned on).
While SetForegroundWindow works fine on an Admin process window, ShowWindow seems to have no effect. However, I found a work-around that does not seem to be affected by UAC or UIPI. This does not work:
ShowWindowAsync(hWnd, SW_RESTORE); // Does not work Admin process window
SetForegroundWindow(hWnd);
Instead of ShowWindow use SendMessage with WM_SYSCOMMAND and SC_RESTORE, like this:
SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); // Works on Admin process window!
SetForegroundWindow(hWnd);
- 5/30/2012
- Sertelegger
- 10/29/2011
- olivier4000
- 3/13/2012
- cvrboy
For example, if you maximize the windows media player main window, the window will be maximized but not its content (if the content is a video, it won't be resized).
Use ShowWindowAsync instead.
According to my tests, if you do ShowWindow(hwnd, SW_MAXIMIZE) on a hidden window, it will make the window visible, and there is no way to stop it.
This is incredibly bad
What are you supposed to do when you are restoring a new window to its former position, but you don't want it to be visible yet?
answer from ArnoudMulder:
You can prepare a window to maximize using SetWindowPlacement before it is shown, even the restored position when it restored from maximized state
In fact, you can use GetWindowPlacement at the exit of the app and restore it completely using SetWindowPlacement followed by ShowWindow(in_hWnd, lv_Placement.showCmd);
- 5/15/2011
- Greg Wittmeyer
- 9/19/2011
- Thomas Lee
I've tested minimizing a window with ShowWindow(hwnd, SW_MINIMIZE) and this works fine, but after it's been minimzed, and you try calling ShowWindow(hwnd, SW_RESTORE) - or use SW_SHOW, SW_NORMAL, or SW_MAXIMIZE for that matter - nothing happens.
The only way to successfully bring up a window is to p/invoke SetForegroundWindow(hwnd); and that will do the job. It makes sense to use this but ShowWindow should do the same with SW_RESTORE.
- 8/11/2011
- Zac Lippard
- 9/19/2011
- Thomas Lee
The documentation for SW_SHOW should state:
Activates the window and displays it in its current size and position if the window is currently hidden. Has no effect on windows that are currently visible.
Similarly, the documentation for SW_RESTORE should state:
Activates and restores a window to its original size and position if the window is minimized or maximized. Has no effect on windows that are not visible (see SW_HIDE) or that are visible but not maximized or minimized. An application should specify this flag when restoring a minimized window.
The following code snippet would have saved me many hours on the phone with a Microsoft tech support professional:
// Code to display a window regardless of its current state
ShowWindow(hWnd, SW_SHOW); // Make the window visible if it was hidden
ShowWindow(hWnd, SW_RESTORE); // Next, restore it if it was minimized
SetForegroundWindow(hWnd); // Finally, activate the window
- 12/22/2010
- Bob.at.SBS
GetWindowPlacement does just that, among other things.
Hopefully saves the next person some long and annoying googling around - try it if you want a search engine challenge...
- 8/1/2010
- romkyns
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
SW_RESTORE = 9
SW_SHOW = 5
SW_SHOWDEFAULT = 10
SW_SHOWMAXIMIZED = 3
SW_SHOWMINIMIZED = 2
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_SHOWNOACTIVATE = 4
SW_SHOWNORMAL = 1
Question: How can it be that SW_MAXIMIZE == SW_SHOWMAXIMIZED == 3? They are supposed to do a little different actions.
From what I saw in winuser.h, they appear equal as here.
But according the explanation, they have to be different.
Response: I noticed that when I posted these values as well. My guess is that it is an artifact of maximizing windows. For instance, if you maximize a window at all, the window is going to take focus and thus must be activated. This would mean that SW_MAXIMIZE is equivalent to SW_SHOWMAXIMIZED, and that one of the two constants is there for the sake of completeness.
- 11/11/2009
- intoinside