/*[]=====================================================================[]*/ /*[] LEADTOOLS for Windows - Version 10 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #ifndef UNREFERENCED_PARAMETER #define UNREFERENCED_PARAMETER(P) \ { \ (P) = (P); \ } #endif //#include "resource.h" #define DLGCAPTION "LEADTOOLS Dicom Demo" #define IMAGE_ITEM 0 #define IMAGE_FOLDER_CLOSED 1 #define IMAGE_FOLDER_OPEN 2 /* menu positions */ #define FILE_MENU_POS 0 #define VIEW_MENU_POS 1 #define TABLES_MENU_POS 2 #define OPTIONS_MENU_POS 3 #define DATASET_MENU_POS 4 #define VIEWOPT_MENU_POS 5 #define PROCESS_MENU_POS 6 static char * J2KCompressionStrings[] = { "Compression Ratio", "J2K Stream Size", "Use QFactor" }; static char * J2KProgressingOrders[] = { "Quality-axis" ,//J2K_LAYER_RESOLUTION_COMPONENT_POSITION "Resolution-axis 1" ,//J2K_RESOLUTION_LAYER_COMPONENT_POSITION "Resolution-axis 2" ,//J2K_RESOLUTION_POSITION_COMPONENT_LAYER "Color-axis" ,//J2K_POSITION_COMPONENT_RESOLUTION_LAYER "Position-axis" //J2K_COMPONENT_POSITION_RESOLUTION_LAYER }; #ifndef SIZE_OF_ARRAY #define SIZE_OF_ARRAY(a) (sizeof(a)/sizeof(a[0])) #endif typedef struct tagDATA { L_CHAR szFilename[L_MAXPATH];/* File name to load. */ BITMAPHANDLE Bitmap; /* BITMAP HANDLE to hold image. */ HDICOMDS hDicomDS; /* handle to Dicom DS */ WNDPROC OldProc; L_BOOL bLoaded; L_BOOL bModule; L_BOOL bHighLevel; L_UINT16 LoadFlags; L_UINT16 SaveFlags; L_INT32 nSaveCompression; L_INT32 nSavePhotometric; L_INT32 nSaveBitsPerPixel; L_INT32 nSaveQFactor; pDICOMELEMENT pCurrentElement; L_UINT32 nCurrentModule; HIMAGELIST hImageList; HINSTANCE hInst; HBITMAPLIST hBitmapList; L_UINT32 BitmapListCount; L_UINT32 BitmapListIndex; RECT rcDst; L_BOOL bAnimationLoop; L_BOOL bAnimationPlay; L_BOOL bFit; L_INT Zoom; L_BOOL bImage; L_INT Width; L_INT Height; L_BOOL bChild; L_BOOL bSequence; L_UINT32 lTagCode; L_UINT32 lModuleCode; /* scroll stuff */ L_INT nVScrollMax; L_INT nVScrollPos; L_INT nVScrollStep; L_INT nHScrollMax; L_INT nHScrollPos; L_INT nHScrollStep; L_INT cxClient; L_INT cyClient; L_UINT32 lItemCount; L_CHAR L_FAR* pItems; FILEJ2KOPTIONS J2KOptions; L_INT32 nTempQFactor; } DATA; DATA Data; /* DATA structure. */ #define ENABLEMENUITEM(hMenu, wID, fFlag) EnableMenuItem(hMenu,\ (UINT)wID, (UINT)MF_BYCOMMAND | ((fFlag) ? MF_ENABLED : (MF_DISABLED | MF_GRAYED))) #define ENABLEMENUITEMPOS(hMenu, wPos, fFlag) EnableMenuItem(hMenu,\ (UINT)wPos, (UINT)MF_BYPOS | ((fFlag) ? MF_ENABLED : (MF_DISABLED | MF_GRAYED))) BOOL CALLBACK DicomDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK LoadOptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK SaveOptDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK InsElementDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK InsModuleDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK EditValDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK SetJ2KOptionsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); L_VOID LoadDS(HWND hDlg); L_VOID SaveDS(HWND hDlg); L_BOOL GetFilename(HWND hDlg, L_INT nID); L_VOID ProcessImage(HWND hDlg, L_INT nID); L_VOID FillTreeLowLevel(HWND hDlg); L_VOID FillSubTreeLowLevel(HWND hDlg, pDICOMELEMENT pCurrentElement, HTREEITEM hParent); L_VOID CleanOpenDlgParam(LPOPENDLGPARAMS pFOParam); L_VOID HandleNotify(HWND hDlg, WPARAM idCtl, LPNMHDR pNMHDR); L_VOID DisplayElement(HWND hDlg, pDICOMELEMENT pElement, L_CHAR L_FAR* pszNodeText); L_VOID MatchAspectRatio (LPRECT pRect, L_INT nWidth, L_INT nHeight); L_VOID DisplayBitmap(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayBitmapList(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayChar(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayShort(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayLong(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayFloat(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayDouble(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayString(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayAge(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayTime(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayDate(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayDateTime(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayBinary(HWND hDlg, pDICOMELEMENT pElement); L_VOID DisplayValues(HWND hDlg, pDICOMELEMENT pElement); L_VOID UpdateMenuStatus(HWND hDlg); L_VOID HandleViewOpt(HWND hDlg, L_INT nID); L_VOID DrawImageBtn(HWND hDlg, LPDRAWITEMSTRUCT pds); L_VOID PaintBox(HDC hDC, RECT L_FAR* pRect, COLORREF crColor); L_VOID PaintBitmap(HDC hDC, LPRECT pDest, pBITMAPHANDLE pBitmap); L_VOID PlayAnimation(HDC hDC); //tables.c forward declarations L_CHAR *IntToString(UINT iVal, L_CHAR *szVal); L_CHAR *IntToHexString(UINT iVal, L_CHAR *szVal); L_CHAR * CodeToString(L_UINT uiCode); L_CHAR * RestrictToString(L_UINT uiRestrict); L_VOID UpdateVRTextBoxes(HWND hDlg, pDICOMVR pVR); L_VOID UpdateUIDTextBoxes(HWND hDlg, pDICOMUID pUID); L_VOID UpdateTagTextBoxes(HWND hDlg, pDICOMTAG pTag); L_VOID ListView_SetCursor(HWND hListView, L_INT iListViewIndex); BOOL CALLBACK VRTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK UITableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK TagTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); //tree.c forward declarations L_VOID UpdateIODTextBoxes(HWND hDlg, pDICOMIOD pIOD); L_VOID TreeView_SetCursor(HWND hTreeView, HTREEITEM hTreeItem); L_VOID TreeView_InsertChildren(HWND hTreeView, HTREEITEM hParent, pDICOMIOD pParentIOD); BOOL CALLBACK IODTableDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); #ifndef RECTWIDTH #define RECTWIDTH(lpRect) (((LPRECT) lpRect)->right -((LPRECT) lpRect)->left) #define RECTHEIGHT(lpRect) (((LPRECT) lpRect)->bottom -((LPRECT) lpRect)->top) #endif /* maximum number of steps between scroll extremes */ #define SCROLL_RATIO 10 L_INT L_FAR L_EXPORT LoadCallback(pFILEINFO pFileInfo, pBITMAPHANDLE pBitmap, L_UCHAR L_FAR *pBuffer, L_UINT uFlags, L_INT nRow, L_INT nLines, L_VOID L_FAR* pUserData); L_BOOL L_FAR L_EXPORT ConformanceCallback(pDICOMELEMENT pElement, L_UINT16 nFlags, L_VOID *pUserData); L_VOID FillSubTreeHighLevel(HWND hDlg, HTREEITEM hParent, pDICOMELEMENT pElement, BOOL bRecurse); L_VOID FillTreeHighLevel(HWND hDlg); L_VOID ShowInformation(HWND hDlg); L_VOID ShowDSInfo(HWND hDlg); L_VOID InsertDSElement(HWND hDlg); L_VOID InsertDSModule(HWND hDlg); L_VOID DeleteDSElement(HWND hDlg); L_VOID DeleteDSModule(HWND hDlg); #define TreeView_GetSelectedItem(hwnd) \ (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, TVGN_CARET, 0L) LRESULT CALLBACK ImageBtnWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); L_VOID UpdateScrollBars(HWND hDlg); L_VOID EditValue(HWND hDlg); L_VOID OnRadio14(HWND hDlg); L_VOID OnRadio15(HWND hDlg); L_VOID OnRadio16(HWND hDlg); L_VOID OnRadio17(HWND hDlg); L_VOID OnRadio18(HWND hDlg); L_VOID OnRadio19(HWND hDlg); L_VOID OnRadio20(HWND hDlg); L_VOID OnRadio21(HWND hDlg); L_VOID OnRadio22(HWND hDlg); L_VOID OnRadio23(HWND hDlg); L_VOID OnRadioJ2KLossLess(HWND hDlg); L_VOID OnRadioJ2KLossy(HWND hDlg); L_VOID OnJ2KOptions(HWND hDlg); L_VOID FileSaveFillJ2KOptionsAdvanced( HWND hDlg,pFILEJ2KOPTIONS pJ2KOptions); L_BOOL GetEditInt ( HWND hDlg,L_INT nID, L_INT L_FAR* pVal, L_INT nMinVal, L_INT nMaxVal ); L_BOOL FileSaveGetJ2KOptionsAdvanced ( HWND hDlg,pFILEJ2KOPTIONS pJ2KOptions ); L_VOID SelectTextAndBeep ( HWND hDlg,L_INT nID ); L_VOID ShowHideCompressionFields(HWND hDlg , L_INT nIndex); L_INT GenerateBitampList ( L_TCHAR L_FAR * pszFolder, LPDLGBITMAPLIST pDlgBitmapList, L_BOOL fThumbnail ); L_INT L_FAR L_EXPORT BrowseBitmapsCB ( pBITMAPHANDLE pBitmap, L_CHAR L_FAR *pszFile, pFILEINFO pInfo, L_INT nStatusCode, L_INT nPercent, L_VOID L_FAR *pUserData);