CWnd::ShowWindow Can’t always Hide your Window!


CWnd::ShowWindow as most think is perhaps the most used member function in CWnd the basic MFC window class. Sticking heavily to MFC has its disadvantages. Before coming to that, let me say this. SW_SHOW and SW_HIDE aren’t the only values that can be passed to the function.

  • SW_HIDE: Hides this window and passes activation to another window.
  • SW_MINIMIZE: Minimizes the window and activates the top-level window in the system’s list.
  • SW_RESTORE: Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.
  • SW_SHOW: Activates the window and displays it in its current size and position.
  • SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized window.
  • SW_SHOWMINIMIZED: Activates the window and displays it as an icon.
  • SW_SHOWMINNOACTIVE: Displays the window as an icon. The window that is currently active remains active.
  • SW_SHOWNA: Displays the window in its current state. The window that is currently active remains active.
  • SW_SHOWNOACTIVATE: Displays the window in its most recent size and position. The window that is currently active remains active.
  • SW_SHOWNORMAL: Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.

Here, window activation, whether you need it or not is an important thought. Now here is the point. You can’t do any of these to a window created in a different thread. CWnd doesn’t have a function for this purpose. Its object oriented policies doesn’t allow it to have one I guess. A win32 API is here to save the day; ShowWindowAsync. This API can set the visibility state of a window created in another thread. So, if you are in a multi-threaded application be sure to use this API to hide or show your window in case of creation of the same from different threads.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s