- @page overview_docview Document/View Framework
-
- Classes: wxDocument, wxView, wxDocTemplate, wxDocManager, wxDocParentFrame,
- wxDocChildFrame, wxDocMDIParentFrame, wxDocMDIChildFrame,
- wxCommand, wxCommandProcessor
-
- The document/view framework is found in most application frameworks, because it
- can dramatically simplify the code required to build many kinds of application.
-
- The idea is that you can model your application primarily in terms of @e documents to store data
- and provide interface-independent operations upon it, and @e views to visualise and manipulate
- the data. Documents know how to do input and output given stream objects, and views are responsible
- for 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 defined your own classes and the relationships between them, the framework
- takes care of popping up file selectors, opening and closing files, asking the user to save
- modifications, routing menu commands to appropriate (possibly default) code, even
- some default print/preview functionality and support for command undo/redo.
-
- The framework is highly modular, allowing overriding and replacement of functionality
- and objects to achieve more than the default behaviour.
-
- These are the overall steps involved in creating an application based on the
- document/view framework:
-
- @li Define your own document and view classes, overriding a minimal set of
- member functions e.g. for input/output, drawing and initialization.
- @li Define any subwindows (such as a scrolled window) that are needed for the view(s).
- You may need to route some events to views or documents, for example OnPaint needs
- to be routed to wxView::OnDraw.
- @li Decide what style of interface you will use: Microsoft's MDI (multiple
- document child frames surrounded by an overall frame), SDI (a separate, unconstrained frame
- for each document), or single-window (one document open at a time, as in Windows Write).
- @li Use the appropriate wxDocParentFrame and wxDocChildFrame classes. Construct an instance
- of wxDocParentFrame in your wxApp::OnInit, and a wxDocChildFrame (if not single-window) when
- you initialize a view. Create menus using standard menu ids (such as wxID_OPEN, wxID_PRINT).
- @li Construct a single wxDocManager instance at the beginning of your wxApp::OnInit, and then
- as many wxDocTemplate instances as necessary to define relationships between documents and
- views. For a simple application, there will be just one wxDocTemplate.
-
- If you wish to implement Undo/Redo, you need to derive your own class(es) from wxCommand
- and use wxCommandProcessor::Submit instead of directly executing code. The framework will
- take care of calling Undo and Do functions as appropriate, so long as the wxID_UNDO and
- wxID_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 framework
- behaviour:
+@page overview_docview Document/View Framework
+
+Classes: wxDocument, wxView, wxDocTemplate, wxDocManager, wxDocParentFrame,
+ wxDocChildFrame, wxDocMDIParentFrame, wxDocMDIChildFrame,
+ wxCommand, wxCommandProcessor
+
+The document/view framework is found in most application frameworks, because it
+can dramatically simplify the code required to build many kinds of application.
+
+The idea is that you can model your application primarily in terms of @e documents to store data
+and provide interface-independent operations upon it, and @e views to visualise and manipulate
+the data. Documents know how to do input and output given stream objects, and views are responsible
+for 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 defined your own classes and the relationships between them, the framework
+takes care of popping up file selectors, opening and closing files, asking the user to save
+modifications, routing menu commands to appropriate (possibly default) code, even
+some default print/preview functionality and support for command undo/redo.
+
+The framework is highly modular, allowing overriding and replacement of functionality
+and objects to achieve more than the default behaviour.
+
+These are the overall steps involved in creating an application based on the
+document/view framework:
+
+@li Define your own document and view classes, overriding a minimal set of
+ member functions e.g. for input/output, drawing and initialization.
+@li Define any subwindows (such as a scrolled window) that are needed for the view(s).
+ You may need to route some events to views or documents, for example OnPaint needs
+ to be routed to wxView::OnDraw.
+@li Decide what style of interface you will use: Microsoft's MDI (multiple
+ document child frames surrounded by an overall frame), SDI (a separate, unconstrained frame
+ for each document), or single-window (one document open at a time, as in Windows Write).
+@li Use the appropriate wxDocParentFrame and wxDocChildFrame classes. Construct an instance
+ of wxDocParentFrame in your wxApp::OnInit, and a wxDocChildFrame (if not single-window) when
+ you initialize a view. Create menus using standard menu ids (such as wxID_OPEN, wxID_PRINT).
+@li Construct a single wxDocManager instance at the beginning of your wxApp::OnInit, and then
+ as many wxDocTemplate instances as necessary to define relationships between documents and
+ views. For a simple application, there will be just one wxDocTemplate.
+
+If you wish to implement Undo/Redo, you need to derive your own class(es) from wxCommand
+and use wxCommandProcessor::Submit instead of directly executing code. The framework will
+take care of calling Undo and Do functions as appropriate, so long as the wxID_UNDO and
+wxID_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 framework
+behaviour: