Link to home
Start Free TrialLog in
Avatar of cpj196
cpj196

asked on

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
ASKER CERTIFIED SOLUTION
Avatar of motigust
motigust

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of cpj196
cpj196

ASKER

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
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