| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2813 人关注过本帖
标题:如何获取用CWinApp::OnFileOpen()打开的文件的路径或文件名??
只看楼主 加入收藏
leadsky
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-22
收藏
 问题点数:0 回复次数:4 
如何获取用CWinApp::OnFileOpen()打开的文件的路径或文件名??
已经做的工作:我APPWIZARD建立的SDI,最后一步的VIEW选的CEditView,以及拆分窗口,右边填加一个CFormView,enum上一个对话框,此对话框上一个按键.用"文件->打开"已经可以打开文本文档在那个CEditView里.
我想做出的效果是 : 有一个我之前作好的程序1.exe.当按下按键的时候,就创建进程运行命令"1.exe 路径及文件名".当路径及文件名确定时,如"1.EXE 2.TXT",已经可以实现.但我想不确定文件名,而是打开哪个文档哪个就是文件.现在的问题是,当用CEditView的ID_FILE_OPEN打开一个文本文档后,如何获得此文档的文件名或者路径,可以让我在另一个VIEW里调用??


谢谢!!
搜索更多相关主题的帖子: CWinApp OnFileOpen 文件名 路径 获取 
2006-04-22 17:00
leadsky
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-22
收藏
得分:0 

后续:
我在CMyDoc里重载了OnOpenDocument(LPCTSTR lpszPathName) 如下:
BOOL CSimulatorDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;


pfile=lpszPathName; //pfile 是一个在CMyDoc里定义的Public CString

return TRUE;
}

后来我在把这个pfile 用在那个命令里:
void CMygoView::OnRunButton()
{
.........
CMyDoc Doc;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));
// TODO: Add your control notification handler code here
CreateProcess(
"1.exe",Doc.pfile,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}会有错误,大致意思是CreateProcess不能把一个const *char变成一个char*

后来我用别的办法.就是想先把打开的文件弄到一个临时文件tmp.s里:
void cMygoView::OnRunbutton()
{

CSimulatorDoc Doc;
ifstream infile(Doc.pfile);
fstream outfile;
outfile.open("tmp.s",ios::out|ios::trunc);
char data[1];
while(1) {
infile.read(data,1);

if (infile.eof())
{
break;
}
outfile<<data[0];

}
infile.close();
outfile.close();//然后在新建进程
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi,sizeof(pi));

CreateProcess(
NULL, "assembler.exe tmp.s",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

}

编译没有错误,但是运行进程的时候,还是不行,tmp.s和源文件根本不一样,(tmp.s里全是"烫").



我不知道错在什么地方了.C++以前本科的时候学过,但是不精,MFC更是刚刚接触,谢谢大家帮帮我.

我就是想让CWinApp::OnFileOpen()打开的文件的文件可以用在"1.exe 文件名"这个命令里.有什么办法吗?

再次感谢!!

2006-04-22 17:15
bfgghy
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2006-3-25
收藏
得分:0 

肯定有问题了!
你用CMyDoc声明了文档类的实例Doc,但这个实例根本就不是你应用程序的当前文档类实例,两者只是类型一样而已。

你应该这样声明:
CMyDoc* pDoc;
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSToolDoc)));
pDoc = (CMyDoc*)m_pDocument;

其中,m_pDocument是视图类的成员变量,它是一个CDocument类指针,指向当前与视图相关联的文档类对象。

[此贴子已经被作者于2006-4-23 16:53:35编辑过]

2006-04-23 16:51
leadsky
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-22
收藏
得分:0 
谢谢楼上的回答,我按你的方法写下,但是compile有错。如下:

CMyDoc pDoc;
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
pDoc = (CMyDoc*)m_pDocument; //error C2582: 'CMyDoc' : 'operator =' function is unavailable

如果
CMyDoc* pDoc;
那么就会在下面出现pDoc.pfile的时候报错 //error C2228: left of '.pfile' must have class/struct/union type

[此贴子已经被作者于2006-4-24 10:26:02编辑过]

2006-04-24 09:23
leadsky
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-4-22
收藏
得分:0 
谢谢了
我搞定了~~~~

CSimulatorDoc Doc;
CSimulatorDoc *pDoc = &Doc;

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSimulatorDoc)));
pDoc = (CSimulatorDoc*)m_pDocument;
后面调用(*pDoc).pfile就是路径了
2006-04-24 14:44
快速回复:如何获取用CWinApp::OnFileOpen()打开的文件的路径或文件名??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019431 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved