43 out of 75 rated this helpful - Rate this topic

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.

ValueMeaning
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

Winuser.h (include Windows.h)

Library

User32.lib

DLL

User32.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

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
How to restore window owned by Admin process as User

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);

if your window is hidden in the system tray near the clock
show=yes
Use ShowWindowAsync for windows you don't own
ShowWindow may have a unexpected behavior when applied to windows not owned by the process calling it.

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.
SW_MAXIMIZE
original from Greg Wittmeyer:

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);
SW_RESTORE does not work on minimized windows
Using SW_RESTORE to restore a minimized window does not work (at least within Windows Mobile).

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.
Documentation corrections
The documentation states that several values of the nCmdShow parameter "activate and display a window."  This is not correct.  ShowWindow only activates and displays a window if the window is currently in a particular state.
 
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
How to determine if a window is visible
This tells you how to hide a window, but of course it doesn't link you to anything that would let you check if a window is hidden.

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...
Integer values for nCmdShow constants
SW_HIDE = 0
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.
Locking call
I used this in Delphi and i found that if you try to use it on a non-responsive process (like when a process is hung), it locks the caller; it works like SendMessage. To use this you should first check if the process is active.