2.指定のウィンドウを常に手前に表示する(SampleNo.009) |
1.フォームを常に手前に表示する(フォームを最前面に表示) 2.同一プロジェクト内でのフォームを前面に表示する 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:SetWindowPos その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.フォームを常に手前に表示する(009) 2002.04.17 (1) 2006.12.28 |
Option Explicit '指定のウィンドウのサイズ・位置・Zオーダーを設定する(P100) Private Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ ByVal x As Long, ByVal y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long 'ウィンドウをウィンドウリストの一番上に配置する Private Const HWND_TOPMOST = (-1) 'ウィンドウの現在のサイズを保持する Private Const SWP_NOSIZE = &H1& 'ウィンドウの現在位置を保持する Private Const SWP_NOMOVE = &H2& Private Sub Form_Load() 'これでこのフォームが常に一番手前に表示されます。 Dim retValue As Long '現在の位置とサイズでウィンドウリストの一番上に配置する retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) End Sub 参 考 hWndInsertAfteの値 ウィンドウのZオーダーの配置を示す定数の宣言 ウィンドウをZオーダーの一番上に配置する Private Const HWND_TOP = 0 ウィンドウをウィンドウリストの一番下に配置する Private Const HWND_BOTTOM = 1 ウィンドウをウィンドウリストの一番上に配置する Private Const HWND_TOPMOST = (-1) ウィンドウをウィンドウリストの一番上(ただしほか のウィンドウが HWND_TOPMOSTに配置されている場合はそのすぐ下)に配置する Private Const HWND_NOTOPMOST = (-2) wFlagsの引数のフラグ ウィンドウの現在のサイズを保持する Private Const SWP_NOSIZE = &H1& ウィンドウの現在位置を保持する Private Const SWP_NOMOVE = &H2& ウィンドウリスト内での現在位置を保持する Private Const SWP_NOZORDER = &H4& ウィンドウを自動的に再描画しない Private Const SWP_NOREDRAW = &H8& ウィンドウをアクティブにしない Private Const SWP_NOACTIVATE = &H10& ウィンドウのサイズ変更中でなくてもWM_NCCALCSIZEを送る Private Const SWP_FRAMECHANGED = &H20& ウィンドウを表示する Private Const SWP_SHOWWINDOW = &H40& ウィンドウを隠す Private Const SWP_HIDEWINDOW = &H80& クライアント領域の内容をクリアする Private Const SWP_NOCOPYBITS = &H100& オーナーウィンドウのZオーダーは変えない Private Const SWP_NOOWNERZORDER = &H200& 再描画のときウィンドウを囲む枠も描画 Private Const SWP_DRAWFRAME = &H20& SWP_NOOWNERZORDER と同じ Private Const SWP_NOREPOSITION =&h200& これらの定数はAPIビューアのウィンドウからコピーして下さい。 アドイン→APIビューア(初めてはアドインマネージャーから)→APIビューアが開いたら→ファイル→テキストファイルの読み込み→WINAPIのフォルダーを開く→Win32api.txtを開く |
2.同一プロジェクト内でのフォームを前面に表示する |
Show メソッドにオーナーフォームを指定することで簡単に実現できます。 通常、Show メソッドを使用する場合オーナーフォームを指定しないので、意外と知られていないテクニックのひとつです。 Form2.Show 1, Form1 のようにモーダルで指定すると Form2 が閉じられるまで Form1 にはフォーカスが移らず Form1 の前面にForm2 が表示されます。 これを利用して自作のインプットボックス等やメッセージボックスを作ったり、又モードレス(Form2.Show 0, Form1)で表示してメニューのフォームを作ったりが簡単にできます。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
フォームを常に手前に表示する フォームを常に最前面に表示する ウィンドウを最前面に表示 VB6.0 フォームウィンドウ 前面 最前面 一番上 手前 常に全面 常に手前に Zオーダー |