mfc中利用Onopendocument完成文件的打開與讀取
时间: 2024-02-11 10:07:45 浏览: 32
在 MFC 中,我们可以通过重写 `CWinApp` 类的 `OnOpenDocument` 方法来实现文件的打开和读取。下面是一个简单的示例代码:
首先,在你的应用程序类中添加如下代码:
```c++
class CMyApp : public CWinApp {
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
private:
void OpenDocumentFile(LPCTSTR lpszFileName);
};
```
在 `CMyApp` 类的实现文件中,添加如下代码:
```c++
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
ON_COMMAND(ID_FILE_OPEN, &CMyApp::OpenDocumentFile)
END_MESSAGE_MAP()
BOOL CMyApp::InitInstance() {
// ...
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// ...
return TRUE;
}
int CMyApp::ExitInstance() {
// ...
return CWinApp::ExitInstance();
}
void CMyApp::OpenDocumentFile(LPCTSTR lpszFileName) {
CFile file;
if (file.Open(lpszFileName, CFile::modeRead)) {
// 打开文件成功
int nFileSize = (int)file.GetLength(); // 获取文件大小
char* pData = new char[nFileSize + 1];
file.Read(pData, nFileSize); // 读取文件内容
pData[nFileSize] = '\0';
CString strData(pData);
// 在这里处理文件内容
delete[] pData;
file.Close(); // 关闭文件
}
else {
// 打开文件失败
}
}
```
在上面的代码中,我们重写了 `CWinApp` 类的 `OnOpenDocument` 方法,并在应用程序类的消息映射中添加了 `ID_FILE_OPEN` 命令的处理函数 `OpenDocumentFile`。在 `OpenDocumentFile` 函数中,我们通过 `CFile::Open` 方法打开了指定的文件,并读取了文件内容。最后,在这里可以对文件内容进行处理,同时记得在使用完后关闭文件。
在应用程序类的 `InitInstance` 函数中,我们调用了 `EnableShellOpen` 和 `RegisterShellFileTypes` 方法,以便应用程序能够响应 Shell 的打开文件操作。