我想做出的效果是 : 有一个我之前作好的程序1.exe.当按下按键的时候,就创建进程运行命令"1.exe 路径及文件名".当路径及文件名确定时,如"1.EXE 2.TXT",已经可以实现.但我想不确定文件名,而是打开哪个文档哪个就是文件.现在的问题是,当用CEditView的ID_FILE_OPEN打开一个文本文档后,如何获得此文档的文件名或者路径,可以让我在另一个VIEW里调用??
谢谢!!
后续:
我在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-4-24 10:26:02编辑过]