多文档程序多视图

在图像编程的过程中,对一幅图像处理,有时候希望弹出新的窗口显示处理后的图像,因为这样可以进行多种处理效果的比较。要在多文档程序中实现多视图,需要这样做:

1、新建一个视图类CShowView1,该视图类的基类可以是CView或CSrollView.

2、在菜单中添加菜单项,在框架类CMainFrame中添加菜单响应函数。

3、在响应函数中添加以下代码可以创建新的窗口并显示处理后的图像:

 CMDIChildWnd* pActiveChild = MDIGetActive();//获得子窗口
 CImageProcessDoc* pDoc = (CImageProcessDoc*)pActiveChild->GetActiveDocument();//获得当前文档
 CShowView1* pView = (CShowView1*)pActiveChild->GetActiveView();//获得当前视图,有时候没有用
 //添加进行图像处理的代码,以下以中值滤波代码为例
 if (pDoc->m_hDIB == NULL)
 {
  AfxMessageBox("请先打开一幅图像!", MB_OK);
  return;
 }
 
 CSmoothMedian dlgSmoothMedian;
 if (dlgSmoothMedian.DoModal() == IDOK)
 {
  int nSmoothSize = 0;
  if (dlgSmoothMedian.m_nSmoothSize == 0)
  {
   nSmoothSize = 7;
  }
  else
   nSmoothSize = 5; 
  pDoc->SmoothMedian(pDoc->m_lpDIBBits, pDoc->m_lWidth, pDoc->m_lHeight, pDoc->m_dwWidthBytes, nSmoothSize);//中值滤波平滑
 }
 //获得新的文档模板的指针,重点修改之处
 CDocTemplate* pTemplate = ((CImageProcessApp*)AfxGetApp())->m_pTemplateShowView1;
 ASSERT_VALID(pTemplate);

 //创建新的框架窗口
 CFrameWnd* pNewFrame = pTemplate->CreateNewFrame(pDoc, pActiveChild);
 pTemplate->InitialUpdateFrame(pNewFrame, pDoc);//更新视图

另外,用这个方法在图像刷新时有点问题,假设窗口一中显示原图像,窗口二为新建的窗口显示处理后的图像,窗口一种被窗口二覆盖的部分会被刷新成为窗口二中内容,还不知道该问题如何解决,求指导。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章