// DemoDoc.cpp : implementation of the CDemoDoc class // #include "stdafx.h" #include "Demo.h" #include "DemoDoc.h" #include "DemoView.h" #include "ColorMrg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CDemo theApp; ///////////////////////////////////////////////////////////////////////////// // CDemoDoc IMPLEMENT_DYNCREATE(CDemoDoc, CDocument) BEGIN_MESSAGE_MAP(CDemoDoc, CDocument) //{{AFX_MSG_MAP(CDemoDoc) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDemoDoc construction/destruction CDemoDoc::CDemoDoc() { // TODO: add one-time construction code here } CDemoDoc::~CDemoDoc() { } CView* CDemoDoc::GetView() { CDemo* pTheApp = (CDemo*) AfxGetApp(); POSITION pos; pos = GetFirstViewPosition(); return (CDemoView*) GetNextView(pos); } BOOL CDemoDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; CDemo* pTheApp = (CDemo*) AfxGetApp(); CDemoView* pView = (CDemoView*) GetView(); L_INT nRet = 1 ; memset(m_zsFileName,0,sizeof(m_zsFileName)); lstrcpy(m_zsFileName,lpszPathName); if(pView!=NULL&&pTheApp->m_bPaintWhileLoad==TRUE) { pView->m_LAniWnd.EnablePaintWhileLoad(TRUE); pView->GetParent()->ShowWindow(SW_SHOW); pView->GetParent()->UpdateWindow(); PostMessage(pView->m_hWnd,WM_LOAD_FILE,0,0); } else nRet = OnLoadFile(FALSE); return ((nRet==SUCCESS)?TRUE:FALSE); } L_INT CDemoDoc::OnLoadFile(L_BOOL bDestroy) { L_INT nRetCode = FAILURE; CDemo* pTheApp = (CDemo*) AfxGetApp(); CDemoView* pView = (CDemoView*) GetView(); LOADFILEOPTION LoadFileOption; memset(&LoadFileOption,0,sizeof(LoadFileOption)); if((pTheApp!=NULL)&&(pView!=NULL)&&(pTheApp->m_DoucumentMode==DOCUMENT_MODE_FILE)) { OPENDLGPARAMS FOParm; FILEINFO fInfo; memset(&FOParm,0,sizeof(OPENDLGPARAMS)); pTheApp->m_LUserBitmap.DialogFile()->GetOpenParams(&FOParm, sizeof(FOParm)) ; pView->m_LAniWnd.SetFileName(m_zsFileName); LBaseFile::GetDefaultLoadFileOption(&LoadFileOption, sizeof(LoadFileOption)); LoadFileOption.PageNumber = (FOParm.pFileData)? FOParm.pFileData[0].nPageNumber : 1; pView->m_LAniWnd.File()->GetInfo(&fInfo, sizeof(fInfo), FILEINFO_TOTALPAGES, &LoadFileOption); pView->m_LAniWnd.EnableLoop(); pView->m_LAniWnd.EnableAutoAnimate(); nRetCode = pView->m_LAniWnd.Load( fInfo.BitsPerPixel, ORDER_BGRORGRAY, &LoadFileOption, &fInfo); if(nRetCode!=SUCCESS) { if(nRetCode == ERROR_PDF_BAD_INITIALIZATION_FILES) { if( IDYES == MessageBox( AfxGetMainWnd()->m_hWnd, TEXT("LEADTOOLS PDF plugin is not found, do you want to download the plugin now?"), TEXT("Open file"),MB_ICONEXCLAMATION | MB_YESNO)) ShellExecute(AfxGetMainWnd()->m_hWnd, TEXT("open"), TEXT("http://www.leadtools.com/ReleaseDownloads/v14/LEADTOOLSPDFRuntime.exe"), NULL, NULL, SW_SHOWNORMAL); } else LBase::DisplayErrorFromList(); if(bDestroy==TRUE) pView->GetParent()->DestroyWindow(); } DisplayDICOMLoadMsg(AfxGetMainWnd()->m_hWnd, (FOParm.pFileData)? FOParm.pFileData[0].pFileInfo: NULL, m_zsFileName); } return (nRetCode); } #define DICOM_LOAD_MSG _T("This demo loads raster images stored in DICOM files.\n") \ _T("For full DICOM support, refer to the LEADTOOLS Medical Imaging demos.") L_VOID CDemoDoc::DisplayDICOMLoadMsg(HWND hWnd, pFILEINFO pInfo, L_TCHAR L_FAR* pszFilename) { CDemoView* pView = (CDemoView*) GetView(); CDemo* pTheApp = (CDemo*) AfxGetApp(); FILEINFO fi; L_INT nFormat; memset(&fi, 0, sizeof(FILEINFO)); if(pTheApp->m_bDICOMLoadMsg) { if(pInfo) nFormat = pInfo->Format; else { pView->m_LAniWnd.File()->GetInfo(&fi, sizeof(fi), NULL); nFormat = fi.Format; } switch(nFormat) { case FILE_DICOM_GRAY: case FILE_DICOM_COLOR: case FILE_DICOM_RLE_GRAY: case FILE_DICOM_RLE_COLOR: case FILE_DICOM_JPEG_GRAY: case FILE_DICOM_JPEG_COLOR: pTheApp->m_bDICOMLoadMsg = FALSE; //only do this one time MessageBox(hWnd, DICOM_LOAD_MSG, _T("DICOM Load Information"), MB_OK); break; } } return; } BOOL CDemoDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; L_INT nRetCode = SUCCESS; CDemo* pTheApp = (CDemo*) AfxGetApp(); CDemoView* pView = (CDemoView*)GetView(); if(pView==NULL||pTheApp==NULL) return FALSE; switch(pTheApp->m_DoucumentMode) { case DOCUMENT_MODE_BITMAP: nRetCode = pView->m_LAniWnd.SetHandle(pTheApp->m_LUserBitmap.GetHandle()); break; case DOCUMENT_MODE_BITMAPLIST: pView->m_LAniWnd.SetBitmapList(&pTheApp->m_LBitmapList, NULL); break; case DOCUMENT_MODE_COLORMERGE: nRetCode = OnOpenColorMerge(pView) ; if (nRetCode != SUCCESS) pTheApp->m_nColrMrgNo-- ; break ; default: nRetCode = ERROR_INV_PARAMETER; } if(nRetCode != SUCCESS) return FALSE; SetTitle(pTheApp->m_szCaption); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CDemoDoc serialization void CDemoDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } ///////////////////////////////////////////////////////////////////////////// // CDemoDoc diagnostics #ifdef _DEBUG void CDemoDoc::AssertValid() const { CDocument::AssertValid(); } void CDemoDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CDemoDoc commands L_INT CDemoDoc::OnOpenColorMerge(CDemoView *pView) { CColorMerge colorMergeDlg(this) ; CDemo* pTheApp = (CDemo*) AfxGetApp(); L_INT nRet = 0; if (colorMergeDlg.DoModal() == IDOK) { LBitmap Planes[4]; CDemoView *pDemoView; BeginWaitCursor(); for(L_INT i = 0; i < 4; i++) { CDocument * pDoc = colorMergeDlg.m_pDocument[i]; if (pDoc!= NULL) { POSITION pos = pDoc->GetFirstViewPosition(); if (pos != NULL) { pDemoView = (CDemoView *)pDoc->GetNextView(pos) ; if(pDemoView!=NULL) Planes[i].Copy(pDemoView->m_LAniWnd); } } } nRet = pView->m_LAniWnd.ColorMerge(Planes, sizeof(BITMAPHANDLE), colorMergeDlg.m_dwFlags); EndWaitCursor(); } return (nRet) ; }