Loading a Data Set (C++ 6.0 and later)
Take the following steps to start a project and to add some code that loads a DICOM Data Set and prints information about the data set.
| 1. | Start a new project as follows: | |
| 
 | For C++ 6.0, run Microsoft Visual C++ 6.0, select the File >New menu option, and do the following: | |
| 
 | a. | Click the Projects tab. | 
| 
 | b. | Select MFC AppWizard (exe) as the project type | 
| 
 | c. | In the Project name text box, specify dicom. | 
| 
 | d. | In the Location text box, specify the path of the project. | 
| 
 | e. | Click the OK button. | 
| 2. | In the Step 1 dialog box, do the following: | |
| 
 | a. | Select Dialog based. | 
| 
 | b. | Click the Next button. | 
| 3. | In the Step 2 of 4 dialog box, do the following: | |
| 
 | a. | Ensure that About Box is selected. | 
| 
 | b. | Ensure that 3D Controls is selected. | 
| 
 | c. | Select ActiveX Controls. | 
| 
 | d. | Click the Next button. | 
| 4. | In the Step 3 of 4 dialog box, do the following: | |
| 
 | a. | For comments, ensure that Yes, Please is selected. | 
| 
 | b. | For how to use the MFC library, select As a shared DLL. | 
| 
 | c. | Click the Next button. | 
| 5. | In the Step 4 of 4 dialog box, just click Finish. | |
| 6. | Read New Project Information, and click OK. (The AppWizard creates the project files and opens the project.) | |
| 7. | Import the DICOM COM Object type libraries into your projects as follows: | |
| 
 | a. | Copy the \lead\include\l_com.h and ltkey.h files to your project directory. | 
| 
 | b. | In the Project Workspace, click the FileView tab. | 
| 
 | c. | Double-click the dicom files folder to open it. | 
| 
 | d. | Double-click the the Header Files folder to open it. | 
| 
 | e. | Double-click the StdAfx.h file to edit it. | 
| 
 | f. | Add the following lines to the file, just before "AFX_INSERT_LOCATION": | 
#include "l_com.h"
#import <ltrvr14n.dll> no_namespace, named_guids, exclude("RasterSupportLockConstants")
#import <ltr14n.dll> no_namespace, named_guids, exclude("RasterSupportLockConstants")
#import <ltrvw14n.ocx> no_namespace, named_guids
#import <ltrpr14n.dll> no_namespace, named_guids
#import <ltrio14n.dll> no_namespace, named_guids, exclude("LoadResizeConstants"), exclude("J2KLimitConstants"), exclude("J2KProgressionFlags"), exclude("J2KRegionOfInterest")
#import <LTDicKrn14n.dll> no_namespace, named_guids, exclude("LoadDirectoryFlags")
#import <LTDicDS14n.dll> no_namespace, named_guids, exclude("DicomAnnSaveModifyConstants"), exclude("DicomCommandSetMessagePriorities")
#import <LTDicNet14n.dll> no_namespace, named_guids
#import <LTDPScu14n.dll> no_namespace, named_guids#ifndef MAKETAG
   #define MAKETAG(nGroup,nElement) ((unsigned long)((((unsigned long)nGroup) << 16) | nElement))
   #define GETGROUP(nTag)           ((unsigned short)(nTag >> 16))
   #define GETELEMENT(nTag)         ((unsigned short)(nTag & 0xFFFF))
#endif
| 8. | Add a LEADDicomDS COM Object to the application as follows: | |
| 
 | a. | In the Project Workspace, click the FileView tab. | 
| 
 | b. | Double-click the dicom files folder to open it. | 
| 
 | c. | Double-click the Header Files folder to open it. | 
| 
 | d. | Double-click the dicomDlg.h file to edit it. | 
| 
 | e. | Add the following lines to the file, just after the class constructor: | 
ILEADDicomDS *m_pLEADDicomDS;
| 9. | Go to the OnInitDialog() function as follows: | |
| 
 | a. | In the Project Workspace, click the ClassView tab. | 
| 
 | b. | Double-click the Dicom classes folder to open it. | 
| 
 | c. | Expand the CDicomDlg class. | 
| 
 | d. | Double-click the OnInitDialog() function to edit it. | 
| 10. | Edit the OnInitDialog() function to add the following code after the line that says //TODO: Add extra initialization here: | |
   BSTR lpLic = SysAllocString(_szLicString);
   ILEADDicomFactory *pFactory=NULL;
   CoCreateInstance(CLSID_LEADDicomFactory, NULL, CLSCTX_ALL,
                    IID_ILEADDicomFactory, (void**)&pFactory);
#if _MSC_VER < 1200
   m_pLEADDicomDS = (ILEADDicomDS*)pFactory->CreateObject ("LEADDicomDS.LEADDicomDS", lpLic);
#else
   ILEADDicomDSPtr spLEADDicomDS=NULL;
   spLEADDicomDS = pFactory->CreateObject ("LEADDicomDS.LEADDicomDS", lpLic);
   m_pLEADDicomDS = spLEADDicomDS;
   m_pLEADDicomDS->AddRef();//because when spLEADDicomDS goes out of scope, it will auto Release()!
#endif
   m_pLEADDicomDS->EnableMethodErrors = FALSE;
   // Unlock DICOM support.
   ILEADDicomKernel *pLEADDicomKernel = NULL;
#if _MSC_VER < 1200
   pLEADDicomKernel = (ILEADDicomKernel*)pFactory->CreateObject ("LEADDicomKernel.LEADDicomKernel", lpLic);
#else
   ILEADDicomKernelPtr spLEADDicomKernel=NULL;
   spLEADDicomKernel = pFactory->CreateObject ("LEADDicomKernel.LEADDicomKernel", lpLic);
   pLEADDicomKernel = spLEADDicomKernel;
   pLEADDicomKernel->AddRef();//because when spLEADDicomKernel goes out of scope, it will auto Release()!
#endif
   UNLOCKSUPPORT(*pLEADDicomKernel);
   pLEADDicomKernel->Release();
   pFactory->Release();
   SysFreeString(lpLic);
| 11. | Add the following lines to the top of the file, after all the #include statements: | 
const WCHAR BASED_CODE _szLicString[] =
         L"LEADTOOLS OCX Copyright (c) 1991-2005 LEAD Technologies, Inc.";
| 12. | Add a command button to your form and name it as follows: | |
| 
 | a. | In the Project Workspace, click the ResourceView tab. | 
| 
 | b. | Double-click the Dicom resources folder to open it. | 
| 
 | c. | Double-click the Dialog folder to open it. | 
| 
 | d. | Double-click IDD_DICOM_DIALOG to design the dialog box. | 
| 
 | e. | Select the TODO... text control; then press the Delete key to delete it. | 
| 
 | f. | Add a command button to the dialog, and name it as follows: | 
| 
 | ID | Caption | 
| 
 | IDC_LOADDICOM | Load | 
| 13. | Press Ctrl-W to go to the MFC Class Wizard; then do the following: | |
| 
 | a. | Click the Message Maps tab. | 
| 
 | b. | In the Class Name combo box, select CDicomDlg. | 
| 
 | c. | In the Object IDs list box, select IDC_LOADDICOM. | 
| 
 | d. | In the Messages list box, select BN_CLICKED. | 
| 
 | e. | Click the Add function button. Choose OK for the default function name (OnLoaddicom). | 
| 
 | f. | Click the Edit Code button and enter the following code: | 
   int Result;
   short nRet;
   long lCount;
   CString cs;
   IDicomDSModulePtr pCurrentModule=NULL;
   IDicomDSElementPtr pCurrentElement=NULL;
   m_pLEADDicomDS->EnableMethodErrors = FALSE;
   nRet = m_pLEADDicomDS->LoadDS("D:\\LTWIN13\\images\\test2.dic", 0);
   if (nRet != DICOM_SUCCESS)
      AfxMessageBox("Error loading file");
   else
   {
      AfxMessageBox("File is loaded.");
      lCount = m_pLEADDicomDS->GetModuleCount();
      m_pLEADDicomDS->FindIndexModule(0);
      pCurrentModule = m_pLEADDicomDS->GetCurrentModule();
      pCurrentElement = pCurrentModule->GetElement(0);
      Result = m_pLEADDicomDS->SetCurrentElement (pCurrentElement->GethElement());
      if(Result)
      {
          cs.Format("There are %d modules in this data set\n"
                    "The first module has %d elements.\n"
                    "The first element has:\n"
                    "Tag number: %08X\n"
                    "VR: %08X\n", lCount,
                    pCurrentModule->GetElementCount(),
                    pCurrentElement->GetTag(),
                    pCurrentElement->GetVR());
          AfxMessageBox(cs);
      }
   }
   m_pLEADDicomDS->EnableMethodErrors = TRUE;
| 14. | On the main menu, select Build > Build dicom.exe to build the project. | |
| 15. | On the main menu, select Build > Execute dicom.exe to run the project. | |
| 16. | Press Ctrl-W to go to the MFC Class Wizard; then do the following: | |
| 
 | a. | Click the Message Maps tab. | 
| 
 | b. | In the Class Name combo box, select CDicomDlg. | 
| 
 | c. | In the Object IDs list box, select CDicomDlg. | 
| 
 | d. | In the Messages list box, select WM_CLOSED. | 
| 
 | e. | Click the Add function button. Choose OK for the default function name (OnClose). | 
| 
 | f. | Click the Edit Code button and enter the following code: | 
if(m_pLEADDicomDS)
      m_pLEADDicomDS->Release();