michael5001 2014-09-14 13:04 采纳率: 0%
浏览 829

关于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 又显示出来了。 // 程序运行都是正确的
总之就是没有实现了切换。我是新手,很着急,请各位好心大哥给点建议和帮助。
急急急!!!!

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:40
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突