/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ /*------------------------------------------------------------------------- We have made the assumption that the user has the knowledge of programming in C and Windows. --------------------------------------------------------------------------*/ #include "ImgConVw.h" L_TCHAR szAppName[] = TEXT("ImageViewerDemo"); L_INT CreateNewCell(HWND hWnd, L_TCHAR L_FAR * szText) { L_INT nRet, nIndex; LPDATA pData = (LPDATA)LOCKDATA(hWnd); nRet = L_LoadBitmapList(szText, &pData->hBitmapList, 0, ORDER_BGRORGRAY, NULL, NULL); if (nRet != SUCCESS) return nRet; nIndex = L_DispContainerInsertCell(hCon, -1, 0); nRet = L_DispContainerSetCellBitmapList(hCon, nIndex, pData->hBitmapList, TRUE, 0); return SUCCESS; } L_INT DoDialogBoxParam (L_INT nDialog, HWND hWnd, DLGPROC pfnDialog, LPARAM lParam) { L_INT nRet; DLGPROC pfn; pfn = (DLGPROC) MakeProcInstance((FARPROC) pfnDialog, hInst); nRet = DialogBoxParam(hInst, MAKEINTRESOURCE(nDialog), hWnd, pfn, lParam); FreeProcInstance((FARPROC) pfn); return nRet; } L_VOID CleanOpenDlgParam(LPOPENDLGPARAMS pFOParam) { L_INT nI = 0; if(pFOParam!=NULL && pFOParam->pFileData!= NULL ) { for(nI = 0; nI < pFOParam->nNumOfFiles; nI++) { if(pFOParam->pFileData[nI].pBitmap != NULL) { L_FreeBitmap(pFOParam->pFileData[nI].pBitmap); GlobalFreePtr(pFOParam->pFileData[nI].pBitmap); pFOParam->pFileData[nI].pBitmap = NULL; } if(pFOParam->pFileData[nI].pThumbnail != NULL) { L_FreeBitmap(pFOParam->pFileData[nI].pThumbnail); GlobalFreePtr(pFOParam->pFileData[nI].pThumbnail); pFOParam->pFileData[nI].pThumbnail = NULL; } if(pFOParam->pFileData[nI].pFileInfo != NULL) { GlobalFreePtr(pFOParam->pFileData[nI].pFileInfo); pFOParam->pFileData[nI].pFileInfo = NULL; } } GlobalFreePtr(pFOParam->pFileData); pFOParam->pFileData = NULL; pFOParam->nNumOfFiles = 0; } } /*====(OpenImage)======================================================== Description: Loads the image from file and creates a cell window for the image. Syntax : L_BOOL OpenImage( HWND hWnd) Parameters : hWnd Handle to the parent window. Return Value: None. ==========================================================================*/ L_BOOL OpenImage(HWND hWnd, L_INT nIndex) { OPENFILENAME OpenFileName; L_INT nRet; LPDATA pData; L_INT nI; pData = (LPDATA)LOCKDATA(hWnd); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); memset(&foParm, 0, sizeof(OPENDLGPARAMS)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.lpstrFilter = NULL; OpenFileName.nFilterIndex = 0; OpenFileName.nMaxCustFilter = 0; OpenFileName.hwndOwner = hWnd; OpenFileName.lpstrTitle = TEXT("Open a File"); OpenFileName.Flags = OFN_ALLOWMULTISELECT; foParm.bShowLoadOptions = FALSE; foParm.bPreviewEnabled = TRUE; foParm.uStructSize = sizeof(OPENDLGPARAMS); foParm.uDlgFlags = DLG_OPEN_ENABLESIZING | DLG_OPEN_SHOW_PREVIEW | DLG_OPEN_USEFILESTAMP | DLG_OPEN_SHOW_PROGRESSIVE | DLG_OPEN_SHOW_MULTIPAGE | DLG_OPEN_SHOW_DELPAGE | DLG_OPEN_SHOW_LOADROTATED | DLG_OPEN_SHOW_LOADCOMPRESSED | DLG_OPEN_SHOW_LOADOPTIONS | DLG_OPEN_SHOW_FILEINFO | DLG_OPEN_SHOW_PDFOPTIONS | DLG_OPEN_SHOW_RASTEROPTIONS | DLG_OPEN_SHOW_VECTOROPTIONS | DLG_OPEN_SHOW_PDFOPTIONS | DLG_OPEN_VIEWTOTALPAGES; nRet = L_DlgOpen( hWnd, &OpenFileName, &foParm); if(nRet == SUCCESS_DLG_OK ) { nRet = SUCCESS; for (nI = 0; nI < foParm.nNumOfFiles; nI++) { BITMAPHANDLE Bitmap; if ( NULL != foParm.pFileData[nI].pFileInfo ) { LOADFILEOPTION LoadFileOption; L_GetDefaultLoadFileOption(&LoadFileOption, sizeof(LOADFILEOPTION)); LoadFileOption.PageNumber = foParm.pFileData[nI].nPageNumber; LoadFileOption.uStructSize = sizeof(LOADFILEOPTION); switch(foParm.pFileData[nI].FileOptions.nType) { case FILE_CMW: case FILE_JP2: case FILE_J2K: case FILE_JBIG: case FILE_FPX: case FILE_FPX_SINGLE_COLOR: case FILE_FPX_JPEG: case FILE_FPX_JPEG_QFACTOR: L_SetLoadResolution (foParm.pFileData[nI].FileOptions.nType, ((LPOPENDLGOPTIONS_RASTERMISC)foParm.pFileData[nI].FileOptions.pOptions)->uXResolution, ((LPOPENDLGOPTIONS_RASTERMISC)foParm.pFileData[nI].FileOptions.pOptions)->uYResolution); } nRet = L_LoadBitmapList(foParm.pFileData[nI].szFileName, &pData->hBitmapList, 0, ORDER_BGRORGRAY, &LoadFileOption, foParm.pFileData[nI].pFileInfo); nIndex = L_DispContainerInsertCell(hCon, nIndex, 0); nRet = L_DispContainerSetCellBitmapList(hCon, nIndex, pData->hBitmapList, TRUE, 0); L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 1"), 0); L_DispContainerSetCellTag(hCon, nIndex, 1, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 2"), 0); L_DispContainerSetCellTag(hCon, nIndex, 2, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 3"), 0); L_DispContainerSetCellTag(hCon, nIndex, 3, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 4"), 0); L_DispContainerSetCellTag(hCon, nIndex, 4, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 5"), 0); L_DispContainerSetCellTag(hCon, nIndex, 5, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 6"), 0); L_DispContainerSetCellTag(hCon, nIndex, 6, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 7"), 0); L_DispContainerSetCellTag(hCon, nIndex, 1, DISPWIN_ALIGN_LEFTCENTER, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 8"), 0); L_DispContainerSetCellTag(hCon, nIndex, 1, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 9"), 0); L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_TOPCENTER , DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 10"), 0); L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_BOTTOMCENTER, DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 12"), 0); L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_TOPRIGHT , DISPWIN_TYPE_USERDATA, TEXT("Overlay Text 11"), 0); L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_RIGHTCENTER , DISPWIN_TYPE_USERDATA, TEXT("R"), 0); L_DispContainerSetCellTag(hCon, nIndex, 7, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_SCALE, NULL, 0); if (L_IsGrayScaleBitmap(&Bitmap)) L_DispContainerSetCellTag(hCon, nIndex, 0, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_WLCENTERWIDTH, NULL, 0); L_DispContainerSetCellTag(hCon, nIndex, 8, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_FRAME, NULL, 0); L_DispContainerSetCellTag(hCon, nIndex, 3, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_FIELDOFVIEW, NULL, 0); foParm.pFileData[nI].pBitmap = NULL; } } CleanOpenDlgParam(&foParm); } else { if (nRet != SUCCESS_DLG_CANCEL) MessageBox(hWnd, (LPTSTR)TEXT("Cannot Open File"), TEXT("Error"), MB_OK); } UNLOCKDATA(hWnd); return(nRet); } static L_VOID Container_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPDATA pData = (LPDATA)LOCKDATA(hWnd); L_INT nIndex; L_INT nRet; switch(nID) { case ID_EDIT_SETCELLPOS: { nIndex = DoDialogBoxParam(IDD_REP_DLG, hWnd, RepositionDlgProc, (LPARAM)NULL); if (nIndex != 0) L_DispContainerRepositionCell(hCon, LOWORD(nIndex), HIWORD(nIndex), 0); } break; case ID_STATISTICS_STATISTICS: DoDialogBoxParam(IDD_STATS_DLG, hWnd, StatsDlgProc, (LPARAM)hCon); break; case IDM_WINDOWLEVEL_CUSTOM: DoDialogBoxParam(IDD_WLPROP_DLG, hWnd, WindowLevelProc, (LPARAM)hCon); break; case IDM_OFFSET_CUSTOM: DoDialogBoxParam(IDD_OFFSETPROP_DLG, hWnd, OffsetWndProc, (LPARAM)hCon); break; case IDM_STACK_CUSTOM: DoDialogBoxParam(IDD_STACKPROP_DLG, hWnd, StackWndProc, (LPARAM)hCon); break; case IDM_ALPHA_CUSTOM: DoDialogBoxParam(IDD_ALPHAPROP_DLG, hWnd, AlphaWndProc, (LPARAM)hCon); break; case IDM_RSZ_CUSTOM: DoDialogBoxParam(IDD_SCALEPROP_DLG, hWnd, ScaleWndProc, (LPARAM)hCon); break; case IDM_MAG_CUSTOM: DoDialogBoxParam(IDD_MAGPROP_DLG, hWnd, MagDlgProc, (LPARAM)hCon); break; case ID_EDIT_REMOVE: { nIndex = DoDialogBoxParam(IDD_REMOVECELL_DLG, hWnd, RemoveCellDlgProc, (LPARAM)NULL); if (nIndex != -2) L_DispContainerRemoveCell(hCon, nIndex, TRUE, 0); } break; case ID_EDIT_REMOVESELECTED: { L_INT nI = 0, nIndex = 0, nCount; nCount = L_DispContainerGetCellCount(hCon, 0); for (nI = 0; nI < nCount; nI++) { if (L_DispContainerIsCellSelected(hCon, nIndex, 0)) L_DispContainerRemoveCell(hCon, nIndex, TRUE, 0); else nIndex++; } } break; case ID_EDIT_SELECTINV: { L_INT nI = 0, nCount; L_BOOL bSelected; nCount = L_DispContainerGetCellCount(hCon, 0); for (nI = 0; nI < nCount; nI++) { bSelected = L_DispContainerIsCellSelected(hCon, nI, 0); L_DispContainerSelectCell(hCon, nI, !bSelected, 0); } } break; case ID_EDIT_TOGGLEFREEZE: { L_INT nI = 0, nCount; L_BOOL bFrozen; nCount = L_DispContainerGetCellCount(hCon, 0); for (nI = 0; nI < nCount; nI++) { if (L_DispContainerIsCellSelected(hCon, nI, 0)) { bFrozen = L_DispContainerIsCellFrozen(hCon, nI, 0); L_DispContainerFreezeCell(hCon, nI, !bFrozen, 0); } } } break; case ID_EDIT_FREEZECELL: { nIndex = DoDialogBoxParam(IDD_FREEZECELL_DLG, hWnd, FreezeCellDlgProc, (LPARAM)NULL); } break; case ID_HELP_ABOUT: DoDialogBoxParam(IDD_ABOUT, hWnd, (DLGPROC) AboutDlgProc, 0); return; case ID_EDIT_SELECTALL: L_DispContainerSelectCell(hCon, -1, TRUE, 0); break; case ID_EDIT_DESELECTALL: L_DispContainerSelectCell(hCon, -1, FALSE, 0); break; case ID_EDIT_REMOVEALL: L_DispContainerRemoveCell(hCon, -1, TRUE, 0); break; case IDM_OFFSET_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_OFFSET); break; case IDM_STACK_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_STACK); break; case IDM_ALPHA_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_ALPHA); break; case IDM_RESIZE_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_SCALE); break; case IDM_MAG_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_MAG); break; case IDM_WINDOWLEVEL_SET: DoDialogBoxParam(IDD_SETACTION_DLG, hWnd, SetActionWndProc, CONTAINER_ACTION_WINDOWLEVEL); break; case IDM_FILE_INSERT: nIndex = DoDialogBoxParam(IDD_INSERTCELL_DLG , hWnd, InsertCellDlgProc, 0); if (nIndex != -2) nRet = OpenImage(hWnd, nIndex); if (nRet == SUCCESS) { L_INT nCount; DISPCONTAINERPROPERTIES Disp; Disp.uStructSize = sizeof(DISPCONTAINERPROPERTIES); Disp.uMask = DCPF_NUMROWS | DCPF_NUMCOLS; L_DispContainerGetProperties(hCon, &Disp, 0); nCount = L_DispContainerGetCellCount(hCon, 0); if ((Disp.uNumRows == 1) && (Disp.uNumCols == 1) && (nCount == 2)) { MessageBox(hWnd, TEXT("The Image viewer is currently configured to display one cell only \n\n If you want to display more than one cell: \n 1) Choose from Properties Menu -> Container properties \n 2) Increase the number of rows & columns"), TEXT("Warning!"), MB_OK); } } break; case ID_PROPERTIES_CONTAINERPROPERTIES: DoDialogBoxParam(IDD_CONDLG_DLG, hWnd, ContainerDlgProc, (long)hCon); break; case ID_PROPERTIES_CELLPROPERTIES: DoDialogBoxParam(IDD_CELLPROP_DLG, hWnd, CellsDlgProc, (long)hCon); break; case IDM_FILE_EXIT: L_DispContainerDestroy(hCon, TRUE, 0); GlobalFree(pData); DestroyMenu(hContainerMenu); DestroyWindow(hWnd); break; } UNLOCKDATA(hWnd); } L_VOID Container_OnSize (HWND hWnd, L_UINT nState, L_INT nCx, L_INT nCy) { RECT rcRect; HWND hWndChild; GetClientRect(hWnd, &rcRect); hWndChild = L_DispContainerGetWindowHandle(hCon, 0); MoveWindow(hWndChild, rcRect.left, rcRect.top, RECTWIDTH(&rcRect), RECTHEIGHT(&rcRect), TRUE); } static L_VOID Container_OnInitMenuPopup (HWND hWnd, HMENU hMenu, L_INT nItem, L_BOOL bSystemMenu) { L_INT nIndex; pData = (LPDATA)LOCKDATA(hWnd); if (!pData) return; nIndex = SearchForFirstSelectedCell(hCon); EnableMenuItem(hMenu, ID_EDIT_REMOVESELECTED, (L_DispContainerGetCellCount(hCon, 0) && (nIndex + 1)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_TOGGLEFREEZE, (L_DispContainerGetCellCount(hCon, 0) && (nIndex + 1)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_SELECTINV, L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_PROPERTIES_CELLPROPERTIES,L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_REMOVE, L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_REMOVEALL, L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_FREEZECELL, L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_SELECTALL, L_DispContainerGetCellCount(hCon, 0) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_DESELECTALL, (L_DispContainerGetCellCount(hCon, 0) && (nIndex + 1))? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, ID_EDIT_SETCELLPOS, max(0, L_DispContainerGetCellCount(hCon, 0) - 1) ? MF_ENABLED : MF_GRAYED); } static L_VOID Container_OnDestroy (HWND hWnd) { L_DlgFree(); PostQuitMessage(0); } /*====(WinMain)============================================================ Description: Main windows function required for all windows applications. Syntax : L_INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) Prototype : windows.h Parameters : hInstance Handle to current instance of application. hPrevInstance Handle to previous instance of application. lpstrCommandLine Pointer to the Command Line. nComShow Integer used in ShowWindow. Return Value: The return value the user specify in wParam when send WM_QUIT message, or the paramter in PostQuitMessage. ==========================================================================*/ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { LPDATA pData = NULL; pData = (LPDATA)LOCKDATA(hWnd); switch(uMessage) { HANDLE_MSG(hWnd, WM_COMMAND, Container_OnCommand); HANDLE_MSG(hWnd, WM_SIZE, Container_OnSize); HANDLE_MSG(hWnd, WM_INITMENUPOPUP, Container_OnInitMenuPopup); HANDLE_MSG(hWnd, WM_DESTROY, Container_OnDestroy); } return DefWindowProc(hWnd, uMessage, wParam, lParam); } L_INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, L_INT iCmdShow) { MSG uMessage; WNDCLASS wndclass; HWND hWnd; HMENU hContainerMenu; HANDLE hMem; LPDATA pData; HACCEL hAccel; RECT rcRect; DISPCONTAINERPROPERTIES DispContainerProp; DISPCELLPROPERTIES DispCellProp; L_TCHAR szText[L_MAXPATH]; L_INT nRet; hInst = hInstance; ZeroMemory(pCurrentActionButton, sizeof(L_UINT) * 7); ZeroMemory(pCurrentActionFlags, sizeof(L_UINT) * 7); //register the Image child window class hContainerMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU)); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = sizeof(HANDLE); wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = GetStockObject (GRAY_BRUSH); wndclass.lpszMenuName = szAppName; wndclass.lpszClassName = szAppName; if (!RegisterClass(&wndclass)) return 0; hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szAppName, TEXT("Image Viewer Demo"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hContainerMenu, hInstance, NULL); hMem = GlobalAlloc (GHND, sizeof (DATA)); SETDATA (hWnd, hMem); if(!hMem) return(FALSE); pData = (LPDATA)LOCKDATA(hWnd); memset(pData, 0, sizeof(LPDATA)); UNLOCKSUPPORT(); // Initialize the container by making it the same size as its parent. GetClientRect(hWnd, &rcRect); hCon = L_DispContainerCreate(hWnd, &rcRect, 0); if (hCon == NULL) { L_DispContainerDestroy(hWnd, TRUE, 0); GlobalFree(hMem); DestroyMenu(hContainerMenu); return FALSE; } // Add some action and activate them L_DispContainerAddAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, 0); L_DispContainerAddAction(hCon, CONTAINER_ACTION_ALPHA, 0); L_DispContainerAddAction(hCon, CONTAINER_ACTION_OFFSET , 0); L_DispContainerAddAction(hCon, CONTAINER_ACTION_MAG, 0); L_DispContainerAddAction(hCon, CONTAINER_ACTION_SCALE , 0); L_DispContainerAddAction(hCon, CONTAINER_ACTION_STACK , 0); L_DispContainerSetAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSE_BUTTON_LEFT, 0); L_DispContainerSetAction(hCon, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSE_BUTTON_RIGHT, 0); L_DispContainerSetAction(hCon, CONTAINER_ACTION_SCALE, CONTAINER_MOUSE_BUTTON_MIDDLE, 0); L_DispContainerSetAction(hCon, CONTAINER_ACTION_STACK, CONTAINER_MOUSE_WHEEL, 0); pCurrentActionButton[CONTAINER_ACTION_WINDOWLEVEL] = CONTAINER_MOUSE_BUTTON_LEFT; pCurrentActionButton[CONTAINER_ACTION_OFFSET] = CONTAINER_MOUSE_BUTTON_RIGHT; pCurrentActionButton[CONTAINER_ACTION_SCALE] = CONTAINER_MOUSE_BUTTON_MIDDLE; pCurrentActionButton[CONTAINER_ACTION_STACK] = CONTAINER_MOUSE_WHEEL; L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSEMOVE_DOWN, VK_DOWN, 0); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSEMOVE_UP, VK_UP, 0); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSEMOVE_LEFT, VK_LEFT, 0); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSEMOVE_RIGHT, VK_RIGHT, 0); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSEMOVE_DOWN, VK_DOWN, CONTAINER_KEY_CTRL); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSEMOVE_UP, VK_UP, CONTAINER_KEY_CTRL); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSEMOVE_LEFT, VK_LEFT, CONTAINER_KEY_CTRL); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSEMOVE_RIGHT, VK_RIGHT, CONTAINER_KEY_CTRL); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_SCALE, CONTAINER_MOUSEMOVE_UP, VK_SUBTRACT, 0); L_DispContainerSetKeyboardAction(hCon, CONTAINER_ACTION_SCALE, CONTAINER_MOUSEMOVE_DOWN, VK_ADD, 0); L_DlgInit(DLG_INIT_COLOR); SetCursor(LoadCursor(NULL, IDC_WAIT)); DispContainerProp.uStructSize = sizeof(DISPCONTAINERPROPERTIES); DispContainerProp.uNumCols = 2; DispContainerProp.uNumRows = 1; DispContainerProp.uMask = DCPF_NUMROWS | DCPF_NUMCOLS; nRet = L_DispContainerSetProperties(hCon, &DispContainerProp, 0); if (MessageBox(hWnd, TEXT("The \"Image Viewer Demo\" can load sample DICOM images to demonstrate the capabilities of the \"LEADTOOLS Image Viewer Control\" \n Would you like to load these images now?"), TEXT("Initialization"), MB_YESNO) == IDYES) { wsprintf(szText, TEXT("../../../Images/XA.dcm")); if (CreateNewCell(hWnd, szText) != SUCCESS) { wsprintf(szText, TEXT("../Images/XA.dcm")); CreateNewCell(hWnd, szText); } L_DispContainerSetCellTag(hCon, 0, 2, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("EX. ID 230-36-5448"), 0); L_DispContainerSetCellTag(hCon, 0, 4, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_FRAME, NULL,0); L_DispContainerSetCellTag(hCon, 0, 6, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_SCALE, NULL,0); L_DispContainerSetCellTag(hCon, 0, 2, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_WLCENTERWIDTH, NULL,0); L_DispContainerSetCellTag(hCon, 0, 1, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_FIELDOFVIEW, NULL,0); L_DispContainerSetCellTag(hCon, 0, 1, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Good, Guy"), 0); L_DispContainerSetCellTag(hCon, 0, 2, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("PID 125-98-445"), 0); L_DispContainerSetCellTag(hCon, 0, 3, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("DOB 08/02/1929"), 0); L_DispContainerSetCellTag(hCon, 0, 5, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("03/16/1999"), 0); DispCellProp.uStructSize = sizeof(DISPCELLPROPERTIES); DispCellProp.bIsFit = TRUE; DispCellProp.uMask = DCCELLPF_IMAGE_FIT; nRet = L_DispContainerSetCellProperties(hCon, 0, &DispCellProp, 0); wsprintf(szText, TEXT("../../../Images/MR.dcm")); if (CreateNewCell(hWnd, szText) != SUCCESS) { wsprintf(szText, TEXT("../Images/MR.dcm")); CreateNewCell(hWnd, szText); } L_DispContainerSetCellTag(hCon, 1, 1, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("MRI"), 0); L_DispContainerSetCellTag(hCon, 1, 2, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("EX. ID G-1194-24"), 0); L_DispContainerSetCellTag(hCon, 1, 4, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_FRAME, NULL,0); L_DispContainerSetCellTag(hCon, 1, 6, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_SCALE, NULL,0); L_DispContainerSetCellTag(hCon, 1, 2, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_WLCENTERWIDTH, NULL,0); L_DispContainerSetCellTag(hCon, 1, 1, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_FIELDOFVIEW, NULL,0); L_DispContainerSetCellTag(hCon, 1, 0, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("THK 10 mm"), 0); L_DispContainerSetCellTag(hCon, 1, 3, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("TR 1333.33"), 0); L_DispContainerSetCellTag(hCon, 1, 4, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("TE 11.98"), 0); L_DispContainerSetCellTag(hCon, 1, 6, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("Comm longaxis - Normal"), 0); L_DispContainerSetCellTag(hCon, 1, 0, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Community Hospital"), 0); L_DispContainerSetCellTag(hCon, 1, 1, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Nice, Fellow"), 0); L_DispContainerSetCellTag(hCon, 1, 2, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("PID 123-45-6789"), 0); L_DispContainerSetCellTag(hCon, 1, 3, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("DOB 05/13/1936"), 0); L_DispContainerSetCellTag(hCon, 1, 4, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Sex M"), 0); L_DispContainerSetCellTag(hCon, 1, 5, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("06/26/1995"), 0); DispCellProp.uNumCols = 2; DispCellProp.uNumRows = 2; DispCellProp.bIsFit = TRUE; DispCellProp.uMask = DCCELLPF_COLS | DCCELLPF_ROWS | DCCELLPF_IMAGE_FIT; nRet = L_DispContainerSetCellProperties(hCon, 1, &DispCellProp, 0); } SetCursor(LoadCursor(NULL, IDC_ARROW)); ShowWindow(hWnd, SW_MAXIMIZE); UpdateWindow(hWnd); hAccel = LoadAccelerators(hInstance, szAppName); while (GetMessage (&uMessage, NULL, 0, 0)) { if(!TranslateMDISysAccel (hWnd, &uMessage) && !TranslateAccelerator (hWnd, hAccel, &uMessage)) { TranslateMessage (&uMessage); DispatchMessage (&uMessage); } } GlobalFree(hMem); DestroyMenu(hContainerMenu); return uMessage.wParam; }