[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Document problem in SDI splitview application

Posted on 1998-11-18
9
Medium Priority
?
431 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 600 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
Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

 
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

Learn how to optimize MySQL for your business need

With the increasing importance of apps & networks in both business & personal interconnections, perfor. has become one of the key metrics of successful communication. This ebook is a hands-on business-case-driven guide to understanding MySQL query parameter tuning & database perf

Question has a verified solution.

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

Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
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.
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses

649 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