• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1056
  • Last Modified:

MFC splitter Windows

Hi,
When a splitter window is created, MFC seems to only like it when you specify a view for EVERY column and row, else you get an assertion.  I want to be able to have a single static splitter window with 2 columns in the top row and one column in the bottom row (this is for an IRC client), but at the moment i can only have it so that there are 2 columns in both the top and bottom rows.
Anyone know How I get around this? (100)
Thanks a lot...
Chris
0
cpj196
Asked:
cpj196
  • 2
1 Solution
 
motigustCommented:
You need to splitters here:

1. The first splitter splits the window Horizontaly (one at the
top and one at the bottom)

2. The second splitter splits the upper window vertically.

In order to do that:
1. Create a regular horizontal splitter (Using the wizard)
2. Using the upper view of that splitter create another one
(Vertical)

good luck.


0
 
cpj196Author Commented:
Thanks!,
This was very helpful, and i now have 3 panes as required.  Although, i am still having probelms with the initial sizing when the window is created.  I have a size structure that contains the window size by getting the client rect area.  Ideally, when the application loads, i want the bottom pane  (for typing into) to be about 30 pixels high, the top left pane (for receiving IRC messages) to be y - 30 pixels high and x - 100 pixels wide, and the top right pane (for displaying usernames of users on current channel) to be y-30 pixels high and 100 pixels wide.
The code i am using is not working, creating all the panes but then making the bottom one (typing into pane) take up the entire window!
I am using the following code...

BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT,
      CCreateContext* pContext)
{
      if (m_wndSplitter.CreateStatic(this,2,1)) // OK
      {
            CRect rect;
            GetClientRect(&rect);
            CSize size = rect.Size();
            
            if (m_topwndSplitter.CreateStatic(&m_wndSplitter,1,2, WS_CHILD | WS_VISIBLE | WS_BORDER, m_wndSplitter.IdFromRowCol(0, 0)))
            {
                  if (m_topwndSplitter.CreateView(0,0,RUNTIME_CLASS(CChatView),CSize(size.cx-120,size.cy-30),pContext))
                  {                        
                        if (m_topwndSplitter.CreateView(0,1,RUNTIME_CLASS(CNameView),CSize(0,0), pContext))
                        {
                              if (m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSendView),CSize(0,0),pContext))
                              {
                                    SetActiveView((CView*)m_wndSplitter.GetPane(1,0));
                                    return TRUE;      
                              }
                                                                        
                        }
                  }
            }
      }
      return FALSE;
}


Wot am i doing wrong! ?
Please help! :-)
Thanks again for the previous response,
Chris J
0
 
motigustCommented:
cpj,

To move the horizontal splitter up and down use

int posy = 30; // x position
m_wndSplitter.SetRowInfo(0,posy,posy);

To move the vertical splitter left and right use

int posx = 180; // y position
m_topwndSplitter.SetColumnInfo(0,posx,posx);

Use these funtions after the splitter were created


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.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

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.

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