Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 242
  • Last Modified:

problem with splitter windowsI

When I normally build and run my application it uses mdi and splitter windows.  However there are times when I want to build and run it and only have one view showing.  My problem is that everything is set up to create a splitter window, but splitter windows won't work with a single row and single column.  Is there an easy work around?
0
Ashurbanipal
Asked:
Ashurbanipal
  • 6
  • 4
  • 3
  • +2
1 Solution
 
AlexNekCommented:
2 Ashurbanipal
>..won't work with a single row and single column.
You must have at least 2 columns or 2 rows.
Create an empty second view with split size 0.
0
 
mblatCommented:
And you also can prevent user from "opening" empty part of splitter.
0
 
AshurbanipalAuthor Commented:
Won't this still show an extra thick line on one side?

Is there any way to supress the splitter code completely depending on build settings?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
CriusCommented:
You said it's an MDI application, right? Create the view with the MDI template that doesn't contain the splitter window class.

The view you want to show is inside a splitter window, and has to be fully formed already into a template. Just create that template instance instead of the splitter window template instance.

Am I making any sense?
0
 
AshurbanipalAuthor Commented:
What you say makes sense in theory, it's applying it to the problem that's giving me grief.


In CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,
     CCreateContext* pContext)

I did a test for the not splitter condition and then tried
          pContext->m_pNewViewClass=RUNTIME_CLASS(CPictureView);
return CFrameWnd::OnCreateClient(lpcs,pContext);
but that doesn't work.

I've upped the points.
0
 
AshurbanipalAuthor Commented:
Let me rephrase the problem.  I've got an application that normally comes up with a splitter window.  One of the views displayed is CPictureView.  Under some situations I don't need or want a splitter and just want CPictureView to appear.

Some sample code would sure help.
0
 
CriusCommented:
You have a CDocument, a CView, and a CFrameWnd class, right? Construct a template by combining those 3 classes (if you haven't already), then do a pDocTemplate->OpenDocumentFile(NULL);

Hope this helps...
0
 
CriusCommented:
   pDocTemplate = new CMultiDocTemplate(
         IDR_MAINFRAME,
         RUNTIME_CLASS(CDocument),
         RUNTIME_CLASS(CChildFrame),
         RUNTIME_CLASS(CPictureView));
    AddDocTemplate(pDocTemplate);

pDocTemplate->OpenDocumentFile(NULL);
0
 
CriusCommented:
One last thing, be sure to disable the new open that's default for MDI apps.

In BOOL CMyWinApp::InitInstance()

just before the lines:
   if (!ProcessShellCommand(TheCommandLineInfo))
         return FALSE;

add in:
    if (TheCommandLineInfo.m_nShellCommand == CCommandLineInfo::FileNew)
     TheCommandLineInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
0
 
AlexNekCommented:
2 Ashurbanipal
>CMainFrame::OnCreateClient...
It seems as SDI.

If CPictureView was 1-st view than use "empty" function

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
   return CFrameWnd::OnCreateClient(lpcs, pContext);
}

if it was the second, replace the view in addition:
CSingleDocTemplate* pDocTemplate;
     pDocTemplate = new CSingleDocTemplate(
          IDR_MAINFRAME,
          RUNTIME_CLASS(CTestNoSplitterDoc),
          RUNTIME_CLASS(CMainFrame),       // main SDI frame window
          RUNTIME_CLASS(CPictureView));
     AddDocTemplate(pDocTemplate);

You can split old and new code with construction like
#ifdef SPLITTER
#else
#endif
0
 
CriusCommented:
No matter which solution you end up using, I don't recommend #ifdef anything. You can use a simple if statement to do the same thing. Using an if statement, you can choose how the program will run with a variable. You could set this variable in any way. For example, a command line argument, a menu item, registry settings, a start-up .ini file, etc...
0
 
AlexNekCommented:
2 Crius
I suggest #ifdef based on this phrase:
>..depending on build settings?

0
 
CriusCommented:
Yes, I read that specification. I disagree with it because I believe there is a better way. Your suggestion does answer what he is asking, but I am proposing what I consider to be a better way of doing things - beyond what is being asked/wanted.

Nothing personal AlexNek. :) I commonly suggest what I think are better solutions for accomplishing something, even if they are considerably different than what is being asked.
0
 
DanRollinsCommented:
Ashurbanipal,
If the above is not yet making sense, then please post the current contents of your

     CMainFrame::OnCreateClient(...

function.  We can describe how to modify it to meet your needs.

-- Dan
0
 
AshurbanipalAuthor Commented:
Your solution seems to work.

The view is displaying some odd problems though and I will post the difficulty in a separate question with separate points.

Thanks
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 6
  • 4
  • 3
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now