浏览文件夹对话框,演示SHBrowseForFolder用法

image
/********************************************************************
  created:  2008/04/24
  created:  24:4:2008   12:47
  author:    Gohan
                http://feed.feedsky.com/gohan
  purpose:  演示SHBrowseForFolder用法
*********************************************************************/
#include <Windows.h>
#include <ShlObj.h>
int main()
{
   
BROWSEINFO bi;
   
ZeroMemory(&bi,sizeof(BROWSEINFO));
   
LPMALLOC pMalloc;
   
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
   
TCHAR * path = new TCHAR[MAX_PATH];
   
if(pidl != NULL)
    {
       
SHGetPathFromIDList(pidl,path);
       
MessageBox(NULL,path,TEXT(“Choose”),MB_OK);
       
if(SUCCEEDED(SHGetMalloc(&pMalloc)))//pidl指向的对象用完应该释放,之前忽略了
        {
           
pMalloc->Free(pidl);
           
pMalloc->Release();
        }
    }
   
else
    {
       
MessageBox(NULL,TEXT(选择为空”),TEXT(“Choose”),MB_OK);
    }
   
delete path;//谢谢true的提醒,以后我一定会更加慎重
}

This entry was posted in other. Bookmark the permalink.

16 Responses to 浏览文件夹对话框,演示SHBrowseForFolder用法

  1. true says:

    TCHAR * path = new TCHAR[MAX_PATH];

    delete path;

  2. Z_song says:

    正好要用,感谢中。。。

  3. wangyucao says:

    你也很努力啊!!呵呵

  4. ershu says:

    delete [] path;

    好好学习吧

  5. Gohan says:

    @ershu
    朋友,针对字符串,delete []与delete是等价的(至少在目前的VC++下)。这点我是学习过的,至于动态开的数组则必须加[]

  6. hoodlum1980 says:

    放在你这里,delete不加也可以,因为你的程序马上就要退出了,这个进程中申请的内存也就会被系统给收回。但是如果你的程序还在运行,则最好自己管理号自己的内存。

  7. Gohan says:

    @hoodlum1980
    对的,养成好的编程习惯,:)

  8. tmp says:

    MessageBox(NULL,TEXT("),TEXT("Choose"),MB_OK);

    这里少了个引号,呵呵

  9. Gohan says:

    @tmp
    呵呵,谢谢你,你很细心,我用一个叫code2html的程序把code转成html,它有点bug,有中文字符串会丢掉引号:),已改正

  10. ailee says:

    正好要用,谢了.

  11. 过客001 says:

    很好,。可以用的,谢谢楼主的资料。
    能否在文章中做个连接
    连接到可以选定文件而不只是文件夹的代码吗

  12. Naran says:

    受益了 谢谢了

  13. HotSoftG says:

    CAutoPtr<TCHAR> path(new TCHAR[MAX_PATH]);

  14. Gohan says:

    @HotSoftG
    自销毁的智能指针确实更易用

  15. YiLi says:

    MAX_PATH是常量, 所以这里不一定非要new

    直接TCHAR path[MAX_PATH];这样也是没有问题的

  16. 企业即时通讯 says:

    受益了,很好。

Leave a Reply