我在单文档程序APP类中创建CFILEDIALOG类后,可以显示文件列表了,但是我不能在CFILEDIALOG窗口中打开文件,
下面是部分代码
void CDataDisplayApp::OnFileOpen()
{
CFileDialog fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"工作表(*.xls)|*.xls|文本文件(*.txt)|*.txt||",NULL);
fileDlg.m_ofn.lpstrInitialDir = "..\\hisdata";
fileDlg.DoModal();
}
我想打.txt .xls文件,但是怎么调用excel和notepad呢
下面是部分代码
void CDataDisplayApp::OnFileOpen()
{
CFileDialog fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"工作表(*.xls)|*.xls|文本文件(*.txt)|*.txt||",NULL);
fileDlg.m_ofn.lpstrInitialDir = "..\\hisdata";
fileDlg.DoModal();
}
我想打.txt .xls文件,但是怎么调用excel和notepad呢
CString name=fileDlg.GetPathName();来获取文件名字,然后CFile f;
f.Open(name,CFile::modeRead);
....打开文件和显示文件。
LZ试试看这个
fileDlg.GetFileName(),
"","",1);要保证fileDlg.GetFileName()得到的文件路径和文件名都是争取用的如:"C:\Windows\1.txt"
CreateProcess(NULL,"D:\\office 2003\\OFFICE11\\EXCEL.EXE H:\\hisdata\\xls\\2009-8-24.xls", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
可以打开excel文件,但是是用的绝对路径,请问如何用相对路径呢
参考我的文章: ::GetModuleFileName函数的一个妙用
CString name=fileDlg.GetPathName();来获取文件名字,然后 CFile f;
f.Open(name,CFile::modeRead);
....
CreateProcess(NULL,"D:\\office 2003\\OFFICE11\\EXCEL.EXE H:\\hisdata\\xls\\2009-8-24.xls", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); 两种方式应该都可以吧
void CDataDisplayApp::OnFileOpen()
{
DWORD fileTypeIndex;
CString fileName;
HKEY hKey;
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 要打开的根键
"SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\APP PATHS\\EXCEL.EXE", // 要打开的子子键
0, // 这个一定要为0
KEY_QUERY_VALUE, // 指定打开方式,此为读
&hKey) !=ERROR_SUCCESS )
AfxMessageBox("查找可执行程序路径失败");
DWORD valueLen = MAX_PATH;
char value[MAX_PATH];
if( RegQueryValueEx(hKey, // 打开注册表时返回的句柄
"Path", //要查询的名称,qq安装目录记录在这个保存
NULL, // 一定为NULL或者0
NULL,
(LPBYTE)value, // 返回path的键值,也就是应用程序路径
&valueLen) )
AfxMessageBox("得到可执行程序路径失败");
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
PROCESS_INFORMATION pi;
CFileDialog fileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"工作表(*.xls)|*.xls|文本文件(*.txt)|*.txt||",NULL);
fileDlg.m_ofn.lpstrInitialDir = "..\\hisdata";
if( fileDlg.DoModal() == IDOK )
{
fileTypeIndex = fileDlg.m_ofn.nFilterIndex;
fileName = fileDlg.GetPathName();
switch(fileTypeIndex)
{
case 1:
{
strcat(value,"\excel.exe ");
strcat(value,fileName.GetBuffer(0));
CreateProcess(NULL,value,
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
break;
}
case 2:
{
char string[80];
strcpy( string, "notepad " );
strcat(string,fileName.GetBuffer(0));
CreateProcess(NULL,string,
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
break;
}
}
}
}