1画面に対して最大化した時の最大化サイズを指定する処理は正常に動作しています。
これを複数画面対応するには、どのような手段で行うのでしょうか?
宜しくお願いいたします。
■■■■■■Module.bas■■■■■■
Public Sub StartSubClass(hWnd As Long, objForm As Object)
Set pobjForm = objForm
plngoldWinProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Function StopSubClass(hWnd As Long, objForm As Object)
Dim lngResult As Long ' 戻り値
lngResult = SetWindowLong(hWnd, GWL_WNDPROC, plngoldWinProc)
End Function
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lngRet As Long
Dim tagMinMax As MINMAXINFO
'画面移動が終了した場合
If uMsg = WM_GETMINMAXINFO Then
Call CopyMemory(tagMinMax, ByVal lParam, Len(tagMinMax))
With tagMinMax
.ptMinTrackSize.x = 300 'トラッキング時の最小のサイズ
.ptMinTrackSize.y = 120
.ptMaxTrackSize.x = 1280 'トラッキング時の最大のサイズ
.ptMaxTrackSize.y = 940
.ptMaxSize.x = 1280 '最大化時のサイズ
.ptMaxSize.y = 940
.ptMaxPosition.x = 0 '最大化した時の左上の位置
.ptMaxPosition.y = 39
End With
Call CopyMemory(ByVal lParam, tagMinMax, Len(tagMinMax))
End If
Private Sub Form_Load()
' サブクラス化開始
Call StartSubClass(Me.hWnd, Me)
End Sub
■■■■■■Form1■■■■■■
Private Sub Form_Unload(Cancel As Integer)
' サブクラス化終了
Call StopSubClass(Me.hWnd, Me)
End Sub
'元のウィンドウプロシージャを呼ぶ
WindowProc = CallWindowProc(plngoldWinProc, hWnd, uMsg, wParam, lParam)
End Function
画面・・・ってなってますがこれは
ディスプレイのことではなく、ウィンドウのことを
指しているのでしょうか?
それなら、全てのウィンドウをサブクラス化しても
いいんではないでしょうか。
プロシージャーは同一のものを指定しても
問題ないはずですし。
ツイート | ![]() |