有个API函数,调用它就是弹出一个选择打开文件的对话框,选择了文件后就返回文件地址,这个函数是什么,怎么用? up 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用MFC提供的CFileDialog较为方便 BROWSEINFO binfo; binfo.hwndOwner = m_hWnd; binfo.pidlRoot = lpItemIdList; binfo.pszDisplayName = szSelectPath; binfo.lpszTitle = _T("Select Location:"); binfo.ulFlags = BIF_RETURNONLYFSDIRS; binfo.lpfn = NULL; binfo.lParam = 0; LPITEMIDLIST lpSelectedItemIdList = ::SHBrowseForFolder(&binfo); if( lpSelectedItemIdList ) { LPSHELLFOLDER lpshf; HRESULT hRs = SHGetDesktopFolder(&lpshf); if ( SUCCEEDED(hRs) ) { _GetFolderName(lpshf, lpSelectedItemIdList,SHGDN_FORPARSING, szSelectPath); lpshf->Release(); m_szPathSaveTo = szSelectPath; UpdateData(FALSE); } if( lpSelectedItemIdList ) { LPSHELLFOLDER lpshf; HRESULT hRs = SHGetDesktopFolder(&lpshf); if ( SUCCEEDED(hRs) ) { _GetFolderName(lpshf,lpSelectedItemIdList,SHGDN_FORPARSING,szSelectPath); lpshf->Release(); m_szPathSaveTo = szSelectPath; pdateData(FALSE); } }这个改一下: if( lpSelectedItemIdList ) { char szSelectPath[MAX_PATH]; SHGetPathFromIDList(lpSelectedItemIdList,(LPTSTR)szSelectPath); m_szPathSaveTo = szSelectPath; UpdateData(FALSE); } CFileDialog a(..);a.domomal(); 我在一个按扭的消息函数里面这样写:CFileDialog dlg( TRUE,_T("AVI"),_T("*.AVI"), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("Animation (*.AVI)|*.AVI|")); if( dlg.DoModal()==IDOK ) { CString m_cstrFileName = dlg.GetPathName(); UpdateData(FALSE); }vc编译报错:error C2512: 'CFileDialog' : no appropriate default constructor available不知道为什么? CFileDialog dlg(TRUE, NULL, NULL,OFN_OVERWRITEPROMPT, "txt files(*.txt)|*.txt|"); CFile file; if (IDOK==dlg.DoModal()) { CString szPath,str; szPath=dlg.GetFileName(); ::SetFileAttributes(szPath,FILE_ATTRIBUTE_NORMAL); file.Open(szPath,CFile::modeWrite | CFile::shareDenyNone); char szFilters[]="MyType Files (*.dwg)|*.dwg|All Files (*.*)|*.*||"; CFileDialog filedlg (TRUE, "dwg", "*.dwg", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); if(filedlg.DoModal()==IDOK) { CString strpath=filedlg.GetPathName(); } OPENFILENAME ofn; // common dialog box structurechar szFile[260]; // buffer for file nameHWND hwnd; // owner windowHANDLE hf; // file handle// Initialize OPENFILENAMEZeroMemory(&ofn, sizeof(OPENFILENAME));ofn.lStructSize = sizeof(OPENFILENAME);ofn.hwndOwner = hwnd;ofn.lpstrFile = szFile;ofn.nMaxFile = sizeof(szFile);ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";ofn.nFilterIndex = 1;ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;// Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); CString filename; static char BASED_CODE fliter[]="txt files(*.txt)|*.txt|all files(*.*)|*.*||"; CFileDialog dc(TRUE, "txt", NULL, NULL, fliter); dc.m_ofn.lpstrTitle="files open"; // 打开框的名字 if(dc.DoModal() == IDOK) { filename = dc.GetPathName(); MessageBox(filename); } 我把你们几个所有的各种代码都试了一遍,还是那个错误:error C2512: 'CFileDialog' : no appropriate default constructor available点击这个错误,光标跳到父对话框的建构函数处:CAddSubfunctionDlg::CAddSubfunctionDlg(CWnd* pParent /*=NULL*/) : CDialog(CAddSubfunctionDlg::IDD, pParent)是不是跟父对话框有关。我是在父对话框里加一个按扭,点击这个按扭的时候就出现那个选择文件的对话框。不知应该改哪个地方? 我也有类似的程序就可以呀SetDlg是一个CDialog派生的类void SetDlg::OnButtonLoadset() { CFileDialog f(TRUE,"*.txt","set",OFN_OVERWRITEPROMPT,"设置文件(*.ini)|*.ini||",NULL); //生成标准文件对话框 if(f.DoModal()==IDOK) { CString s=f.GetFileName(); LoadSettings(s); }} 获取控件窗口对象 下面这个函数是个自定义函数还是系统的,有什么特别的吗??谢谢!!! 如何使用WebBrowser获得一个网页的内容? 求助:在DLL中申请TIMER的问题!!! 一个对话框中如何对另一个对话框中的控件操作 com组件中可以实现MFC中的OnTimer机制吗? VC 用ADO 连接sql2000 数据库的串怎么写?在ADO 中能使用存储过程吗? 高手指点 要实现这样的时间矩形,我怎么实现,有没参考 派生CArray 怎样读取自定义资源my.txt内的信息(比如一系列的数据) 请问那里有《MFC Internals》电子版本下载
binfo.hwndOwner = m_hWnd;
binfo.pidlRoot = lpItemIdList;
binfo.pszDisplayName = szSelectPath;
binfo.lpszTitle = _T("Select Location:");
binfo.ulFlags = BIF_RETURNONLYFSDIRS;
binfo.lpfn = NULL;
binfo.lParam = 0; LPITEMIDLIST lpSelectedItemIdList = ::SHBrowseForFolder(&binfo); if( lpSelectedItemIdList )
{
LPSHELLFOLDER lpshf;
HRESULT hRs = SHGetDesktopFolder(&lpshf); if ( SUCCEEDED(hRs) )
{
_GetFolderName(lpshf, lpSelectedItemIdList,SHGDN_FORPARSING, szSelectPath); lpshf->Release(); m_szPathSaveTo = szSelectPath; UpdateData(FALSE);
}
{
LPSHELLFOLDER lpshf;
HRESULT hRs = SHGetDesktopFolder(&lpshf); if ( SUCCEEDED(hRs) )
{
_GetFolderName(lpshf,lpSelectedItemIdList,SHGDN_FORPARSING,szSelectPath); lpshf->Release(); m_szPathSaveTo = szSelectPath; pdateData(FALSE);
}
}这个改一下:
if( lpSelectedItemIdList )
{
char szSelectPath[MAX_PATH]; SHGetPathFromIDList(lpSelectedItemIdList,(LPTSTR)szSelectPath); m_szPathSaveTo = szSelectPath; UpdateData(FALSE);
}
a.domomal();
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("Animation (*.AVI)|*.AVI|")); if( dlg.DoModal()==IDOK )
{
CString m_cstrFileName = dlg.GetPathName();
UpdateData(FALSE);
}vc编译报错:
error C2512: 'CFileDialog' : no appropriate default constructor available不知道为什么?
"txt files(*.txt)|*.txt|");
CFile file;
if (IDOK==dlg.DoModal())
{
CString szPath,str;
szPath=dlg.GetFileName();
::SetFileAttributes(szPath,FILE_ATTRIBUTE_NORMAL);
file.Open(szPath,CFile::modeWrite | CFile::shareDenyNone);
CFileDialog filedlg (TRUE, "dwg", "*.dwg",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
if(filedlg.DoModal()==IDOK)
{
CString strpath=filedlg.GetPathName();
}
char szFile[260]; // buffer for file name
HWND hwnd; // owner window
HANDLE hf; // file handle// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;// Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
static char BASED_CODE fliter[]="txt files(*.txt)|*.txt|all files(*.*)|*.*||";
CFileDialog dc(TRUE, "txt", NULL, NULL, fliter);
dc.m_ofn.lpstrTitle="files open"; // 打开框的名字
if(dc.DoModal() == IDOK)
{
filename = dc.GetPathName();
MessageBox(filename);
}
还是那个错误:
error C2512: 'CFileDialog' : no appropriate default constructor available
点击这个错误,光标跳到父对话框的建构函数处:CAddSubfunctionDlg::CAddSubfunctionDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAddSubfunctionDlg::IDD, pParent)是不是跟父对话框有关。我是在父对话框里加一个按扭,点击这个按扭的时候
就出现那个选择文件的对话框。不知应该改哪个地方?
SetDlg是一个CDialog派生的类void SetDlg::OnButtonLoadset()
{
CFileDialog f(TRUE,"*.txt","set",OFN_OVERWRITEPROMPT,"设置文件(*.ini)|*.ini||",NULL);
//生成标准文件对话框
if(f.DoModal()==IDOK)
{
CString s=f.GetFileName();
LoadSettings(s);
}
}