如何使用C ++在MFC中显示文件夹对话框 [英] How t oshow folder dialog in MFC using C++(VS2010)

查看:107
本文介绍了如何使用C ++在MFC中显示文件夹对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我正在使用VS 2010 MFC(WindowXP)使用C ++.现在,当单击按钮浏览器"时,我想运行文件夹对话框(与C#相同).我发现了CFolderPickerDialog,但是它无法显示对话框,所以我可以选择所需的文件夹.

Hi All,

I am working with C++ using VS 2010 MFC(WindowXP). Now I want to opem folder dialog(the same in C#) when click on button "Browser". I found out CFolderPickerDialog but It can not display dialog so I can choose a folder which I need.

CFolderPickerDialog  fFolder("C:\\", 0,NULL,0);
fFolder.DoModal()




请帮帮我.





Please help me.


thanks in advance.

推荐答案

看看

可能此链接会为您提供帮助:)


[ ^ ]

谢谢
May be this link will help you :)


[^]

Thanks


我的解决方案:
my solution:
inline static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData)
{
  // If the BFFM_INITIALIZED message is received
  // set the path to the start path.
  switch (uMsg)
  {
    case BFFM_INITIALIZED:
    {
      if (NULL != lpData)
      {
        SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
      }
    }
  }
  return 0; // The function should always return 0.
}


/*--------------------------------------------------------------------*/
/*  BrowseForFolder                                                   */
/*--------------------------------------------------------------------*/
/**
 *  @brief   open a folder dialog to choose folder
 *
 *  @param   HWND                 [in] is the parent window.
 *           szCurrent            [in] is an optional start folder. Can be NULL.
 *           szPath               [in] receives the selected path on success. Must be MAX_PATH characters in length.
 *
 *  @return  TRUE: open and return folder path which is choosed
 *           FALSE: can't open
 */
inline BOOL BrowseForFolder(HWND hwnd, LPCTSTR szCurrent, LPTSTR szPath)
{
 
  BROWSEINFO   bi = { 0 };
  LPITEMIDLIST pidl;
  TCHAR        szDisplay[MAX_PATH];
  BOOL         retval;

  CoInitialize(NULL); 
  if(szPath == NULL){
    szPath = szDisplay;
  }  
  bi.hwndOwner      = hwnd;
  bi.pszDisplayName = szDisplay;
  bi.lpszTitle      = TEXT("フォルダを選択してください。");
  bi.ulFlags        = BIF_RETURNONLYFSDIRS;
  bi.lpfn           = BrowseCallbackProc;
  bi.lParam         = (LPARAM) szCurrent; 
  // open browser folder dialog
  pidl = SHBrowseForFolder(&bi);
  if (NULL != pidl)
  {
    // get folder path
    retval = SHGetPathFromIDList(pidl, szPath);
    CoTaskMemFree(pidl);
  }
  else
  {
    retval = FALSE;
  }
  if (!retval)
  {
    szPath[0] = TEXT('\0');
  }
  CoUninitialize();
  return retval;
}


这篇关于如何使用C ++在MFC中显示文件夹对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆