0

我正在使用 Visual Studio 2008 ...我正在尝试在我的设计中获取我的输出文件的文件夹路径 ...我知道有一个名为 CFolderDialog 的类 ..但它在我的 pgm 中不起作用..我应该包括任何头文件为了得到那个..如果是,任何人都可以告诉我如何包含在Visual Studio 2008中..请帮助我

4

1 回答 1

0

忘记CFolderdialog ..而不是那个..iam使用另一个来获取文件夹路径...检查我下面的代码....当我尝试在编辑框中打印文件夹路径名时出现运行时错误..

无效 CSelfExtractorUIDlg::OnBnClickedButton1() {

CDialog dlg;

HWND hwnd = NULL;
LPCTSTR szCurrent = (LPCTSTR)malloc(25*sizeof(TCHAR));
szCurrent = NULL;
LPTSTR szPath = (LPTSTR)malloc(25*sizeof(TCHAR));
BOOL check = BrowseForFolder(hwnd,szCurrent,szPath);
if( check == TRUE)
{
    dlg.SetDlgItemTextW(IDC_EDIT1,szPath);
}

}

BOOL BrowseForFolder(HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath) { BROWSEINFO bi = { 0 }; LPITEMIDLIST pidl; TCHAR szDisplay[256]; 布尔值;

//CoInitialize();

bi.hwndOwner      = hwnd;
bi.pszDisplayName = szDisplay;
bi.lpszTitle      = TEXT("Please choose a folder.");
bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn           = BrowseCallbackProc;
bi.lParam         = (LPARAM) szCurrent;

pidl = SHBrowseForFolder(&bi);

if (NULL != pidl)
{
    retval = SHGetPathFromIDList(pidl, szPath);
    CoTaskMemFree(pidl);
}
else
{
    retval = FALSE;
}

if (!retval)
{
    szPath[0] = TEXT('\0');
}

CoUninitialize();
return retval;

} static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData) { // 如果收到 BFFM_INITIALIZED 消息 // 设置路径为起始路径。switch (uMsg) { case BFFM_INITIALIZED: { if (NULL != lpData) { SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); } } }

return 0; // The function should always return 0.

}

于 2009-11-28T04:20:14.827 回答