如何在Csplitterwnd的某个pane中,动态切换view 如何在Csplitterwnd的某个pane中,动态切换view. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下:=======BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class m_splitter_left_right.CreateStatic(this,1,2); m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext); m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext); /// Create views============================= p_classview=new CClassView; p_studentview=new CStudentView; p_loadview=new CLoadView; p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0), &m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL); //=========================================== return TRUE;//CFrameWnd::OnCreateClient(lpcs, pContext);}======================void CMainFrame::OnDatamgLoad() { CView * p_view=GetActiveView(); //set ctrl id p_view->SetDlgCtrlID(p_loadview->GetDlgCtrlID()); p_loadview->SetDlgCtrlID(AFX_IDW_PANE_FIRST); p_view->ShowWindow(SW_HIDE); p_loadview->ShowWindow(SW_SHOW); m_splitter_left_right.SetActivePane(0,1,p_loadview); //SetActiveView(p_loadview); RecalcLayout(); //........... // TODO: Add your command handler code here }======= 这样出来的,只是左边那个pane被换掉了,我需要的,是换右边那个pane example:http://www.codeguru.com/splitter/SplitterTog.shtml ??? 不会呀。现在右边的View换不掉啊。 我也想用这个,但我换的是左边的,楼主可否发左边的给鹅,鹅谢谢了。[email protected] p_classview=new CClassView; p_studentview=new CStudentView; p_loadview=new CLoadView; p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0), &m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL);一般来说,不应当用new的方法生成view对象。应当用CSplitterWnd::CreateView生成view,你好像想动态改变每一个pane上的view,我知道有两种方法肯定可以做到:1.生成5个列,然后用CreateView生成每一个view。然后把没有用的view用ShowWindow隐藏。m_splitter_left_right.CreateStatic(this,1,5);不过需要处理一些细节问题,你可以看CSplitterWnd的源代码。2.使用MDI界面,不要替换pane上的view,而是为每一组view生成一个ChildFrame,然后用CFrameWnd::ActiveFrame来显示子框架,这个方法最可靠。还有一种方法不知道行不行:在你的CMainFrame::OnDatamgLoad重新干下面事情: m_splitter_left_right.CreateStatic(this,1,2); m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext); m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext);其中pContext可以自己创建,关联当前的视。 Tab Control怎么能这样显示 有关CRichEditCtrl控件的滚动问题!请高手指点,线上等! VC发烧友群:16054973 如何使Windows程序UI中控件具有XP Style? 为什么不能把已经装载了图象数据的内存区域付给另一个内存区域?? 显示象素大小的问题 类的相互调用问题-视窗和对话框传输数据解决方案-Apply按钮的实现? vc 如何通过gpib 获取aglient 电容测试计的测量数据 怎样获得CFromView类的窗口句柄 vs2013基本设置 各个同仁,真的拿不定主意! 菜鸟问题,请回答!
=======
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
m_splitter_left_right.CreateStatic(this,1,2);
m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext);
m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext);
/// Create views=============================
p_classview=new CClassView;
p_studentview=new CStudentView;
p_loadview=new CLoadView;
p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),
&m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL); //=========================================== return TRUE;//CFrameWnd::OnCreateClient(lpcs, pContext);
}
======================
void CMainFrame::OnDatamgLoad()
{
CView * p_view=GetActiveView();
//set ctrl id
p_view->SetDlgCtrlID(p_loadview->GetDlgCtrlID());
p_loadview->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
p_view->ShowWindow(SW_HIDE);
p_loadview->ShowWindow(SW_SHOW);
m_splitter_left_right.SetActivePane(0,1,p_loadview);
//SetActiveView(p_loadview);
RecalcLayout();
//...........
// TODO: Add your command handler code here
}
=======
http://www.codeguru.com/splitter/SplitterTog.shtml
[email protected]
p_studentview=new CStudentView;
p_loadview=new CLoadView;
p_loadview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),
&m_splitter_left_right,AFX_IDW_PANE_FIRST+1,NULL);一般来说,不应当用new的方法生成view对象。应当用CSplitterWnd::CreateView生成view,你好像想动态改变每一个pane上的view,我知道有两种方法肯定可以做到:1.生成5个列,然后用CreateView生成每一个view。然后把没有用的view用ShowWindow隐藏。
m_splitter_left_right.CreateStatic(this,1,5);
不过需要处理一些细节问题,你可以看CSplitterWnd的源代码。
2.使用MDI界面,不要替换pane上的view,而是为每一组view生成一个ChildFrame,然后用CFrameWnd::ActiveFrame来显示子框架,这个方法最可靠。还有一种方法不知道行不行:
在你的CMainFrame::OnDatamgLoad重新干下面事情:
m_splitter_left_right.CreateStatic(this,1,2);
m_splitter_left_right.CreateView(0,0,RUNTIME_CLASS(CLeftBarView),CSize(150,0),pContext);
m_splitter_left_right.CreateView(0,1,RUNTIME_CLASS(CDEMOView),CSize(0,0),pContext);
其中pContext可以自己创建,关联当前的视。