|
▼熊谷隆史 さん:
>
>フックプロシージャにて、
>通知されてくるhDlgの親(GetParentで)のウィンドウハンドルを
>SetWindowPosやMoveWindowに指定して、移動させますが
>タイミング的にWM_INITDIALOGでは早すぎるので
WM_NOTIFYでよろしいですよ。
こんな感じで
' コモンダイアログのフックプロシージャ
Private Function OFNHookProc(ByVal hdlg As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Static DefaultView As Long
Dim pProc As Long
Dim h As Long
Dim OFN As OFNOTIFY ' OFNOTIFY構造体
Dim RC As RECT ' RECT構造体
Dim lngTop As Long ' ダイアログ上位置
Dim lngLeft As Long ' ダイアログ左位置
Dim lngWidth As Long ' ダイアログ幅
Dim lngHeight As Long ' ダイアログ高さ
Dim lngDTWidth As Long ' デスクトップ幅
Dim lngDTHeight As Long ' デスクトップ高さ
Select Case uMsg
Case WM_INITDIALOG
OFNHookProc = True
Case WM_NOTIFY
If lParam = 0 Then Exit Function
CopyMemory OFN, ByVal lParam, Len(OFN)
With OFN
Select Case .hdr.code
Case CDN_INITDONE
' ここで、ダイアログの初期表示位置を設定しています。
Call GetWindowRect(GetParent(hdlg), RC)
lngWidth = RC.Right - RC.Left
lngHeight = RC.Bottom - RC.Top
Call GetWindowRect(GetDesktopWindow, RC)
lngDTWidth = RC.Right - RC.Left
lngDTHeight = RC.Bottom - RC.Top
Select Case m_Posi
Case 0 ' 画面中央
lngTop = (lngDTHeight - lngHeight) \ 2
lngLeft = (lngDTWidth - lngWidth) \ 2
Case 1 ' 左上
lngTop = 0: lngLeft = 0
Case 2 ' 左下
lngTop = lngDTHeight - lngHeight
lngLeft = 0
Case 3 ' 右上
lngTop = 0
lngLeft = lngDTWidth - lngWidth
Case 4 ' 右下
lngTop = lngDTHeight - lngHeight
lngLeft = lngDTWidth - lngWidth
End Select
Call SetWindowPos(GetParent(hdlg), 0, lngLeft, lngTop, 0, 0, SWP_NOSIZE Or SWP_NOZORDER)
Case CDN_FOLDERCHANGE
End Select
End With
End Select
End Function
|
|