We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

Creating a new Document from a View

patrickm
patrickm asked
on
Medium Priority
240 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
}


Comment
Watch Question

Author

Commented:
Edited text of question

Commented:
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 );      


Author

Commented:
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

Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview

Author

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

Pat...

Commented:
You're welcome Pat.

Phillip

Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.