Have you ever want to build an aplication which have more than one view? You can implement it by using a splitter, or multiple views. This article with discuss about using mutiple views, how to use those views, and change between views. Implementation of this, is the html editor, which can change view from design view to html view. These views can have single document or more than one document. In this article, I only use single document.
Using the code
Step 1 Making a new view
Add a new view by inserting a new class with
CHtmlView / something else. as the base class. In this tutorial, I will name that class
COtherView. Change the constructor and destructor access from protected to public, so that you can call it. Make two
CSrollView object, according the base class you created before, named
m_pOtherView is used to store the new view and
m_pFirstView to store the first view, so that you can go back to that view.
</CODE> CView m_pFirstView;
Remember to write the above code and code in step 1 in your App header file. Create a
CCreateContext variable to connect the view to the a document, in this case it`s the default document. You can use your own created document if you want, but it`s a bit complex, so i won`t discuss it here. Name the variable
context. You will pass this variable as a parameter to create the view. The attribute which store the current document is
CDocument* pDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument();
context.m_pCurrentDoc = pDoc;
Before creating the new view, create a new variable
m_ID, which hold the new view ID. Set the
m_ID base on the first view ID plus 1.
AFX_IDW_PANE_FIRST is the first view ID, adding it by one will make sure there is no ID conflict.
UINT m_ID = AFX_IDW_PANE_FIRST + 1;
Create the new view after
( your App )
m_pOtherView->Create(NULL, NULL, WS_CHILD, rect,
m_pMainWnd, m_ID, &context);
Step 2 Selecting and viewing the view
First exchange the view ID that we want to show with the previous view ID. You have to do this , so that
RecalcLayout do it`s job to the right view, the view that we want to see. Use the
GetWindowWord to work on the
m_hWnd, which is 16-bit.
UINT temp = ::GetWindowWord(m_pOtherView->m_hWnd, GWL_ID);
::SetWindowWord(m_pFirstView->m_hWnd, GWL_ID, temp);
Hide the previous view and show the next view.
Set the aplication active view with the view we`ve created. Call
RecalcLayout to put things in their order.
m_pFirstView->Invalidate();Step 3 Using and manipulate the view
To get access to the active document, change the code on
COtherView::OnDraw. But first include the document header in your source file view. In
COtherView add Member Function with function type
CMultiViewDoc* and with the name
GetDocument(). Write the code below to the function created.
void COtherView::OnDraw(CDC* pDC)
CMultiViewDoc* pDoc = GetDocument();
Draw on the view as you draw with the usual view.