ウィンドウを表示・移動させる



ウィンドウを移動させるときは、 MoveWindow 関数を使います。


BOOL MoveWindow( HWND hWnd, // 移動するウィンドウのハンドル int X, // 移動先の、横方向の位置 int Y, // 移動先の、縦方向の位置 int nWidth, // ウィンドウの幅 int nHeight, // ウィンドウの高さ BOOL bRepaint // 再描画オプション ); 戻り値:成功で0以外。失敗で0。

移動したいウィンドウのハンドルと、移動先の位置、移動後のウィンドウの幅と高さを指定すればOKです。
bRepaintは、移動後にウィンドウを再描画するかどうかを指定します。 しないと乱れるときがあるので、普通はしておいた方がいいと思います。



ウィンドウ移動には他に、MoveWindowよりも高度な SetWindowPos 関数があります。


BOOL SetWindowPos( HWND hWnd, // 移動するウィンドウのハンドル HWND hWndInsertAfter, // ※ Zオーダーの指定の為のハンドル int X, // 移動先の、横方向の位置 int Y, // 移動先の縦方向の位置 int cx, // ウィンドウの幅 int cy, // ウィンドウの高さ UINT uFlags // ※ ウィンドウ位置のオプション ); 戻り値:成功で0以外。失敗で0。
hWndInsertAfter
HWND_BOTTOMZオーダーの最後に置きます。
HWND_NOTOPMOST最前面ウィンドウを解除します。
HWND_TOPZオーダーの先頭に置きます。(デフォルト)
HWND_TOPMOST最前面ウィンドウにします。
普通のウィンドウハンドルそのウィンドウの後ろに置きます。
uFlags
SWP_ASYNCWINDOWPOSスレッド違いのウィンドウに対して使うときに指定。
SWP_DEFERERASEWM_SYNCPAINT が生成されないようにします。
SWP_DRAWFRAMEウィンドウを囲む枠を描画します。
SWP_FRAMECHANGEDSetWindowLong 関数を使って新しいフレームスタイルの設定を適用します。
SWP_HIDEWINDOWウィンドウを非表示にします。
SWP_NOACTIVATEウィンドウをアクティブ化しません。
SWP_NOCOPYBITSクライアント領域の内容全体を破棄します。
SWP_NOMOVEX と Y を無視します。(移動しません)
SWP_NOOWNERZORDERオーナーウィンドウの Z オーダーを変更しません。
SWP_NOREDRAWウィンドウを再描画しません。
SWP_NOREPOSITIONSWP_NOOWNERZORDER に同じ。
SWP_NOSENDCHANGINGWM_WINDOWPOSCHANGING が送られないようにします。
SWP_NOSIZEcx と cy を無視します。(サイズを維持します)
SWP_NOZORDERhWndInsertAfter を無視します。(Zオーダーはそのまま)
SWP_SHOWWINDOWウィンドウを表示します。

このように、ウィンドウの移動だけでなく「Zオーダー(ウィンドウの前後関係)」「表示/非表示」なども変更できます。 特に「HWND_TOPMOST」は、ウィンドウを常に一番前に表示できるので覚えておくべきです。 よく使うであろうフラグを緑色にしてみました。フラグは「|」で複数指定することが出来ます。



最後に、ウィンドウの表示・非表示、最大化・最小化を行う ShowWindow 関数を説明します。


BOOL ShowWindow( HWND hWnd, // 対象ウィンドウのハンドル int nCmdShow // 表示方法の指定 ); 戻り値:ウィンドウが以前表示されてれば0以外。以前非表示なら0。
nCmdShow
SW_FORCEMINIMIZEWin2Kのみ 他のスレッドのウィンドウを無理やり最小化します。
SW_HIDEウィンドウを非表示にします。
SW_MAXIMIZEウィンドウを最大化します。
SW_MINIMIZEウィンドウを最小化します。
SW_RESTORE最小化・最大化を元に戻して、ウィンドウをアクティブにして表示します。
SW_SHOWウィンドウを表示し、アクティブ化させます。
SW_SHOWDEFAULT他のスレッドからの CreateProcess 関数に渡された STARTUPINFO 構造体の SW_ フラグに従います。
SW_SHOWMAXIMIZEDウィンドウをアクティブにし、最大化します。
SW_SHOWMINIMIZEDウィンドウをアクティブにし、最小化します。
SW_SHOWMINNOACTIVEウィンドウを最小化します。アクティブ化はされません。
SW_SHOWNAウィンドウを表示します。アクティブ化はされません。
SW_SHOWNOACTIVATEウィンドウを直前の位置とサイズで表示します。アクティブ化はされません。
SW_SHOWNORMAL最小化・最大化を戻し、ウィンドウをアクティブにして表示します。初めてウィンドウを表示するときに使用します。

似たような表示方法が沢山ありますが、とりあえず緑色にしたのを使えば問題はありません。 「SW_HIDE」で非表示、「SW_SHOW」で表示です。



その他には、簡単なウィンドウ操作関数に以下のようなものがあります。


BOOL BringWindowToTop( HWND hWnd // 対象ウィンドウのハンドル ); 戻り値:成功で0以外。失敗で0。

このウィンドウを、Zオーダーの先頭に持ってきます。


BOOL SetForegroundWindow( HWND hWnd // 対象ウィンドウのハンドル ); 戻り値:成功で0以外。失敗で0。

このウィンドウを作ったスレッドをフォアグラウンドにして、
ウィンドウをアクティブ化します。



サンプルコード

/////***** hWnd は、すでに作ってあるウィンドウハンドル *****///// // ウィンドウを (100,100) に移動し、サイズを 640x480 にする。 MoveWindow( hWnd, 100, 100, 640, 480, TRUE); // ウィンドウを、常に一番上に表示する。 SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE ); // ウィンドウを表示・非表示にする。 ShowWindow( hWnd, SW_SHOW); ShowWindow( hWnd, SW_HIDE); // ウィンドウを最大化・最小化する。 ShowWindow( hWnd, SW_MAXIMIZE); ShowWindow( hWnd, SW_MINIMIZE); // ウィンドウをフォアグラウンドにする。 SetForegroundWindow( hWnd );



★INDEX★

Copyright(C) へぽぽ