Solved

Creating a new Document from a View

Posted on 1998-07-16
6
220 Views
Last Modified: 2013-11-20
I have an MDI application, how do I create a New Document from my View Class.  I have a function in my View Class that does some calculations, then writes to a recordset.  I would then like to close the document in the view and create a new one.  I tried the following, but got an error  'illegal call of non-static member function' and 'cannot access protected member declared in class 'CWinApp''

void CPosView::OnCash()
{
      DoTotals();
      CTendered dlg;
      m_ctlNetDue.SetWindowText(dlg.m_changeDue);
      GetDocument()->UpdateAllViews(NULL);
      OnFilePrint();
      //CPosApp::OnFileNew();
      //CDocument* pDoc = GetDocument();
      //CDocTemplate::CreateNewFrame(pDoc, NULL);

      CWinApp::OnFileNew(); // <----- ERROR HERE
}


0
Comment
Question by:patrickm
  • 3
  • 3
6 Comments
 

Author Comment

by:patrickm
ID: 1319337
Edited text of question
0
 
LVL 7

Expert Comment

by:psdavis
ID: 1319338
A view is tied to a document, you would be creating the view from the document, not vice versa.

One way to accomplish your task is to create additional CMultiDocTemplates in your CWinApp application.  The m_pBiographTemplate in this case is stored within my CWinApp.

m_pBiographTemplate = new CMultiDocTemplate(
  IDR_TENPRINTTYPE,
  RUNTIME_CLASS(CBiographDoc),
  RUNTIME_CLASS(CBiographChildFrame), // custom MDI child frame
  RUNTIME_CLASS(CBiographView));


Now when I want to create a new Doc/View, call OpenDocumentFile.

CDocument* pDoc = pApp->m_pBiographTemplate->OpenDocumentFile( NULL );      


0
 

Author Comment

by:patrickm
ID: 1319339
Thank you for your time. I understand the view is attached to the document. I tried your code snippet, but could not get it to function. I must be missing something simple.

in my App.h

class CPosApp : public CWinApp
{
public:
      CPosApp();
public:
      static CMultiDocTemplate* pDocTemplate;
public:
      virtual BOOL InitInstance();
};

In my App.cpp

CPosApp::CPosApp()
{
}

CPosApp theApp;

BOOL CPosApp::InitInstance()
{
//      CMultiDocTemplate* pDocTemplate;
      pDocTemplate = new CMultiDocTemplate(
            IDR_POSTYPE,
            RUNTIME_CLASS(CPosDoc),
            RUNTIME_CLASS(CChildFrame), // custom MDI  
            RUNTIME_CLASS(CPosView));
      pDocTemplate->SetContainerInfo(IDR_POSTYPE_CNTR_IP);
      AddDocTemplate(pDocTemplate);
etc....
      return TRUE;
}

In my View.cpp

CPosView::CPosView()
      : CFormView(CPosView::IDD)
{
}

CPosView::~CPosView()
{
}

void CPosView::OnCash()
{
      DoTotals();
      CTendered dlg;
      if (dlg.DoModal() == IDCANCEL) return;
      GetDocument()->UpdateAllViews(NULL);
      OnFilePrint();

      CMultiDocTemplate* pApp = CPosApp::pDocTemplate;
      CDocument* pDoc = pApp->OpenDocumentFile(NULL);
      CWinApp::OnFileNew();
}

Where specifically do I put the declarations, static members, pointers, etc... to make this happen.

Thanks again for your time

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 7

Accepted Solution

by:
psdavis earned 50 total points
ID: 1319340
Ahhh..

1) In your OnCash function.
   The pApp is not pDocTemplate but rather a pointer to your class.

For example:

CPosApp* pApp = (CPosApp*) AfxGetApp( );

2) I haven't used the SetContainerInfo.  Not sure what affect it will have.

3) Remember, you can have several different Doc/View templates added to your CWinApp.  

0
 

Author Comment

by:patrickm
ID: 1319341
I'm not sure what the dynamics are exactly, but it works.
Thanks again for all your help.

Pat...
0
 
LVL 7

Expert Comment

by:psdavis
ID: 1319342
You're welcome Pat.

Phillip

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
C++ BOOL WINAPI ReadFile fails on windows 10 when reading from USB cable 9 383
move a line in eclipse 3 83
Hibernate methods 2 68
Not needed 13 95
Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now