1

C++ で記述された Windows アプリケーションがあります。アプリケーションは、隠しディレクトリに特定の構成ファイルを生成します。アプリケーションからそのディレクトリを開くオプションをユーザーに提供したいと考えています。そのオプションをクリックすると、Windows エクスプローラーのようなダイアログが開き、入力ディレクトリの場所が示されます。同様の API を探すのに時間を費やしましたが、「DlgDirListComboBoxW」、「GetOpenFileName」、「GetSaveFileName」などの特定のダイアログが表示されます。入力ディレクトリの場所を指定して、ダイアログのような通常の Windows エクスプローラーを開くための API を探しています。API が CommonDialogs セクションに属している場合、非常に役立ちます。

4

2 に答える 2

1

どうですか:

HWND hWndOwner = NULL;

ShellExecute(
    hWndOwner,
    _T("explore"),
    _T("c:\\some\\path"),
    NULL,
    NULL,
    SW_SHOWNORMAL);

必要に応じて、メイン ウィンドウ ハンドルに設定hWndOwnerし、他のさまざまなオプションから選択できます。

詳細および使用方法の詳細については、 の MSDN ページを参照してくださいShellExecute

于 2015-01-21T06:59:23.560 に答える
1

SHBrowseForFolderを使用できます

次のようなダイアログが表示されます。

ここに画像の説明を入力

これは、使用方法の例です。

BOOL GetFolder(LPCSTR folderpath, 
               LPCSTR szCaption, 
               HWND hOwner /*= NULL*/)
{
    BOOL retVal = FALSE;

    // The BROWSEINFO struct tells the shell 
    // how it should display the dialog.
    BROWSEINFO bi;
    memset(&bi, 0, sizeof(bi));

    bi.ulFlags   = BIF_USENEWUI;
    bi.hwndOwner = hOwner;
    bi.lpszTitle = szCaption;   

    // must call this if using BIF_USENEWUI
    ::OleInitialize(NULL);

    // Show the dialog and get the itemIDList for the 
    // selected folder.
    LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);

    if(pIDL != NULL)
    {
        // Create a buffer to store the path, then 
        // get the path.
        char buffer[_MAX_PATH] = {'\0'};
        if(::SHGetPathFromIDList(pIDL, buffer) != 0)
        {
            // Set the string value.
            folderpath = buffer;
            retVal = TRUE;
        }

        // free the item id list
        CoTaskMemFree(pIDL);
    }

    ::OleUninitialize();

    return retVal;
}
于 2015-01-21T07:30:33.590 に答える