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?
AshurbanipalAsked:
Who is Participating?
 
CriusConnect With a Mentor Commented:
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
 
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
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.

 
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
 
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
 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.