不使用 mfc 怎么使用 GetOpenFileName 打开多个文件 我已经知道加上 OFN_ALLOWMULTISELECT 就可以选择多个文件在返回文件名时 如果选择一个文件 就返回完整路径 如果选择多个返回目录名 要怎么取得已选择的全部文件名?MFC 的列子已经知道。SDK 下没有 MFC 的 GetStartPosition请给出相应代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SDK有FindFirstFile、FindNextFile、GetFileSize、GetFileTime、GetFullPathName等File Management Functions。你可以参考一下MSDN LRESULT OpenMultiFiles(HWND hwnd){ OPENFILENAME ofn; static TCHAR szFileName[8192]; // String buffer especially for OFN_ALLOWMULTISELECT strcpy(szFileName, "d:\\*.*"); static TCHAR szFilter[] = _T("文本文件(*.TXT, *txt)\0*.TXT\0*.txt\0\0"); static TCHAR szTitle[] = _T("OPEN"); ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = NULL; ofn.lpstrFilter = szFilter; ofn.nFilterIndex = 1; ofn.lpstrFile = szFileName; ofn.nMaxFile = sizeof(szFileName); ofn.lpstrFileTitle = NULL; ofn.lpstrTitle = szTitle; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER; if (GetOpenFileName(&ofn)) { LPTSTR psz = ofn.lpstrFile + ofn.nFileOffset; psz[-1] = _T('\\'); // 得到所有文件 while (*psz != 0) { int len = _tcslen(psz); _tcscpy(ofn.lpstrFile + ofn.nFileOffset, psz); psz += len + 1; // char szFile[MAX_PATH]; strcpy(szFile, ofn.lpstrFile); } } return 0;} strcpy 好象有问题 我用 Unicode修改为 也有问题。StrCpy 参考 MFC 的示例和 MFC 的源码就很容易得到了 OPENFILENAME ofn; TCHAR str[32000]; TCHAR szFile[10000]; TCHAR *p; TCHAR Name[MAX_PATH]; TCHAR szTmp[MAX_PATH]; int i=1; _tcscpy(szFile, _T("")); ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = _T("*.*\0*.*\0"); ofn.nMaxFile = 10000; ofn.lpstrFile = szFile; ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER; if (GetOpenFileName(&ofn)) { p=szFile; _tcscpy(Name, p); if (*(p+_tcslen(Name)+1)==0) { wsprintf(str,_T("%s"),Name); } else { wsprintf(str,_T("%s\r\n\r\n"), Name); for (;;) { p=p+_tcslen(Name)+1; if (*p==0) break; _tcscpy(Name,p); wsprintf(szTmp,_T("%d文件 = %s \r\n"),i++,Name); _tcscat(str,szTmp); } } MessageBox(hWnd,str,_T("完毕"),MB_OK); }可以帮我优化一下吗? void GetOpenFileName_sample(){ TCHAR str[320000] = {0}; TCHAR szFile[MAX_PATH+1024]; TCHAR *p = NULL; TCHAR Name[MAX_PATH]; TCHAR szTmp[MAX_PATH]; int i=1; memset(szFile,0, sizeof(szFile)); OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = NULL; ofn.lpstrFilter = _T("*.*\0*.*\0"); ofn.nMaxFile = sizeof(szFile)/sizeof(szFile[0]); ofn.lpstrFile = szFile; ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER; if (GetOpenFileName(&ofn)) { p=szFile; } TCHAR dir_buf[MAX_PATH+1024]; if(p && p[0]) { _tcscpy(dir_buf,p); p = p + _tcslen(dir_buf)+1; if(!p[0]) { _tprintf(_T("only 1 file is selected:%s\n"),dir_buf); } else _tcscat(dir_buf,_T("\\")); } while(p && p[0]) { _tcscpy(Name, p); _tcscat(str,dir_buf); _tcscat(str,Name); _tcscat(str,_T("\n")); p = p + _tcslen(Name)+1; } _tprintf(_T("%s"),str);} masterz 回归了??高兴。(听说曾经是vc的最强人)搂住艳福不浅啊 __重大问题__窗口标题问题create,findwindow? 框架底端 加 几个 static 条 并且能根据需要在static里显示文字 该怎么做? 哎,别让你的员工都成为拥有高学历的精神病人!!!!!!! 小弟请求xdjm帮帮忙? 怎么把别的项目中相同的对话框导入到程序中? 请问如何判断一个CString变量是否为实数? 内存映像文件与视图。 请教 MFC ActiveX 与JS对象交互问题——怎么将JS对象传入ActiveX组件事件处理函数中? 怎么显示右键弹出菜单? 如何复制当前运行的文件? !!用MFC写一个通讯录的问题 请问各位高手我的程序出现内存溢出要如何解决那?
{
OPENFILENAME ofn;
static TCHAR szFileName[8192]; // String buffer especially for OFN_ALLOWMULTISELECT
strcpy(szFileName, "d:\\*.*");
static TCHAR szFilter[] = _T("文本文件(*.TXT, *txt)\0*.TXT\0*.txt\0\0");
static TCHAR szTitle[] = _T("OPEN");
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = szFilter;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = sizeof(szFileName);
ofn.lpstrFileTitle = NULL;
ofn.lpstrTitle = szTitle;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST
| OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if (GetOpenFileName(&ofn)) {
LPTSTR psz = ofn.lpstrFile + ofn.nFileOffset;
psz[-1] = _T('\\');
// 得到所有文件
while (*psz != 0) {
int len = _tcslen(psz);
_tcscpy(ofn.lpstrFile + ofn.nFileOffset, psz);
psz += len + 1;
//
char szFile[MAX_PATH];
strcpy(szFile, ofn.lpstrFile);
}
}
return 0;
}
StrCpy
TCHAR str[32000];
TCHAR szFile[10000];
TCHAR *p;
TCHAR Name[MAX_PATH];
TCHAR szTmp[MAX_PATH];
int i=1;
_tcscpy(szFile, _T(""));
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = _T("*.*\0*.*\0");
ofn.nMaxFile = 10000;
ofn.lpstrFile = szFile;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST
| OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if (GetOpenFileName(&ofn)) {
p=szFile;
_tcscpy(Name, p); if (*(p+_tcslen(Name)+1)==0) {
wsprintf(str,_T("%s"),Name);
} else {
wsprintf(str,_T("%s\r\n\r\n"), Name); for (;;) {
p=p+_tcslen(Name)+1;
if (*p==0)
break;
_tcscpy(Name,p);
wsprintf(szTmp,_T("%d文件 = %s \r\n"),i++,Name);
_tcscat(str,szTmp);
}
}
MessageBox(hWnd,str,_T("完毕"),MB_OK);
}可以帮我优化一下吗?
{
TCHAR str[320000] = {0};
TCHAR szFile[MAX_PATH+1024];
TCHAR *p = NULL;
TCHAR Name[MAX_PATH];
TCHAR szTmp[MAX_PATH];
int i=1;
memset(szFile,0, sizeof(szFile));
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = _T("*.*\0*.*\0");
ofn.nMaxFile = sizeof(szFile)/sizeof(szFile[0]);
ofn.lpstrFile = szFile;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST
| OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if (GetOpenFileName(&ofn))
{
p=szFile;
}
TCHAR dir_buf[MAX_PATH+1024];
if(p && p[0])
{
_tcscpy(dir_buf,p);
p = p + _tcslen(dir_buf)+1;
if(!p[0])
{
_tprintf(_T("only 1 file is selected:%s\n"),dir_buf);
}
else
_tcscat(dir_buf,_T("\\"));
}
while(p && p[0])
{
_tcscpy(Name, p);
_tcscat(str,dir_buf);
_tcscat(str,Name);
_tcscat(str,_T("\n"));
p = p + _tcslen(Name)+1;
}
_tprintf(_T("%s"),str);
}