2010/11/13

office2010 Win32API SetWindowPos 最前面化

Option Compare Database
Option Explicit

'SetWindowPos
'http://msdn.microsoft.com/ja-jp/library/cc411206.aspx
'戻り値
'関数が成功すると、0 以外の値が返ります。
'関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

' SetWindowPos Flags
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200
Const SWP_NOSENDCHANGING = &H400
Const SWP_DEFERERASE = &H2000
Const SWP_ASYNCWINDOWPOS = &H4000
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER

'SWP_ASYNCWINDOWPOS この関数を呼び出したスレッドとウィンドウを所有するスレッドが異なる入力キューに関連付けられている場合、ウィンドウを所有するスレッドへ要求が送られます。こうすると、要求を受け取ったスレッドが要求を処理している間も、関数を呼び出したスレッドの実行が止まってしまうことはありません。
'SWP_DEFERERASE WM_SYNCPAINT メッセージが生成されないようにします。
'SWP_DRAWFRAME  ウィンドウを囲む枠( ウィンドウクラスの記述部分で定義されている)を描画します。
'SWP_FRAMECHANGED   SetWindowLong 関数を使って新しいフレームスタイルの設定を適用します。ウィンドウサイズが変更されない場合にも、ウィンドウにWM_NCCALCSIZE メッセージを送ります。このフラグを指定しなかった場合、ウィンドウサイズが変更される場合にしか WM_NCCALCSIZE メッセージは送られません。
'SWP_HIDEWINDOW ウィンドウを非表示にします。
'SWP_NOACTIVATE ウィンドウをアクティブ化しません。このフラグをセットしなかった場合、ウィンドウはアクティブ化され、最前面ウィンドウまたは非最前面ウィンドウのどちらか(hWndInsertAfter パラメータの設定による)のグループの最上位に移動します。
'SWP_NOCOPYBITS クライアント領域の内容全体を破棄します。このフラグをセットしなかった場合は、クライアント領域の有効な内容が保存され、再配置後のウィンドウのクライアント領域にコピーし直されます。
'SWP_NOMOVE 現在の位置を維持します(X パラメータと Y パラメータを無視します)。
'SWP_NOOWNERZORDER  オーナーウィンドウの Z オーダーを変更しません。
'SWP_NOREDRAW   変更結果を再描画しません。このフラグを指定すると、再描画は一切行われません。このフラグは、クライアント領域、非クライアント領域( タイトルバーおよびスクロールバーを含む)、および親ウィンドウの、このウィンドウが移動した???果現れた部分のすべてに適用されます。このフラグをセットした場合、ウィンドウや親ウィンドウの再描画の必要な部分は、アプリケーションで明示的に無効化または再描画しなければなりません。
'SWP_NOREPOSITION   SWP_NOOWNERZORDER フラグと同じです。
'SWP_NOSENDCHANGING ウィンドウに WM_WINDOWPOSCHANGING メッセージが送られないようにします。
'SWP_NOSIZE 現在のサイズを維持します(cx パラメータと cy パラメータを無視します)。
'SWP_NOZORDER   現在の Z オーダーを維持します(hWndInsertAfter パラメータを無視します)。
'SWP_SHOWWINDOW ウィンドウを表示します。

' SetWindowPos() hwndInsertAfter values
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

'HWND_BOTTOM    ウィンドウを Z オーダーの最後に置きます。hWnd パラメータで指定したウィンドウが最前面ウィンドウだった場合、このウィンドウは最前面ウィンドウではなくなり、ほかのすべてのウィンドウの下に置かれます。
'HWND_NOTOPMOST ウィンドウを最前面ウィンドウ以外のすべてのウィンドウの前( つまり、すべての最前面ウィンドウの後ろ)に挿入します。hWnd パラメータで指定したウィンドウが既に最前面ウィンドウではなかった場合、このフラグは意味を持ちません。
'HWND_TOP   ウィンドウを Z オーダーの先頭に置きます。
'HWND_TOPMOST   ウィンドウを最前面ウィンドウではないすべてのウィンドウの前に挿入します。このウィンドウは、アクティブでないときにも最前面に表示されます。

#If VBA7 = 1 Then
Declare PtrSafe Function SetWindowPos Lib "user32" _
                            (ByVal hwnd As LongPtr, _
                             ByVal hWndInsertAfter As LongPtr, _
                             ByVal x As Long, _
                             ByVal y As Long, _
                             ByVal cx As Long, _
                             ByVal cy As Long, _
                             ByVal wFlags As Long _
                             ) As Long

#Else
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

#End If

'SetWindowPos FormObject.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
'SetWindowPos FormObject.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE

0 件のコメント: