我有一个MFC程序写入,读取文件,存储数据,并将其作为文本绘制在客户端视图上。用菜单按钮分割两个视图? (MFC)
我想制作一个菜单按钮View-> Split,将客户区域拆分为两个,分别滚动显示相同数据的视图。
我在网上看到了一些关于CWndSplitter的内容,并通过一些文档进行了阅读,但没有一篇文章证明是有用的,因为他们谈论了使用OnCreate并删除默认视图以使其工作。这不是一个选项。我想保留默认视图,但如果用户单击按钮将其分成两部分。
我目前创建了一个CWndSplitter成员变量,并在SDI-1View.cpp中定义了一个菜单按钮事件处理程序。被调用时,它绝对不会导致屏幕闪烁,并且第二次点击会使程序崩溃。
void CSDI1View::OnViewSplit32778()
{
// TODO: Add your command handler code here
/*
int rows = 2;
int columns = 1;
if (!m_wndSplitter.CreateStatic(this, rows, columns))
return;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSDI1View), CSize(100, 100), NULL) ||
(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CSDI1View), CSize(100, 100), NULL)))
{
m_wndSplitter.DestroyWindow();
return;
}
*/
}
任何人都可以告诉我什么将客户端视图分成两半的正常方法是?我只想将它集成到事件处理程序中。 任何帮助将不胜感激。
谢谢。
--------------------------------编辑------------- ---------------------
我现在在我的Split按钮事件处理程序中有以下代码,这要归功于xMRi提供的轮廓,但它仍然是工作不正常...
void CMainFrame::OnViewSplit()
{
// TODO: Add your command handler code here
//calculate client size
CRect cr;
GetClientRect(&cr);
if (!m_mainSplitter.CreateStatic(this, 2, 1))
{
MessageBox(_T("Error setting up splitter frames! (CreateStatic)"),
_T("Init Error!"), MB_OK | MB_ICONERROR);
return;
}
// Set the parent of the splitter window to the current view
CSDI1View * view = CSDI1View::GetView();
m_mainSplitter.SetParent(this);
view->SetParent(&m_mainSplitter);
// Create a CCreateContext
CCreateContext cc;
CRuntimeClass* prt = RUNTIME_CLASS(CSDI1View);
cc.m_pNewViewClass = prt;
cc.m_pCurrentDoc = view->GetDocument();
cc.m_pNewDocTemplate = NULL;
cc.m_pLastView = NULL;
cc.m_pCurrentFrame = this;
if (!m_mainSplitter.CreateView(0, 0,
cc.m_pNewViewClass,
CSize(cr.Width(), cr.Height()/2), &cc))
{
MessageBox(_T("Error setting up splitter frames! (CreateView 1)"),
_T("Init Error!"), MB_OK | MB_ICONERROR);
return;
}
if (!m_mainSplitter.CreateView(1, 0,
cc.m_pNewViewClass,
CSize(cr.Width(), cr.Height()/2), &cc))
{
MessageBox(_T("Error setting up splitter frames! (CreateView 2)"),
_T("Init Error!"), MB_OK | MB_ICONERROR);
return;
}
m_bInitSplitter = TRUE;
}
在点击查看 - >劈扣,我得到一个“调试断言错误”弹出式和第一次调用CreateView的返回FALSE,显示我的消息框:“错误设置分离器框!(CreateView 1)“
感谢您的支持。我想创建一个静态分割,我可以通过切换父母的方式打开和关闭,本质上是xMRi在他的答案中描述的。我遇到了另一个问题,请看我的问题编辑。 – JayB 2014-11-21 15:30:00