在图像编程的过程中,对一幅图像处理,有时候希望弹出新的窗口显示处理后的图像,因为这样可以进行多种处理效果的比较。要在多文档程序中实现多视图,需要这样做:
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);//更新视图
另外,用这个方法在图像刷新时有点问题,假设窗口一中显示原图像,窗口二为新建的窗口显示处理后的图像,窗口一种被窗口二覆盖的部分会被刷新成为窗口二中内容,还不知道该问题如何解决,求指导。