サブクラスについて


mariko  2001-07-05 12:22:52  No: 74596  IP: [192.*.*.*]

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

編集 削除
こころ  URL  2001-07-06 01:24:18  No: 74597  IP: [192.*.*.*]

画面・・・ってなってますがこれは
ディスプレイのことではなく、ウィンドウのことを
指しているのでしょうか?

それなら、全てのウィンドウをサブクラス化しても
いいんではないでしょうか。
プロシージャーは同一のものを指定しても
問題ないはずですし。

編集 削除