VB6.0用掲示板の過去のログ(No.1)−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」は、プロシージャ名は別の名前に変更しても
構いませんが、「引数の数とデータ型」は絶対に変更しないで下さい。
また、必ず標準モジュールにて宣言するようにしてください。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -