zoukankan      html  css  js  c++  java
  • [MFC]设置文件夹目录时遇到的问题


    前言

      关键字:SHBrowseForFolder、SHGetPathFromIDList

      问题很菜,在网上找了一段想当然的代码改吧改吧,结果报错了,甚至都不知道错哪里,调试也没法跟踪。

    正文

      一、问题代码

        CString szPath;
        BROWSEINFO bi;   
        bi.hwndOwner 
    = m_hWnd;
        bi.pidlRoot 
    = NULL;   
        bi.pszDisplayName 
    = szPath.GetBuffer();   
        bi.lpszTitle 
    =L"请选择目录:";   
        bi.ulFlags 
    = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; 
        bi.lpfn 
    = NULL;   
        bi.lParam 
    = 0;   
        bi.iImage 
    = 0;   
        
    //弹出选择目录对话框
        LPITEMIDLIST lp = SHBrowseForFolder(&bi);   
        
    if(lp && SHGetPathFromIDList(lp, szPath.GetBuffer()))   
            AfxMessageBox(szPath);
        
    else   
            AfxMessageBox(L
    "无效的目录,请重新选择");


      二、报错截图

       


      三、解决错误

        TCHAR szPath[MAX_PATH];
        BROWSEINFO bi;   
        bi.hwndOwner = m_hWnd;
        bi.pidlRoot = NULL;   
        bi.pszDisplayName = szPath;   
        bi.lpszTitle =L"请选择目录:";   
        bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; 
        bi.lpfn = NULL;   
        bi.lParam = 0;   
        bi.iImage = 0;   
        
    //弹出选择目录对话框
        LPITEMIDLIST lp = SHBrowseForFolder(&bi);   
        
    if(lp && SHGetPathFromIDList(lp, szPath))   
            AfxMessageBox(CString(szPath));
        
    else   
            AfxMessageBox(L"无效的目录,请重新选择");

        说明:把CString改成了TCHAR数组。

    结束语

      折腾很久,搜了老半天,最后把修改前的代码和修改后的代码比较了一下,才猜想出来。

  • 相关阅读:
    libevent中的bufferevent原理
    libevent中的事件机制
    libevent中数据缓冲区buffer分析
    libevent中最小堆实现算法解析
    我眼中的WebViewJavascriptBridge(图解)
    Tinyhttpd精读解析
    app微信支付的集成步骤
    java工厂模式的测试
    java Annotation 注解的使用
    android 连接蓝牙打印机 BluetoothAdapter
  • 原文地址:https://www.cnblogs.com/over140/p/1738880.html
Copyright © 2011-2022 走看看