2 michael5001 michael5001 于 2014.09.14 21:04 提问

关于MFC静态切分窗口的问题

问题描述:
我新建了一个单文档工程,然后对窗口进行了静态切分,分成了两部分。我在左边的部分创建了两个按钮,想实现点击按钮在右边显示对应的视图。
我的代码如下:
一共有三个视图: View1, view2, view3;
首先我继承了OnCreateClient函数
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect cr;
GetWindowRect(&cr);
if(m_wndSplitter.CreateStatic(this, 1, 2) == NULL)
{
return FALSE;
}
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMyView1), CSize(cr.Width()/4, cr.Height()), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(3*cr.Width()/4, cr.Height()), pContext);
return TRUE;
}
然后我在左边的视图上创建了两个Button: 希望能够控制右面的视图。
然后我自定义了消息。
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_FIRST_VIEW, OnSwitchToFirst) // ID_FIRST_VIEW 是自己定义的
On_COMMAND(ID_SECOND_VIEW, OnSwitchToSecond)
END_MESSAGE_MAP()

Button 在 CView1 类中添加了通知处理
void CMyTreeBar::OnButton1()
{
AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND, ID_FIRST_VIEW);

}
void CMyTreeBar::OnButton2()
{
AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND, ID_SECOND_VIEW);

}

然后在CMainFrame中添加了响应函数
void CMainFrame::OnSwitchToFirst()
{
m_wndSplitter.DeleteView(0, 1);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(0, 0), NULL);
m_wndSplitter.RecalcLayout();
}
void CMainFrame::OnSwitchToSecond()
{
m_wndSplitter.DeleteView(0, 1);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(0, 0), NULL);
m_wndSplitter.RecalcLayout();
}

但是运行结果 点击Button2, View2 消失了,但是没有吧 View3 显示出来。
点击Button1, View2 又显示出来了。 // 程序运行都是正确的
总之就是没有实现了切换。我是新手,很着急,请各位好心大哥给点建议和帮助。
急急急!!!!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!