多文檔程序多視圖

在圖像編程的過程中,對一幅圖像處理,有時候希望彈出新的窗口顯示處理後的圖像,因爲這樣可以進行多種處理效果的比較。要在多文檔程序中實現多視圖,需要這樣做:

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);//更新視圖

另外,用這個方法在圖像刷新時有點問題,假設窗口一中顯示原圖像,窗口二爲新建的窗口顯示處理後的圖像,窗口一種被窗口二覆蓋的部分會被刷新成爲窗口二中內容,還不知道該問題如何解決,求指導。

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