📄 tdocview.tex
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Name: tdocview.tex%% Purpose: Document/view overview%% Author: wxWidgets Team%% Modified by:%% Created:%% RCS-ID: $Id: tdocview.tex,v 1.13 2006/10/10 17:46:48 JS Exp $%% Copyright: (c) wxWidgets Team%% License: wxWindows license%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\section{Document/view overview}\label{docviewoverview}Classes: \helpref{wxDocument}{wxdocument}, \helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate},\rtfsp\helpref{wxDocManager}{wxdocmanager}, \helpref{wxDocParentFrame}{wxdocparentframe}, \helpref{wxDocChildFrame}{wxdocchildframe},\rtfsp\helpref{wxDocMDIParentFrame}{wxdocmdiparentframe}, \helpref{wxDocMDIChildFrame}{wxdocmdichildframe},\rtfsp\helpref{wxCommand}{wxcommand}, \helpref{wxCommandProcessor}{wxcommandprocessor}The document/view framework is found in most application frameworks, because itcan dramatically simplify the code required to build many kinds of application.The idea is that you can model your application primarily in terms of {\it documents} to store dataand provide interface-independent operations upon it, and {\it views} to visualise and manipulatethe data. Documents know how to do input and output given stream objects, and views are responsiblefor taking input from physical windows and performing the manipulation on the document data.If a document's data changes, all views should be updated to reflect the change.The framework can provide many user-interface elements based on this model. Once you have definedyour own classes and the relationships between them, the framework takes careof popping up file selectors, opening and closing files, asking the user to savemodifications, routing menu commands to appropriate (possibly default) code, evensome default print/preview functionality and support for command undo/redo.The framework is highly modular, allowing overriding and replacement of functionalityand objects to achieve more than the default behaviour.These are the overall steps involved in creating an application based on the document/view framework:\begin{enumerate}\itemsep=0pt\item Define your own document and view classes, overriding a minimal set ofmember functions e.g. for input/output, drawing and initialization.\item Define any subwindows(such as a scrolled window) that are needed for the view(s). You may need to route some eventsto views or documents, for example OnPaint needs to be routed to wxView::OnDraw.\item Decide what style of interface you will use: Microsoft's MDI (multipledocument child frames surrounded by an overall frame), SDI (a separate, unconstrained framefor each document), or single-window (one document open at a time, as in Windows Write).\item Use the appropriate wxDocParentFrame and wxDocChildFrame classes. Construct an instanceof wxDocParentFrame in your wxApp::OnInit, and a wxDocChildFrame (if not single-window) whenyou initialize a view. Create menus using standard menu ids (such as wxID\_OPEN, wxID\_PRINT).\item Construct a single wxDocManager instance at the beginning of your wxApp::OnInit, and thenas many wxDocTemplate instances as necessary to define relationships between documents andviews. For a simple application, there will be just one wxDocTemplate.\end{enumerate}If you wish to implement Undo/Redo, you need to derive your own class(es) from wxCommandand use wxCommandProcessor::Submit instead of directly executing code. The framework willtake care of calling Undo and Do functions as appropriate, so long as the wxID\_UNDO andwxID\_REDO menu items are defined in the view menu.Here are a few examples of the tailoring you can do to go beyond the default frameworkbehaviour:\begin{itemize}\itemsep=0pt\item Override wxDocument::OnCreateCommandProcessor to define a different Do/Undo strategy,or a command history editor.\item Override wxView::OnCreatePrintout to create an instance of a derived \helpref{wxPrintout}{wxprintout}\rtfspclass, to provide multi-page document facilities.\item Override wxDocManager::SelectDocumentPath to provide a different file selector.\item Limit the maximum number of open documents and the maximum number of undo commands.\end{itemize}Note that to activate framework functionality, you need to use some or all ofthe wxWidgets \helpref{predefined command identifiers}{predefinedids} in your menus.\perlnote{The document/view framework is available in wxPerl. To use it,you will need the following statements in your application code:\par{\small\begin{verbatim}use Wx::DocView;use Wx ':docview'; # import constants (optional)\end{verbatim}}}\subsection{wxDocument overview}\label{wxdocumentoverview}\overview{Document/view framework overview}{docviewoverview}Class: \helpref{wxDocument}{wxdocument}The wxDocument class can be used to model an application's file-baseddata. It is part of the document/view framework supported by wxWidgets,and cooperates with the \helpref{wxView}{wxview}, \helpref{wxDocTemplate}{wxdoctemplate}\rtfspand \helpref{wxDocManager}{wxdocmanager} classes.Using this framework can save a lot of routine user-interface programming,since a range of menu commands -- such as open, save, save as -- are supported automatically.The programmer just needs to define a minimal set of classes and member functionsfor the framework to call when necessary. Data, and the means to view and editthe data, are explicitly separated out in this model, and the concept of multiple {\it views} ontothe same data is supported.Note that the document/view model will suit many but not all styles of application.For example, it would be overkill for a simple file conversion utility, where theremay be no call for {\it views} on {\it documents} or the ability to open, edit and savefiles. But probably the majority of applications are document-based.See the example application in {\tt samples/docview}.To use the abstract wxDocument class, you need to derive a new class and overrideat least the member functions SaveObject and LoadObject. SaveObject andLoadObject will be called by the framework when the document needs to be savedor loaded.Use the macros DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS in orderto allow the framework to create document objects on demand. When you createa \helpref{wxDocTemplate}{wxdoctemplate} object on application initialization, youshould pass CLASSINFO(YourDocumentClass) to the wxDocTemplate constructorso that it knows how to create an instance of this class.If you do not wish to use the wxWidgets method of creating documentobjects dynamically, you must override wxDocTemplate::CreateDocumentto return an instance of the appropriate class.\subsection{wxView overview}\label{wxviewoverview}\overview{Document/view framework overview}{docviewoverview}Class: \helpref{wxView}{wxview}The wxView class can be used to model the viewing and editing component ofan application's file-based data. It is part of the document/view framework supported by wxWidgets,and cooperates with the \helpref{wxDocument}{wxdocument}, \helpref{wxDocTemplate}{wxdoctemplate}and \helpref{wxDocManager}{wxdocmanager} classes.See the example application in {\tt samples/docview}.To use the abstract wxView class, you need to derive a new class and overrideat least the member functions OnCreate, OnDraw, OnUpdate and OnClose. You will probablywant to respond to menu commands from the frame containing the view.Use the macros DECLARE\_DYNAMIC\_CLASS and IMPLEMENT\_DYNAMIC\_CLASS in orderto allow the framework to create view objects on demand. When you createa \helpref{wxDocTemplate}{wxdoctemplate} object on application initialization, youshould pass CLASSINFO(YourViewClass) to the wxDocTemplate constructorso that it knows how to create an instance of this class.If you do not wish to use the wxWidgets method of creating viewobjects dynamically, you must override wxDocTemplate::CreateViewto return an instance of the appropriate class.\subsection{wxDocTemplate overview}\label{wxdoctemplateoverview}\overview{Document/view framework overview}{docviewoverview}Class: \helpref{wxDocTemplate}{wxdoctemplate}The wxDocTemplate class is used to model the relationship between adocument class and a view class. The application creates a documenttemplate object for each document/view pair. The list of documenttemplates managed by the wxDocManager instance is used to createdocuments and views. Each document template knows what file filtersand default extension are appropriate for a document/view combination,and how to create a document or view.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -