| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖
标题:关于Document/View的MDI程序的一个问题
取消只看楼主 加入收藏
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
结帖率:100%
收藏
 问题点数:0 回复次数:0 
关于Document/View的MDI程序的一个问题
本人最近在写一个能读取和显示Text和Bmp两种格式文件的基于Docmuent/View架构的MDI程序,开发过程中遇到了一个小问题。首先将自己的分开发过程介绍一下,希望大家共同学习进步,然后说一下我在开发过程中遇到的问题,希望各位高手能给个解答,当然答案能令我满意的有高分奖励的。
首先本人在VS2008中建立的MDI工程为ExpMdi,由于文档模版DocTemplate是由应用程序管理的,则系统自动在CExpMdiApp类的InitInstance()添加了如下代码:
程序代码:
CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(IDR_ExpMdiTYPE,
        RUNTIME_CLASS(CExpMdiDoc),
        RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
        RUNTIME_CLASS(CExpMdiView));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);//添加一个由pDocTemplate指向的文档模版
其中CMultiDocTemplate函数的IDR_ExpMidTYPE既是文档类型,后面的RUNTIME_CLASS里的三个类分别是与该文档类型关联的文档、视图和框架类。由于我要读取的是Text和Bmp文件,而且为了与Windows的text和bmp相区别,将自己的text和bmp文档类型扩展名分别命名为mtext和mbmp,将文档类型分别命名为IDR_MTEXTTYPE和IDR_MBMPTYPE。由于这些类型名都是由资源文件管理的,添加的时候应在资源里天下。操作是打开资源文件的字符串表STRING TABLE,可以在串表里看到这样一行:
IDR_ExpMdiTYPE 129 \nExpMdi\nExpMdi\nExpMdi Files (*.em)\n.em\nExpMdi.Document\nExpMdi.Document
这就是系统自动添加的IDR_ExpMdiTYPE文档类型的一些设置。现在手动添加我们自定义的IDR_MTEXTTYPE和IDR_MBMPTYPE文档类型设置。
IDR_MTEXTTYPE  101  \nMTEXT\nMTEXT\nExpMdi Files (*.mtxt)\n.mtxt\nMTEXT\nMTEXT Document
IDR_MBMPTYPE 102 \nMBMP\nMBMP\nExpMdi Files (*.mbmp)\n.mbmp\nMBMP\nMBMP Document
现在回到CExpMdiApp类的InitInstance函数中将IDR_ExpMdiTYPE改成我们自己的IDR_MTEXTTYPE。
然后给CExpMdiDoc类添加一个CString类型的成员变量用于存放从文件中读取的数据,取名为m_Text。在CExpMdiDoc的构造函数中初始化m_Text:
程序代码:
CExpMdiDoc::CExpMdiDoc()
: m_Text(_T("这是一个多文档视图架构程序!"))
{
    // TODO: 在此添加一次性构造代码

}
在CExpMdiDoc类的Serialize函数中添加如下代码:
程序代码:
void CExpMdiDoc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: 在此添加存储代码
    }
    else
    {
        // TODO: 在此添加加载代码
        ar.ReadString(m_Text);
    }
}
由于CExpMdiView是负责数据的显示的,所以重写OnDraw()函数如下:
程序代码:
void CExpMdiView::OnDraw(CDC* pDC)
{
    CExpMdiDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;

    // TODO: 在此处为本机数据添加绘制代码
    pDC->TextOut(0,0,pDoc->m_Text);
}
添加以上代码后,运行程序,应该可以进行mtext文件操作了。如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册


搜索更多相关主题的帖子: 应用程序 答案 
2011-02-25 10:48
快速回复:关于Document/View的MDI程序的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017121 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved