设为首页 加入收藏

TOP

VC++环境下多文档模板应用程序开发(带源码)(一)
2015-07-24 06:37:25 来源: 作者: 【 】 浏览:67
Tags:环境 文档 模板 应用 程序开发 源码

我们以前见到的关于VC++环境下利用APP Wizard 自动生成的MDI的应用程序只支持打开同一文档类型的多个文件,但是不能够同时打开不同种类型的文档。网上的这种公开资料比较少,我在知网上查阅了相关的资料。下面我根据这些资料做一下总结(辛辛苦苦一个一个字码出来的)。

下面设计一个能够处理两种文档类型的应用程序:第一种文档类型:TXT文档,第二种文档类型:Bub的文档类型。

第一种的文档类型TXT,是利用APP Wizard自动生成的,只不过是在设置的时候将文档类型设置为TXT类型,并且使生成的视图派生类继承与CEditView类。

第二种文档类型Bub,这个类型是在生成的MDI程序中添加的自定义文档类型(下面会有相应的介绍).

应用程序建立过程(最后会将相应的源码上传以供大家下载)注意下面的介绍是VC6.0为开发工具:

1.首先使用APP Wizard建立一个MDI程序,注意在建立的过程中需要在第4步的Advanced Options对话框中设置文件的扩展名为txt;在第6步中将视图类的基类设置为CEditView.编译完成后,该应用程序就可以对文本文件进行相应的编辑了。

2. 下面通过Insert/New Class 菜单选项为项目添加3个MFC派生类CBubDoc ,CBubView和CBubFrame类分别派生于CDocument ,CView和CMDIChildWnd.

为CBubDoc类添加两个数据成员:

CRect m_rectBubble[MAX_BUBLLE];
int m_nBubbleCount;

其中MAX_BUBLLE被定义为200;

使用Class Wizard 为CBubDoc类添加DeleteContents()函数,并为其添加代码:

m_nBubbleCount = 0;

修改CBubDoc类的Serialize()函数并使之可以存取泡泡图形数据。

if (ar.IsStoring())
{
ar< for (int i = 0;i {
ar< }
}
else
{
ar>>m_nBubbleCount;
for (int i = 0;i {
ar>>m_rectBubble[i];
}
}

在CBubView类头文件首部添加#include “BubDoc.h”并为CBubView类添加一个成员函数

public:

CBubDoc * GetDocument();

在类声明的结束处添加以下代码:

#ifndef _DEBUG
inline CBubDoc * CBubView::GetDocument()
{
return (CBubDoc *) m_pDocument;
}

#endif

在相应的类实现文件中添加以下代码:

CBubDoc * CBubView::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBubDoc)));
return (CBubDoc *) m_pDocument;
}

修改CBubView类的OnDraw函数,使其可以显示泡泡图形。

代码如下:

void CBubView::OnDraw(CDC* pDC)
{
CBubDoc* pDoc = GetDocument();
pDC->SelectStockObject(LTGRAY_BRUSH);
for (int i =0;i m_nBubbleCount;i++)
{
pDC->Ellipse(pDoc->m_rectBubble[i]);
}
}

使用Class Wizard为CBubView类添加鼠标左键按下的消息处理函数,并编辑代码如下:

void CBubView::OnLButtonDown(UINT nFlags, CPoint point)
{
CBubDoc * pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->m_nBubbleCount {
int r = rand()%50 + 10;
pDoc->m_rectBubble[pDoc->m_nBubbleCount] =
CRect(point.x-r,point.y-r,point.x+r,point.y+r);
InvalidateRect(pDoc->m_rectBubble[pDoc->m_nBubbleCount]);
pDoc->m_nBubbleCount++;
}
CView::OnLButtonDown(nFlags, point);
}

3.为新文档类型定义资源标识符IDR_BUBTYPE,该标识符用于新文档类型的所有资源,包括字符串资源,子框架窗口菜单和图标。

4.在字符串资源中为新的文档类型添加新的字符串资源(标识符为IDR_BUBTYPE)

如下:

Bub程序界面\nBub\nBub\nBub文件(*.bub)\n.bub\nBub.Document\nBub Document

相应的解释如下:

\n 为分隔符:

以下的字符按照上面的顺序依次介绍,大家可以一一对应的看:
Bub程序界面 :应用程序窗口标题(仅对单文档界面有效)
\nBub :文档类型
\nBub :文档名称(出现在选择文件对话框中的)
\nBub文件(*.bub) :文件名过滤器(出现在选择文件对话框中的)
\n.bub :文档扩展名
\nBub.Document :存储在系统注册表中的文档类型标识符
\nBub Document :存储在系统注册表中的文档类型

5.编辑主框架窗口菜单资源。

在文件子菜单中添加新类型文档的新建和打开选项。这两个菜单选项的标识符设置为ID_FILE_NEW_BUB和ID_FILE_OPEN_BUB,并且将原来的新建菜单选项的标识符改为ID_FILE_NEW_TXT.

6.编辑主框架窗口的工具条资源。可以自行设置,不过标识符小一样哦。

7.利用Insert/Resource为新的文档类型的子框架窗口添加菜单资源(标识符为IDR_BUBTYPE)。

其中文件子菜单下的选项包括新建图形文档(ID_FILE_NEW_BUB),打开图形文档(ID_FILE_OPEN_BUB)和新建文本文档(ID_FILE_NEW_TXT),打开文本文档(ID_FILE_OPEN),关闭文档,保存文档,另存为和退出。

其他的未列出来的标识符按照主框架的菜单设置,剩余的其他的菜单项按照主框架的菜单设置。

8.为新建的文档类型添加图标资源(标识符IDR_BUBTYPE)

9.在应用程序派生类中找到相应的InitInstance()函数,添加以下代码设置新的文档模板;

CMultiDocTemplate* pBubTemplate;
pBubTemplate = new CMultiDocTemplate(
IDR_BUBTYPE,
RUNTIME_CLASS(CBubDoc),
RUNTIME_CLASS(CBubFrame),
RUNTIME_CLASS(CBubView));
AddDocTemplate(pBubTemplate);

并在调用ProcessShellCommand(cmdInfo)之前添加如下代码:

//主要是在应用程序的建立的时候不建立任何类型的文档。

cmdInfo.m_nShellCommand = CCommandLineInfo.FileNothin

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HUNNU Contest 找数字2 下一篇[BZOJ 1084][SCOI2005]最大子矩阵

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: