Solved

problem with splitter windowsI

Posted on 2002-05-17
15
204 Views
Last Modified: 2013-11-20
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
Comment
Question by:Ashurbanipal
  • 6
  • 4
  • 3
  • +2
15 Comments
 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
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
 
LVL 4

Expert Comment

by:mblat
Comment Utility
And you also can prevent user from "opening" empty part of splitter.
0
 

Author Comment

by:Ashurbanipal
Comment Utility
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
 
LVL 3

Expert Comment

by:Crius
Comment Utility
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
 

Author Comment

by:Ashurbanipal
Comment Utility
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
 

Author Comment

by:Ashurbanipal
Comment Utility
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
 
LVL 3

Expert Comment

by:Crius
Comment Utility
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
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 3

Expert Comment

by:Crius
Comment Utility
   pDocTemplate = new CMultiDocTemplate(
         IDR_MAINFRAME,
         RUNTIME_CLASS(CDocument),
         RUNTIME_CLASS(CChildFrame),
         RUNTIME_CLASS(CPictureView));
    AddDocTemplate(pDocTemplate);

pDocTemplate->OpenDocumentFile(NULL);
0
 
LVL 3

Expert Comment

by:Crius
Comment Utility
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
 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
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
 
LVL 3

Expert Comment

by:Crius
Comment Utility
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
 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
2 Crius
I suggest #ifdef based on this phrase:
>..depending on build settings?

0
 
LVL 3

Accepted Solution

by:
Crius earned 200 total points
Comment Utility
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
 
LVL 49

Expert Comment

by:DanRollins
Comment Utility
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
 

Author Comment

by:Ashurbanipal
Comment Utility
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

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Here is how to use MFC's automatic Radio Button handling in your dialog boxes and forms.  Beginner programmers usually start with a OnClick handler for each radio button and that's just not the right way to go.  MFC has a very cool system for handli…
Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
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 tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

743 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now