我正在开发一个应用程序,我添加了一个调用SHBrowseForFolder()函数的按钮(CButton)。但问题是该按钮仍然处于活动状态,并且还允许我单击我的父窗口。我也可以反复点击那个按钮和多个浏览窗口。
我想知道有什么方法可以在DoModal()方式中使用SHBrowseForFolder(),这样控件就不会返回父窗口,直到用户点击文件夹浏览窗口的Ok / Cancel按钮为止?点击一次或类似之后,我不想禁用该按钮。
我正在使用Visual Studio 2010。 提前致谢。
答案 0 :(得分:2)
当然可以:
void CUtility::BrowseFolder(CWnd* pParentWnd, const CString& sTitle, CEdit& Edit)
{
LPMALLOC pMalloc = NULL;
::SHGetMalloc(&pMalloc);
TCHAR pBuffer[MAX_PATH] = {0};
LPITEMIDLIST pidlRoot = NULL;
BROWSEINFO bi;
bi.hwndOwner = pParentWnd->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = pBuffer;
bi.lpszTitle = sTitle;
bi.ulFlags = BIF_USENEWUI;
bi.lpfn = NULL;
if((pidlRoot = ::SHBrowseForFolder(&bi)) == NULL)
return;
if(::SHGetPathFromIDList(pidlRoot, pBuffer))
Edit.SetWindowText(pBuffer);
if(pidlRoot)
pMalloc->Free(pidlRoot);
}