如何使用C ++在MFC中显示文件夹对话框 [英] How t oshow folder dialog in MFC using C++(VS2010)
本文介绍了如何使用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屋!
查看全文