这个方法的目的就是通过打开文件对话框来打开文件,并显示到文档上,这是一个MFC的单文档程序,初学VC,摆求大家帮帮忙
编译没有错误,运行程序后在执行到打开文件显示试报错(内存不能READ)
void CWin32Test21App::OnFileOpen()
{
//CWinApp::OnFileOpen();
CFileDialog *fd=new CFileDialog(true);
fd->DoModal();
CString filename=fd->GetPathName();
HANDLE hFile=CreateFile(filename,GENERIC_READ,0,NULL,OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS|SECURITY_ANONYMOUS,NULL);
if(hFile==NULL)
return;
const int buffersize=2048;
DWORD readsize=0;
char buffer[buffersize];
ReadFile(hFile,buffer,buffersize/2,&readsize,NULL);
LPPAINTSTRUCT ps;
CMainFrame * cf;
CView * cv=cf->GetActiveView();
CDC * cdc=cv->BeginPaint(ps);
CDC * cdc=cv->GetDC();
cdc->TextOut(0,0,buffer);
cv->EndPaint(ps);
}
编译没有错误,运行程序后在执行到打开文件显示试报错(内存不能READ)
void CWin32Test21App::OnFileOpen()
{
//CWinApp::OnFileOpen();
CFileDialog *fd=new CFileDialog(true);
fd->DoModal();
CString filename=fd->GetPathName();
HANDLE hFile=CreateFile(filename,GENERIC_READ,0,NULL,OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS|SECURITY_ANONYMOUS,NULL);
if(hFile==NULL)
return;
const int buffersize=2048;
DWORD readsize=0;
char buffer[buffersize];
ReadFile(hFile,buffer,buffersize/2,&readsize,NULL);
LPPAINTSTRUCT ps;
CMainFrame * cf;
CView * cv=cf->GetActiveView();
CDC * cdc=cv->BeginPaint(ps);
CDC * cdc=cv->GetDC();
cdc->TextOut(0,0,buffer);
cv->EndPaint(ps);
}
解决方案 »
- 散分,09年的最后一天,我们即将迈入了10年代
- 如何修改本机的IP,谢了
- 那里可以下载《深度探索 C++ 对象模型 》
- 点击窗口中的按钮,弹出一个指定网址的网页,但是现在有个问题,如果当前浏览器是启动的,不会新建,而是更新原来的网页。该怎么办呢?
- 关于CFileFind类的问题
- 看书看不明白的地方,谁能解释一下,能让我还能对学习VC有点信心?
- 如何像键盘发送一个消息,相当于鼠标按下操作
- 利用Socket多线程传输大文件,我搞不定啊!(会不断加分)
- 请教 CDatabase::Open() 和 CDatabase::OpenEx()的区别
- 关于鸡啄米的第十二章非模态对话框的创建与显示的问题
- 显示文件内容出错
- 有错误,未解决
为什么要动态创建呢?CFileDialog fd(TRUE,"*.exe",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Exe files(*.exe)|*.exe|All files (*.*)|*.*||");
fd.DoModal();
就可以了。
if(hFile==NULL)
return; 这句不对, 应该是
if(hFile == INVALID_HANDLE_VALUE)2. ReadFile 对字符串不会加结束标记 '\0', (需要自己加)
TextOut(0,0,buffer); 时就会越界, (内存不能READ)
buffer[1024]='\0';
cdc->TextOut(0,0,buffer,1024);还是报错,调试时发现错误在:
cdc->TextOut(0,0,buffer,1024);
错误是: Access Violation.
该怎么解决啊?