[Webinar] Streamline your web hosting managementRegister Today

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

Changing view in a static splitterView

I have  a 3 way splitter window with this configuration.

           | View 2
 View1  |---------
           | View 3

I create it with CreateStatic().

Thanks to an action on view1, I want to change view2 (from ClistView to CFormView, for example).
Unfortunatly 'from MSDN CSplitterWnd::CreateView ' :

'All panes of a static splitter window must be created before the framework displays the splitter.'

So how can I change it dynamicly?

Thanks for help in advance
0
rgrand
Asked:
rgrand
1 Solution
 
V_BapatCommented:
Check out Q196832 in Microsoft knowledge base http://support.microsoft.com/support/kb/articles/Q196/8/32.ASP


This article demonstrates how to use a static splitter window in a traditional SDI document-view architecture. The article shows how to design an application that can switch between a single view and a splitter window that can embed as many panes as necessary.

You can easily expand the code to support static splitter windows with different numbers of panes, depending on some run-time conditions.

0
 
V_BapatCommented:
You can find a few articles on CodeGuru site http://codeguru.developer.com/splitter/index.shtml
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
migelCommented:
Hi!
Also you can find some info in the PAQ:
http://www.experts-exchange.com/jsp/qShow.jsp?ta=mfc&qid=10201445 
0
 
captainkirkCommented:
1) derive a splitter window class from CSplitterWnd and create a variable of that type in your main frame

2) create the new view:
CRuntimeClass* pView = RUNTIME_CLASS(YourNewViewClass);
int nView = nSomeViewID;
CView* pNewView = (CView*)pView->CreateObject();

if (pNewView)
{
    pNewView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, pParentWnd, nView, pContext);
      
pNewView->OnInitialUpdate();
} // end if


3) change to the new view:

UINT CYourSplitterWnd::ChangeView(CView* pNewPaneView, int row, int col, UINT nOldViewID, bool bFirstView)
{
     UINT nPaneViewID = IdFromRowCol(row, col);
     UINT nNewViewID  = pNewPaneView->GetDlgCtrlID();

     if (nNewViewID == 0)
     {
      return 0;
     } // end if
     else if (nNewViewID != (UINT) m_nCurrentViewID)
     {
      m_nCurrentViewID = nNewViewID;

      // set new view active and show it...
      CFrameWnd* pFrameWnd = GetParentFrame();

      pFrameWnd->SetActiveView(pNewPaneView);
      pNewPaneView->ShowWindow(SW_SHOW);
            
      // get old view, hide it, and remove from the splitter...
      CView* pOldPaneView = (CView*)GetDlgItem(nPaneViewID);

      if (pOldPaneView)
      {
            pOldPaneView->ShowWindow(SW_HIDE);
            pOldPaneView->SetDlgCtrlID(nOldViewID);
      } // end if

      // add the new view to the splitter...
      if (pNewPaneView->GetParent() != this)
            pNewPaneView->SetParent(this);

      pNewPaneView->SetDlgCtrlID(nPaneViewID);

      if (!bFirstView)
            RecalcLayout();
      } // end else
      
      return nNewViewID;
} // end ChangeView()


I belive that's the basics of it...
hope that helps...
0
 
Vinayak KumbarSr Program ManagerCommented:
Hi,

Have the pointers of the CSplitterWnd and create them and display them. When U want to change it, delete the pointers so that view goes off and display the fresh view with the required change freshly. That should work though it is a work around method.

I had the similar problem, on some action, the requirement was to delete the view2 and show view1 abd view3 only. There I have followed the same way. I still have the sample of it too.

Try it out.

VinExpert
0
 
rgrandAuthor Commented:
all the information helps me to do my splitter.

Thanks, with some late. :)
0

Featured Post

[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

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