Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Creating a new Document from a View

Posted on 1998-07-16
6
Medium Priority
?
229 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 7

Accepted Solution

by:
psdavis earned 200 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Here is how to use MFC's automatic Radio Button handling in your dialog boxes and forms.  Beginner programmers usually start with a OnClick handler for each radio button and that's just not the right way to go.  MFC has a very cool system for handli‚Ķ
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
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.
As many of you are aware about Scanpst.exe utility which is owned by Microsoft itself to repair inaccessible or damaged PST files, but the question is do you really think Scanpst.exe is capable to repair all sorts of PST related corruption issues?

572 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