16

ネイティブの Win32 アプリケーションから既存のフォルダを選択 (または新規作成) する方法は?

ここに同様の質問があります。C#/.NET に適切な回答があります。しかし、ネイティブの Win32 でも同じことが必要です。

解決策、フリーコードなどを知っている人はいますか?

アップデート:

回答から機能を試してみました。SHGetPathFromIDList選択したディレクトリの名前を取得するために関数を呼び出す必要があることを除いて、すべてが期待どおりに機能しました。サンプルのスクリーンショットを次に示します。

ディレクトリ ピックアップ ダイアログの例。

4

3 に答える 3

24

SHBrowseForFolder

ユーザーに好意を示し、少なくともBIF_NEWDIALOGSTYLEフラグを設定してください。

初期フォルダーを設定するには、次のコードを追加します。

static int CALLBACK BrowseFolderCallback(
                  HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    if (uMsg == BFFM_INITIALIZED) {
        LPCTSTR path = reinterpret_cast<LPCTSTR>(lpData);
        ::SendMessage(hwnd, BFFM_SETSELECTION, true, (LPARAM) path);
    }
    return 0;
}

// ...
BROWSEINFO binf = { 0 };
...
binf.lParam = reinterpret_cast<LPARAM>(initial_path_as_lpctstr); 
binf.lpfn = BrowseFolderCallback;
...

適切なパスを提供します (最後の選択、アプリケーション データ フォルダーなどを記憶するなど)。

于 2012-08-20T09:15:05.023 に答える