Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | ASP.NET 2.0 Tutorials | Web Services | How Do I...? | Class Browser | WPF Quick Starts | Advertise with Us
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
Team Foundation Server Hosting
Search :       Advanced Search »
Home » MFC » Doc-View Tutorial from Scratch : Part I

Doc-View Tutorial from Scratch : Part I

This article gives brief description about Document-view architecture.

Author Rank :
Page Views : 21874
Downloads : 0
Rating :
 Rate it
Level : Beginner
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
Nevron Gauge for SharePoint
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 

Document/View Architecture Tutorial

If you are working on VC++ then it is difficult to resist using MFC in your applications. MFC classes are a nice
wrapper around Win32 API and easy to use. When we start VC++ application using MFC, we find ourselves in
the lap of MFC Framework. Why should not be? Using wizards is so fun. Creating MDI, SDI, or Dialog based
applications are so simple. Just select one option. Build and run the application. By default, we got menus
support, printing support, document supports with multiple views. Who cares what the hell is going on under the
hood? But when we want to add some functionality that MFC Framework doesn't support, then what ? Aaooo ....
MFC framework sucks. Isn't it ? Yes it does if we don't know what's going on under the hood. But if we know
then it makes things easier and interesting to play with it.

Every application's purpose is to perform operations on some kind of data and represent it in a desired form so user can understand it. MFC Framework helps developers to manage and represent data in a desired form. We can write same application without MFC Framework, but Framework makes it simpler. The Document/View is a part of MFC Framework. The Document/View architecture is implemented by using MFC classes created when we create an application using the AppWizard.

MFC Framework

The Microsoft Foundation Class Library (MFC) framework is an implementation of some classes and several Visual
C++ tools. These classes encapsulate a Win32 API and other concepts such as documents, views, OLE, DAO,
ODBC and the application itself. The MFC is an "application framework" for programming in Microsoft Windows
that provides much of the code necessary for managing windows, menus, and dialog boxes; performing basic
input/output; storing collections of data objects; and so on. All you need to do is add your application-specific
code into this framework then it's easy to extend or override the basic functionality of MFC framework. MFC
shortens development time; makes code more portable; provides tremendous support without reducing
programming freedom and flexibility; and gives easy access to "hard to program" user-interface elements and
technologies, like Active technology, OLE, database, network, and Internet programming.

What is Document/View Architecture?

The Document/view architecture is a part of MFC framework that provides a logical separation between
application's data and representation of data. A document is an object that acts as a container of application's
data and a view is a window object, usually associated with the client area of screen window, through which
user interacts with the data contained in the document. So eventually, what's is document/view architecture?Let's say " A set of MFC classes that manages application's data in a structured way and render that data so
user can interact with that data". One document object can have it's multiple views and each view is different
rendering of same data. For example, we can represend a numerical data in either a tabular form, or a chart
form.

MFC's CDocument and CView classes inherit the functionality of document object and it's view. A document
represents the unit of data that the user typically opens with the Open command on the File menu and saves
with the Save command on the File menu. A view is attached to a document and acts as an intermediary
between the document and the user: the view renders an image of the document on the screen and interprets
user input as operations upon the document. The view also renders the image for both printing and print
preview.

Advantages of Document/View Architecture

The document/view architecture assists developers by simplifying the process of rendering data on the screen
in a way that enables users to interact with the data. Think.... if we design this all functionality from scratch
through the overloading view's drawing function, handling mouse and keyboard interaction with the view, and
handling menu, toolbar commands. Wouldn't it be pain and time consuming? And ofcourse, separation of data
from it's views increases the modularity of an application.

  • Multiple views - The main advantage is that a single document can have multiple views. Architecture
    provides correct synchronization of multiple views attached to same document. It reflects updated data
    to all of document's views instantly.

  • Serialization support - CObject helps in saving data to disk and loading back to memory from disk.

  • Intellegent commnad routing - Implementing command routing for menus, toolbars, status bars won't
    be easy using Win32 API.

  • Support for printing and print preview by same logic to render the data on a view, on a print preview
    window, or on a printer.

Document/View Architecture Components

There are five components in document/view architecture.

  • The document
  • The view
  • The view's frame window
  • The document template
  • The document template resource ID

Role of the document

  • It conceptually contains the data.- That means a document object doesn't need to store the actual
    data in it's own data structure. Instead, a document object stores and manages the entry point of the
    relevant data. For example a recordset handle. Actual data is stored in a database but recordset handle is
    stored in document's data structure.

  • Manipulation of data.

  • Serialization - With the help of CDocument's Serialize() overridable function, a document can store and
    retrieve data and it's own state to a persistant medium such as disk. The MFC framework responds
    automatically to File menu's Open, Save, and Save As commands by calling the document's Serialize()member function.An ID_FILE_OPEN command, calls a handler function in the application object. During
    this process, the user sees and responds to the File Open dialog box and the framework obtains the
    filename the user chooses. The framework creates a CArchive object set up for loading data into the
    document and passes the archive to Serialize. The framework has already opened the file. The code in
    your document's Serialize member function reads the data in through the archive, reconstructing data
    objects as needed.

  • Synchronization - A document maintains a list of all of it's veiws that are opened on it. To update all
    views it calls UpdateAllViews function, which calls each view's OnUpdate() that causes each view to
    refresh itself and display the current data from the document object.

  • Handle most of commands and messages - Your document class may also handle certain commands
    generated by menu items, toolbar buttons, or accelerator keys. By default, CDocument handles the Save
    and Save As commands on the File menu, using serialization. Other commands that affect the data may
    also be handled by member functions of your document. Documents can have message maps, but unlike
    views, documents cannot handle standard Windows messages — only WM_COMMAND messages, or
    "commands."

Role of the view

  • As an input device, the view can handle user inputs, such as keyboard, mouse or input via drag-and-drop,
    as well as commands from menus, toolbars, or scroll bars. A view receives commands forwarded by its
    frame window. If the view does not handle a given command, it forwards the command to its associated
    document. Like all command targets, a view handles messages via a message map.

  • As an output device, a view extracts the data from the document and presents the data in an appropriate
    way. A view is responsible for displaying and modifying the document's data but not for storing it. The
    document provides the view with the necessary details about its data.

Role of the view's frame window

  • Provides support of splitter window which helps to separate more than one views hosted by frame window.

  • Host views and other control bars such as toolbars, status bars, and dialog bars.

Role of the document template

  • Document template dynamically creates instances of the document, view, and frame window classes.
    MFC's CDocTemplate class inherits the functionality of document template. Usually InitInstance function
    of an MFC application creates one or more document templates. A document template defines the
    relationships among three types of classes:

  • A document class derived from CDocument.

  • A view class, which displays data from the document class listed above. This class is derived from on of
    CView, CScrollView, CFormView, or CEditView classes.

  • A frame window class, which contains the view. For a single document interface (SDI) application, you
    derive this class from CFrameWnd. For a multiple document interface (MDI) application, you derive this
    class from CMDIChildWnd.

An application has one document template for each type of document that it supports. For example, if
application supports both spreadsheets and text documents, the application has two document template
objects. Each document template is responsible for creating and managing all the documents of its type.

The document template stores pointers to the CRuntimeClass objects for the document, view, and frame
window classes. These CRuntimeClass objects are specified when constructing a document template.

The document template contains the ID of the resources used with the document type (such as menu, icon, or
accelerator table resources). The document template also has strings containing additional information about its
document type. These include the name of the document type (for example, "Worksheet") and the file
extension (for example, ".xls"). Optionally, it can contain other strings used by the application's user interface,
the Windows File Manager, and Object Linking and Embedding (OLE) support.

Because CDocTemplate is an abstract class, you cannot use the class directly. A typical application uses one
of the two CDocTemplate-derived classes provided by the Microsoft Foundation Class Library:
CSingleDocTemplate, which implements SDI, and CMultiDocTemplate, which implements MDI. See those
classes for more information on using document templates.

Here is InitInstance of an SDI application :

BOOL CSDIAppApp::InitInstance()
{
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSDIAppDoc), RUNTIME_CLASS
CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSDIAppView));
AddDocTemplate(pDocTemplate);
}

Here is InitInstance of an SDI application :

BOOL CMDIAppApp::InitInstance()
{
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate( IDR_MDIAPPTYPE, RUNTIME_CLASS(CMDIAppDoc), RUNTIME_CLASS
CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMDIAppView));
AddDocTemplate(pDocTemplate);
}

Role of the document template resource ID

The document template resource ID associates three specific resources with a given document template object:

  • An icon Resource.

  • A menu resource. When the user activates a particular frame window,MFC replaces the main application
    menu with the menu resource associated with the document template resource ID of the active frame
    window object.

  • A string resource. This string is concatnation of seven substrings separated by "\n". These are frame
    window's title ( windowTitle), default name assigned to new document (docName), descriptive name for
    document of this type ( fileNewName), descriptive name for document of this type and associated default
    file type (filterName), default file name extension (filterExt), name registered in the registry for this type
    of document ( regFileTypeId), and human readable name for this file type appears in windows explorer
    (regFileTypeName). For example

    nMDIApp\nMDIApp\n\n\nMDIApp.Document\nMDIApp Document , here windowTitle = "", docName =
    "MDIApp", fileNewName = "MDIApp", filterName = "", filterExt = "", regFileTypeID = MDIApp.Document, and
    regFileTypeName = MDIApp Document.

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 [Top] Rate this article
 
 About the author
 
Mahesh Chand
Mahesh is the founder of C# Corner and Mindcracker Network, an author of several .NET programming books and a Microsoft MVP for 6 consecutive years. In his day to day work, Mahesh is a Senior Software Consultant with over 14 years of IT industry experience building systems for Financial and Banking, Engineering & Architectural, Imaging, Construction, Biological & Pharmaceuticals, Healthcare and Education industries. His expertise is Windows Forms, ASP.NET, Silverlight, WPF, WCF, Visual Studio 2010, SQL Server, and Oracle.  If you are looking for a Sharepoint, Windows Forms, ASP.NET, WPF, Silverlight, C#, VB.NET, Oracle, and SQL Server Consultant in Philadelphia area or remote location, drop me a line at MAHESH [AT] C-SHARPCORNER [DOT] COM.
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
 Comments

 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.