char lpszPath[MAX_PATH];
BROWSEINFO sInfo;
LPITEMIDLIST lpidlBrowse;
::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
lpidlBrowse = ::SHBrowseForFolder(&sInfo);
if(lpidlBrowse != NULL)
{
if(::SHGetPathFromIDList(lpidlBrowse,lpszPath)) //取得文件夹名
{
m_Edit = lpszPath;
UpdateData(false);
}
}
用这种式法可以打开一个选择文件夹的对话框,但是这个窗体不是DoModal的,在打开了这个窗体之后,还是可以点击主窗体上的控件.
怎样才能让这个窗体以DoModal的方式显示呢?

解决方案 »

  1.   

    因为其打开的是Shell中的对话框,没办法的,自已弄个相似的类?
      

  2.   

    这是因为你未为其指定父窗口,那么其父窗口就是桌面了,所以:
    ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
    sInfo.hwndOwner=GetSafeHwnd();
    lpidlBrowse = ::SHBrowseForFolder(&sInfo);
      

  3.   

    我试过DentistryDoctor(雅克医生(潜心修内功,向各位大师取经了)) 的方法,可以。楼主,你自己试试吧!
      

  4.   

    调用前加上:
    sInfo.hwndOwner = ::AfxGetApp()->GetMainWnd()->m_hWnd;
      

  5.   

    ^_^网上不少文件选择目录对话框,都是DOMODAL的,SHELL编程不懂了,学习一下http://community.csdn.net/Expert/topic/3001/3001636.xml?temp=9.656924E-02