OnOpenDocument指定打开文档的默认类型

来自:http://blog.csdn.net/whucv/article/details/7747248

 

IDR_MAINFRAME字符串资源中包含7个子串,分别以\n结束,即如下格式:
<windowTitle>\n<docName>\n<fileNewName>\n<filterName>\n<filterExt>\n<regFileTypeId>\n<regFileTypeName>\n
(1)CDocTemplate::windowTitle,主窗口标题栏上的字符串,MDI程序不需要指定,将以IDR_MAINFRAME字符串为默认值。
(2)CDocTemplate::docName,缺省文档的名称。如果没有指定,缺省文档的名称是无标题。
(3)CDocTemplate::fileNewName,文档类型的名称。如果应用程序支持多种类型的文档,此字符串将显示在"File/New"对话框中。如果没有指定,就不能够在"File/New"对话框处理这种文件。
(4)CDocTemplate::filterName,文档类型的描述和一个适用于此类型的通配符过滤器。这个字符串将出现在“File/Open”对话框中的文件类型列表框中。要和CDocTemplate::filterExt一起使用。
(5)CDocTemplate::filterExt,文档的扩展名。如果没有指定,就不能够在“File/Open”对话框中处理这种文档。要和CDocTemplate::filterName一起使用。
(6)CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在HEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用。如果没有指定,这种文件类型就无法注册。
(7)CDocTemplate::regFileTypeName,这也是存储在注册表中的文件类型名称。它会显示于程序中用以访问注册表的对话框内。

要指定默认打开文档类型为位图文件,可以按如下设置。不过IDR_MAINFRAME只能实现一种文件类型的选择。


如果要实现多类型保存和多类型新建需要重新定义ID_FILE_OPEN和ID_FILE_SAVE的处理函数。

设置多个过虑器
 在CFileDiag的构造函数的第5个参数加入过虑串,格式如下.
 LPCTSTR strFilter=TEXT("文本文件(*.txt)|*.txt|图片文件|*.bmp;*.jpg;*.gif;*.tif|所有文件(*.*)|*.*||");//最后要以"||"结束.
调用的时候
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter);
dlg.DoModal();

在 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 的打开文件操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值