AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

Visual C++中基于多文档视窗模型的重叠图象拼接技术

51自学网 2015-08-30 http://www.wanshiok.com

摘要
  图象拼接是在全景视频系统、地理信息系统等应用中经常遇到的一个问题,本文基于网格匹配的方法对边界部分有重叠的图象提出了一种行之有效的对准算法,并通过平滑因子对图象实现了无缝拼接。并应用文档视窗模型实现了该算法,并完成了位图文件的显示、存储等操作,具有一定的普遍意义。

关键词:

    图象拼接,算法,重叠图象,文档视窗,位图文件,图象显示
文章正文

一、      多文档视窗模型概述

MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用、单文档应用(SDI)和多文档应用(MDI)。三种应用中,以多文档应用(MDI)最为复杂,其功能也最强大。当我们用AppWizard生成一个多文档应用时,系统由CMultiDocTemplate自动生成了一个从Cdocument类继承的文档类,一个从Cview类继承的视窗类,一个从CMDIChildWnd类继承的框架类。当我们每次建立一个新的文档时,程序根据文档模板生成一个新实例,这些我们均可不用关心AppWizard已经自动生成了代码。但如果我们要在程序中使用多个不同的文档类时,则需自己建立文档模板并控制文档实例的建立。假设我们要向一基于多文档的工程MDI中增加一Test的文档。具体步骤如下:

1、用ClassWizard建立一个框架类CTestFrame基类选CMDIChildWnd。

2、用ClassWizard建立一个文档类CTestDoc基类选CDocument。

3、用ClassWizard建立一个文档类CTestView基类选CView。

4、将三个类的头文件加入应用类CMDIApp中。

5、创建新文档模板,在CMDIApp::InitInstance()函数中加入如下代码

   CMultiDocTemplate* pDocTemplate;

    pDocTemplate = new CMultiDocTemplate(

       IDR_TESTTYPE,

       RUNTIME_CLASS(CTestDoc),

       RUNTIME_CLASS(CTestFrame),

       RUNTIME_CLASS(CTestView));

    AddDocTemplate(pDocTemplate);

6、定义一菜单项ID号为ID_NEWTEST,利用ClassWizard将其处理函数加入应用类(或主框架类),在其处理函数CMDIApp::OnNewtest()函数中加入如下代码

    POSITION curTemplatePos = GetFirstDocTemplatePosition();

    while(curTemplatePos != NULL)

    {

       //取下一个文档模板指针

       CDocTemplate* curTemplate =GetNextDocTemplate(curTemplatePos);

       CString str;

       curTemplate->GetDocString(str, CDocTemplate::docName);   //取文档名称

       if(str == _T("Test"))   //判断当前文档文档是否Test类

       {

           curTemplate->OpenDocumentFile(NULL); //创建新的文档实例

           return;

}

       }

    这样我们就建立了一个新的文档类。注意在5中创建文档模板时我们用到了一文档类型资源IDR_TESTTYPE,该资源ID在资源文件中定义如下(未包括图标和菜单的定义):

STRINGTABLE PRELOAD DISCARDABLE

BEGIN

    ……….

    IDR_TESTTYPE      "/nTest/nTest/n/n/nMDI.Document/nTest Document"

END

  文档类型标识包括七个子串,包括窗口标题、文档名称、文件扩展名等。在6中curTemplate->GetDocString(str, CDocTemplate::docName);取的就是第二个子串,文档名称。文档建立之后我们就可以对其进行操作了。当然文档类和视窗类,文档类和主窗口类,以及不同文档类之间进行通信也是较为复杂的,并非几句话就能说清楚,如不熟悉文档视窗的读者请参看其它有关资料。

<

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:消息钩子函数入门篇  下一篇:在VC中链接动态链接库的方法简要说明