[リストへもどる]
一括表示

投稿時間:2002/11/18(Mon) 17:47
投稿者名:ゆうや
Eメール:curren62036@yahoo.co.jp
URL :
タイトル:
コモンダイアログを使わないでディレクトリを選択したいです。
こんにちは。わからないことがあるので投稿してみました。
Win98 Second Edition で VB6.0 SP5を使っています。
MSDNライブラリにて「コモンダイアログを使わないでディレクトリを選択する方法」(文書番号04494
4)
って言うのがありました。SHBrowseForFolderというAPI関数を使うみたいなのですが。
そこで、この関数を使うときに、初期のディレクトリを自分が作ったフォルダのパスにしたいのです
が、やり方が分かりません。この関数はデスクトップ、コントロールパネルなどはできるように書い

ありますが、例えば、c:\vb\テストフォルダ とか自分で作ったフォルダを初期のディレクトリとし

指定したいのです。
どなたかご存知の方、教えてください。宜しくお願いします。

投稿時間: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」は、プロシージャ名は別の名前に変更しても
構いませんが、「引数の数とデータ型」は絶対に変更しないで下さい。
また、必ず標準モジュールにて宣言するようにしてください。

投稿時間:2002/11/18(Mon) 19:50
投稿者名:ゆうや
Eメール:curren62036@yahoo.co.jp
URL :
タイトル:
Re^2: コモンダイアログを使わないでディレクトリを選択したいです。
魔界の仮面弁士さん>
早速のレス、ありがとうございました。おかげさまで出来ました。
只一つ。教えていただいたコード内の「C:\Program Files\」ですが、最後の「\」はない方がいいみた
いでした。
とても助かりました。ありがとうございました!!