用VC++如何实现一个目录选择的浏览按钮
用VC++如何实现一个目录选择的浏览按钮(如选择软件的安装路径)
追问:
弹出这样的效果,只要选择到相应的路径就可以了!谢谢!不胜感激!
用VC++如何实现一个目录选择的浏览按钮(如选择软件的安装路径)
追问:
弹出这样的效果,只要选择到相应的路径就可以了!谢谢!不胜感激!
答案:
void CDialog1::OnButton1() {// TODO: Add your control notification handler code hereCString sFolderPath;BROWSEINFO bi;char Buffer[MAX_PATH + 1100];//memset(&bi,0,sizeof BROWSEINFO); //memset(Buffer,0,MAX_PATH+1000);//char Buffer[MAX_PATH + 100];//初始化入口参数bi开始bi.hwndOwner = NULL;bi.pidlRoot =NULL;//初始化制定的root目录--------很不容易bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示对话框bi.lpszTitle = "请选择查找目录";//bi.ulFlags = BIF_BROWSEINCLUDEFILES;//包括文件//bi.ulFlags=BIF_RETURNONLYFSDIRS; //bi.ulFlags = BIF_EDITBOX;//包括文件夹bi.lpfn = NULL;bi.iImage=IDR_MAINFRAME;//初始化入口参数 bi 结束 LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框if(pIDList){SHGetPathFromIDList(pIDList, Buffer);//取得文件夹路径到 Buffer里sFolderPath = Buffer;//将文件夹路径保存在一个CString对象里SetDlgItemText(IDC_EDIT1,sFolderPath); }
}直接调用文件浏览控件是最好的方法,方法如下:OPENFILENAME ofn;WCHAR szPatNameofn.hwndOwner=hwnd;ofn.lpstrFilter=TEXT("*.*");lstrcpy(szPatName,TEXT("*.*"));ofn.nMaxFile=_countof(szPatName);ofn.lpstrFile=szPatName;ofn.lpstrTitle=TEXT("请选择要Copy的文件");ofn.Flags=OFN_EXPLORER | OFN_FILEMUSTEXIST;BOOLfOK=GetOpenFileName(&ofn);if(fok){ 用户选择了路径,路径存储在szPathName里。}添加一个摁扭命名为open,再加上如下代码:
void COpenDlg::Onopen()
{
OPENFILENAME ofn;
char szFile[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = TEXT('\0');
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "Mp3 File(*.mp3)\0*.mp3\0Wma File(*.wma)\0*.wma\0Video File(*.dat)\0*.dat\0Wave File(*.wav)\0*.wav\0AVI File(*.avi)\0*.avi\0Movie File(*.mov)\0*.mov\0Media File(*.mmm)\0*.mmm\0Mid File(*.mid;*,rmi)\0*.mid;*.rmi\0MPEG File(*.mpeg)\0*.mpeg\0All File(*.*)\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn))
{
ShellExecute(NULL,"open",ofn.lpstrFile,NULL,NULL,SW_SHOWNORMAL);
}
// TODO: Add your control notification handler code here
}