我用MDI创建了一个工程,用来对图片进行边缘检测处理。
现在要求把窗口用CSplitter分割成6个视图,以便可以
在一个界面下同时对六张图片进行处理和处理结果的比较。目前分割部分已经完成,但是载入图片时只在当前激活(SetActiveView)
的视图中有显示,其他视图没有显示,请问该怎么处理才能
在图片一载入后六个视图都同时显示呢?一下是分割视图的代码:BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// CG: The following block was added by the Splitter Bar component.
if (!m_wndSplitter.CreateStatic(this, 2, 2))
{
TRACE0("Failed to Splitter window\n");
return FALSE;
} // add the first splitter pane - the default view in column 0
if (!m_wndSplitter.CreateView(0, 0,
pContext->m_pNewViewClass, CSize(320, 320), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
} // add the second splitter pane - an input view in column 1
if (!m_wndSplitter.CreateView(0, 1,
RUNTIME_CLASS(CMyFormView), CSize(320, 320),pContext)) //创建多视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(1, 0,
RUNTIME_CLASS(CMyFormView2), CSize(320, 320),pContext)) //创多双视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(1, 1,
RUNTIME_CLASS(CMyFormView3), CSize(320, 320),pContext)) //创建多视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
// activate the input view
SetActiveView((CView*)m_wndSplitter.GetPane(0,0)); //激活当前视图
}
}
现在要求把窗口用CSplitter分割成6个视图,以便可以
在一个界面下同时对六张图片进行处理和处理结果的比较。目前分割部分已经完成,但是载入图片时只在当前激活(SetActiveView)
的视图中有显示,其他视图没有显示,请问该怎么处理才能
在图片一载入后六个视图都同时显示呢?一下是分割视图的代码:BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// CG: The following block was added by the Splitter Bar component.
if (!m_wndSplitter.CreateStatic(this, 2, 2))
{
TRACE0("Failed to Splitter window\n");
return FALSE;
} // add the first splitter pane - the default view in column 0
if (!m_wndSplitter.CreateView(0, 0,
pContext->m_pNewViewClass, CSize(320, 320), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
} // add the second splitter pane - an input view in column 1
if (!m_wndSplitter.CreateView(0, 1,
RUNTIME_CLASS(CMyFormView), CSize(320, 320),pContext)) //创建多视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(1, 0,
RUNTIME_CLASS(CMyFormView2), CSize(320, 320),pContext)) //创多双视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(1, 1,
RUNTIME_CLASS(CMyFormView3), CSize(320, 320),pContext)) //创建多视图
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
// activate the input view
SetActiveView((CView*)m_wndSplitter.GetPane(0,0)); //激活当前视图
}
}
解决方案 »
- buffer字符串转成bmp做界面显示
- 如何在VC++6.0环境下开发程序监测Windows2003系统注销事件?
- vc++ 6.0 go to definition of "***" 后如何返回"***" 处?
- 如何在单文档中嵌入一个对话框?
- 请问如何制作出其他底色的工具栏?
- 为什幺移动对话框不能撤底刷新
- 在DLL中的CoInitialize(),和隐式调用它的EXE的CoInitialize()是一个么?如果是一个,我想分别UnCoInitialize该怎么办??谢谢
- 请问,界面无法实现中文显示是怎么回事?
- 关于dll窗口句柄
- 如下的界面如何更好的布局
- C语言读取文件内容问题
- 一个24位图像转灰度图的问题
方法一:
POSITION pos = GetFirstViewPosition();
while(pos != NULL)
{
CView* pView = GetNextView(pos);
CChildFrame *pChild = (CChildFrame*)pView->GetParentFrame();//获得该view的父窗口
//pChild->MDIActivate();
//pView->GetParentFrame()->GetLastActivePopup()->BringWindowToTop();//激活视图
POSITION pos = GetFirstViewPosition();
while(pos != NULL)
{
CView* pView = GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CMyFormView)))
ChangeView(RUNTIME_CLASS(CMyFormView));
else if(pView->IsKindOf(RUNTIME_CLASS(CMyFormView1)))
ChangeView(RUNTIME_CLASS(CMyFormView1));
else if(pView->IsKindOf(RUNTIME_CLASS(CMyFormView2)))
ChangeView(RUNTIME_CLASS(CMyFormView2));
else if(pView->IsKindOf(RUNTIME_CLASS(CMyFormView3)))
ChangeView(RUNTIME_CLASS(CMyFormView3));
else if(pView->IsKindOf(RUNTIME_CLASS(CMyFormView4)))
ChangeView(RUNTIME_CLASS(CMyFormView4));
UpdateAllViews(NULL);
}
void CPicture_SplitDoc::ChangeView(CRuntimeClass *pRTClass)
{
CMainFrame * m_mainFrame = (CMainFrame *)AfxGetMainWnd();
//m_mainFrame->MDIGetActive()->GetActiveDocument()->UpdateAllViews(NULL);
CChildFrame *child = (CChildFrame *)m_mainFrame->GetActiveFrame();
// 先删除原来的视
child->m_wndSplitter.DeleteView(0,0);
// 创建新的视
CCreateContext Context;
Context.m_pNewViewClass = pRTClass; // 视类
Context.m_pCurrentDoc = m_mainFrame->MDIGetActive()->GetActiveDocument();// 与文档连接
child->m_wndSplitter.CreateView(0,0,pRTClass,CSize(0,0),&Context);
CView * pView = (CView *)child->m_wndSplitter.GetPane(0,0);// 获取分割区域
pView->ShowWindow(SW_SHOW);
pView->OnInitialUpdate();
child->SetActiveView(pView);
//child->m_wndSplitter.SetRowInfo(0,300,20); // 设置宽度
::SetWindowLong(pView->m_hWnd,GWL_ID,AFX_IDW_PANE_FIRST);
child->m_wndSplitter.RecalcLayout();}
以上这两种方法都放在图片打开的函数FileOpen()里面,
目的就是为了逐个视图进行更新,可是都没有效果,
请问大虾们这该怎么解决???
FileOpen()也是在CPicture_SplitViewDoc定义的,
上面的方法中也用到了UpdateAllViews(NULL);
可是都没效果