| 
    
     |  | ▼熊谷隆史 さん: >
 >フックプロシージャにて、
 >通知されてくる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
 
 |  |