Solved

Document problem in SDI splitview application

Posted on 1998-11-18
9
415 Views
Last Modified: 2013-11-20
I am having trouble with a SDI application that uses a static Split window.  From the standard SDI AppWizard generated I
added two new classes, CSplitWnd:pulic CSplitterWnd and CControlFormView:pulic CFormView.  To the CMainFrame
Class I used AppWizard to add the function OnCreateClient, and added a member variable CSplitWnd m_SplitWnd.  The
OnCreateClient is nothing strange:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    if(m_SplitWnd.CreateStatic(this, 1, 2))
    {
        return FALSE;
    }
    if(m_SplitWnd.CreateView(0,0,RUNTIME_CLASS(CControlFormView), CSize(120,300), pContext))
    {
        return FALSE;
    }
    if(m_SplitWnd.CreateView(0,1,RUNTIME_CLASS(CHackView),CSize(300,300),pContext))
    {
        return FALSE;
    }
    m_SplitWnd.SetActivePane(0,0);
    return TRUE;
}

Everything compiles with the exception of the following three errors.
MainFrm.cpp
*******************\hackview.h(21) : error C2143: syntax error : missing ';' before '*'
*******************\hackview.h(21) : error C2501: 'CHackDoc' : missing storage-class or type specifiers
*******************\hackview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
All three errors point to the same line:
// Attributes
public:
(21)->  CHackDoc* GetDocument();

In the last application that I used this I remove the document checking and it worked fine.  They where used in a
CMDIChildWnd.  I seem I can't get away with the same approach here.  The results compiles and runs but with strange
results.  Let me know what additional information you need and I will gladly provide it.  Thanks
Gregg
garaber@fedex.com
0
Comment
Question by:graber
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
9 Comments
 
LVL 3

Accepted Solution

by:
plaroche earned 150 total points
ID: 1324920
Your MainFrm.cpp seems to include hackview.h, and that hackview.h does not at that moment know what CHackDoc is.

Add this line before
   class CHackView : public CView

class CHackDoc;

what this does is "predeclare" the class, so that your file compiles. if this doesn't work simply include in hackview.h the document header file.

0
 
LVL 2

Author Comment

by:graber
ID: 1324921
Can you give me some more information?  I caught header problem in one of those forehead slapping routines and corrected it.  Now it is coming back saying that it has failed to create an empty document.  Can you still help?
0
 
LVL 3

Expert Comment

by:plaroche
ID: 1324922
Put a breakpoint in OnNewDocument, trace it from there, find the problem.
Without the code I can't do much.
0
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!

 
LVL 2

Author Comment

by:graber
ID: 1324923
BOOL CWinApp::ProcessShellCommand(CCommandLineInfo& rCmdInfo)
{
  BOOL bResult = TRUE;
  switch (rCmdInfo.m_nShellCommand)
  {
    case CCommandLineInfo::FileNew:
    if (!AfxGetApp()->OnCmdMsg(ID_FILE_NEW, 0, NULL, NULL))
      OnFileNew();
    if (m_pMainWnd == NULL)
      bResult = FALSE;
      break;

it is failing both of the if statement for the new file case when ProcessShellCommand is called from the apps InitInstance()
0
 
LVL 3

Expert Comment

by:plaroche
ID: 1324924
I know that, you've said it.
But try stepping into those functions and see where, in the MFC source code, it stops working.
0
 
LVL 2

Author Comment

by:graber
ID: 1324925
Mfc\Src\Cmdtarg.cpp

AFX_STATIC BOOL AFXAPI _AfxDispatchCmdMsg(CCmdTarget* pTarget, UINT nID, int nCode, AFX_PMSG pfn, void* pExtra, UINT nSig, AFX_CMDHANDLERINFO* pHandlerInfo)
// return TRUE to stop routing
{
  ASSERT_VALID(pTarget);
  UNUSED(nCode);   // unused in release builds
  union MessageMapFunctions mmf;mmf.pfn = pfn; BOOL bResult = TRUE;
  // default is ok
  if (pHandlerInfo != NULL)
  {
    // just fill in the information, don't do it
    pHandlerInfo->pTarget = pTarget;
    pHandlerInfo->pmf = mmf.pfn;
    return TRUE;
  }
  switch (nSig)
  {
    case AfxSig_vv:
    // normal command or control notification
    ASSERT(CN_COMMAND == 0);        // CN_COMMAND same as BN_CLICKED
    ASSERT(pExtra == NULL);
****(pTarget->*mmf.pfn_COMMAND)();*****************************************************
    break;

This is the value of pTarget when it fails
 -pTarget      0x00417850 class CHackApp  theApp
+CObject      {CObject}
+classCCmdTarget      {"CCmdTarget"}
+_messageEntries      0x5f4b54a8 struct AFX_MSGMAP_ENTRY const * const                              CCmdTarget::_messageEntries
+messageMap  {...}
+_commandEntries 0x5f4b5558 struct AFX_OLECMDMAP_ENTRY const * const                               CCmdTarget::_commandEntries
+commandMap  {...}
+_dispatchEntries      0x5f4b54d0 struct AFX_DISPMAP_ENTRY const * const                              CCmdTarget::_dispatchEntries
                            _dispatchEntryCount      4294967295
                            _dwStockPropMask      4294967295
+dispatchMap      {...}
+_connectionEntries 0x5f4b5548 struct AFX_CONNECTIONMAP_ENTRY const *                                           const  CCmdTarget::_connectionEntries
+connectionMap      {...}
+_interfaceEntries      0x5f4b5530 struct AFX_INTERFACEMAP_ENTRY const * const                              CCmdTarget::_interfaceEntries
+interfaceMap      {...}
+_eventsinkEntries      0x5f4b5500 struct AFX_EVENTSINKMAP_ENTRY const * const                              CCmdTarget::_eventsinkEntries
                            _eventsinkEntryCount      4294967295
+eventsinkMap      {...}
                            m_dwRef      1
+m_pOuterUnknown 0x00000000
                              m_xInnerUnknown      0
+m_xDispatch      {...}
                    m_bResultExpected      1
+m_xConnPtContainer      {...}
+m_pModuleState      0x00420078

0
 
LVL 2

Author Comment

by:graber
ID: 1324926
Adjusted points to 150
0
 
LVL 3

Expert Comment

by:plaroche
ID: 1324927
Is that a VC5 or VC6 project? if it's VC5 (our project hasn't moved to vc6 yet) could you zip the files and mail them to me? i will run it and debug it, it doesn't look like a big thing but I don't think we can solve it via this question ;-)
0
 
LVL 3

Expert Comment

by:plaroche
ID: 1324928
Your OnCreateClient code is flawed:

      if(m_SplitWnd.CreateStatic(this, 1, 2))
      {
            return FALSE;
      }
      if(m_SplitWnd.CreateView(0,0,RUNTIME_CLASS(CControlFormView), CSize(120,300), pContext))
      {
            return FALSE;
      }
      if(m_SplitWnd.CreateView(0,1,RUNTIME_CLASS(CHackView),CSize(300,300),pContext))
      {
            return FALSE;
      }


Here it is, the right thing:

      if(!m_SplitWnd.CreateStatic(this, 1, 2))
      {
            return FALSE;
      }
      if(!m_SplitWnd.CreateView(0,0,RUNTIME_CLASS(CControlFormView), CSize(120,300), pContext))
      {
            return FALSE;
      }
      if(!m_SplitWnd.CreateView(0,1,RUNTIME_CLASS(CHackView),CSize(300,300),pContext))
      {
            return FALSE;
      }

In your CMainFrame::OnCreateClient, you were not handling return values correctly and prevented the creation of the mainframe.

Also at first i could not set breakpoints, in your C/C++ settings the debug info was set to none, it yshould be Program Database for a debug build.

Hope it helps,

ps: the views don't seem to draw anything, but that's something to come i guess.

0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Need to retreive data from .TFS file exported by DVR 8 244
Strange date stored 22 175
wait notify demo infinite loop 3 136
Problem to Office 1 44
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
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.
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

733 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