投稿日 | : 2002/11/18(Mon) 18:48 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: コモンダイアログを使わないでディレクトリを選択したいです。 |
> って言うのがありました。SHBrowseForFolderというAPI関数を使うみたいなのですが。
> そこで、この関数を使うときに、初期のディレクトリを自分が作ったフォルダのパスにしたいのです
BROWSEINFO構造体(あのサンプルでいえば、BrowseInfoユーザー定義型)の
lpfnCallbackメンバに、コールバックプロシージャ を指定し、
そのプロシージャにて設定する事になります。
MSKBのサンプルに標準モジュールを加え、以下のコードを貼り付けてください。
'----------------------
'--- 標準モジュール ---
Option Explicit
Private Const BFFM_INITIALIZED = 1
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) As Long
Private Const WM_USER = &H400
Private Const BFFM_SETSELECTIONA = WM_USER + 102
Private Const BFFM_SETSELECTIONW = WM_USER + 103
Private Const BFFM_SETSELECTION = BFFM_SETSELECTIONA
Public Function BrowseCallbackProc( _
ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal lParam As Long, _
ByVal lpData As Long) As Long
Dim strDefaultPath As String
strDefaultPath = "C:\Program Files\"
'初期化イベント
If uMsg = BFFM_INITIALIZED Then
'フォルダ選択
SendMessage hWnd, _
BFFM_SETSELECTION, _
1, _
strDefaultPath
End If
End Function
Public Function ProcPtr(ByVal Func As Long) As Long
ProcPtr = Func
End Function
'----------------------
さらに、呼び出し側(Command1_Click)を以下のように修正してください。
'----------------------
With tBrowseInfo
.hWndOwner = Me.hWnd
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
'== 以下の1行を追加 ==
.lpfnCallback = ProcPtr(AddressOf BrowseCallbackProc)
'=====================
End With
'----------------------
これで、C:\Program Files が選択された状態になると思います。
なお、上記の「BrowseCallbackProc」は、プロシージャ名は別の名前に変更しても
構いませんが、「引数の数とデータ型」は絶対に変更しないで下さい。
また、必ず標準モジュールにて宣言するようにしてください。