MFC中使用BROWSEINFO来选择文件夹的问题

voidCUserInterfaceDlg::OnBnClickedOpenButton(){//TODO:在此添加控件通知处理程序代码CStringsFolderPat... void CUserInterfaceDlg::OnBnClickedOpenButton()
{
// TODO: 在此添加控件通知处理程序代码
CString sFolderPath;

BROWSEINFO bi;

TCHAR Buffer[MAX_PATH];
// int m = 0;
//LPWSTR Buffer = NULL;

//初始化入口参数bi开始

bi.hwndOwner = NULL;

bi.pidlRoot = NULL;//初始化制定的root目录很不容易,

// bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示对话框
bi.lpszTitle = _T("请选择一个文件夹:");

bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;//包括文件

bi.lpfn = NULL;

bi.iImage = IDR_MAINFRAME;

//初始化入口参数bi结束

LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框

if (pIDList)

{

SHGetPathFromIDList(pIDList, Buffer);
// m = strlen(Buffer);

//取得文件夹路径到Buffer里

sFolderPath = Buffer;//将文件夹路径保存在一个CString对象里
// std::cout<<sFolderPath;
SetDlgItemText(IDC_EDIT1, sFolderPath);

}

LPMALLOC lpMalloc;

if (FAILED(SHGetMalloc(&lpMalloc)))

return;

lpMalloc->Free(pIDList);

lpMalloc->Release();

// MessageBox(sFolderPath,(LPCTSTR)"Title",MB_OK);

}

上面是打开文件夹按钮的响应函数,下面是初始化

CUserInterfaceDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
}

// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}

为什么一点打开,INT_PTR nResponse = dlg.DoModal();就读取位置 0xCCCCCCCC 时发生访问冲突。
展开
 我来答
veket的小号
2014-06-23 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3999万
展开全部

送你一份 宝典残招 


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式