以下是在vs2008中编译通过的代码,代码注释详细。要实现的功能是点击“浏览”按钮,即弹出选择文件夹的对话框。并将选择的文件夹或文件路径显示在MessageBox中。
void CMFC_TrojanKillerDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码BROWSEINFO bi; //BROWSEINFO结构有很多成员参数可以自己设置ZeroMemory(&bi,sizeof(BROWSEINFO)); //将以&bi为起始地址,大小为sizeof(BROWSEINFO)的内存区域用0填充//bi.ulFlags=BIF_BROWSEINCLUDEFILES; //设置弹出的对话框属性。此处意思为包含文件。如果不设这个值,默认的是只有文件夹。ulFlags还可以定义很多别的属性//bi.ulFlags=BIF_NEWDIALOGSTYLE; //窗口可以调整大小,有新建文件夹按钮//bi.lpszTitle=L"指定要处理的文件夹"; //在窗口内显示提示用户的语句LPITEMIDLIST pidl = SHBrowseForFolder(&bi); //Displays a dialog box enabling the user to select a Shell folder.TCHAR * path = new TCHAR[MAX_PATH];if(pidl != NULL){SHGetPathFromIDList(pidl,path); //Converts an item identifier list to a file system pathMessageBox(path);}
}
显示文件夹窗口默认显示效果:
加上语句bi.ulFlags=BIF_BROWSEINCLUDEFILES;后不仅可以显示文件夹,还可以显示文件:
加上语句bi.ulFlags=BIF_NEWDIALOGSTYLE;后窗口可以调整大小,并有新建文件夹按钮:
加上语句bi.lpszTitle=L"指定要处理的文件夹"; 后在窗口内显示提示用户的语句:
随意选择一个文件,弹出MessageBox显示文件全路径: