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