Available in LEADTOOLS Medical Imaging toolkits. |
LImageViewerCell::Create
#include "ltwrappr.h"
L_INT LImageViewerCell::Create (hWndParent, uFlags);
HWND hWndParent; |
/* handle to the parent window */ |
L_UINT uFlags; |
/* reserved for future use */ |
Creates a cell, which is a window that can hold a single image or a list of images.
Parameter |
Description |
hWndParent |
Handle to the parent or owner window of the container window being created. |
uFlags
|
Reserved for future, must be zero. |
Returns
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
Comments
This function will create a window that will hold the cell. This cell window serves as the "image viewer cell".
Each container has numerous characteristics, such as the number of rows, the number of columns, border colors, background colors, cursors, etc. that can be set programmatically using LImageViewerCell::SetCellProperties. To get the current characteristics of a specific container, call LImageViewerCell::GetCellProperties.
A container can also have certain actions, either standard or user-defined, associated with it. These actions are applied either through the mouse or through keystroke combinations. For more information, refer to Applying Actions.
The maximum number of rows allowed is 8. The maximum number of columns is 8.
When the container created by this function is no longer needed, free the container and any associated memory by calling LImageViewerCell::Destroy. For every call to LImageViewerCell::Create there must be a call to LImageViewerCell::Destroy.
Required DLLs and Libraries
LTIVW For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
See Also
Functions: |
LImageViewerCell::GetWindowHandle, LImageViewerCell::Destroy, LImageViewerCell::GetHandle, Class Members |
Topics: |
|
|
Window Control/Image Viewer Functions: Using the Image Viewer |
Example
#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName #if defined LEADTOOLS_V17_OR_LATER #define RECT_HEIGHT(lpRect) ((lpRect)->bottom - (lpRect)->top) #define SELECT_FONT(hDC, hFont) ((HFONT) SelectObject((hDC), (HGDIOBJ)(HFONT)(hFont))) LImageViewer gMyImageViewer; class MyLImageViewerChild :public LImageViewerCell { L_INT ActionCallBack(HBITMAPLIST * phBitmapList, L_UINT uCount, L_INT nAction, L_UINT uMessage, WPARAM wParam, POINT * ptMousePos); virtual L_INT TagCallBack( HWND hCellWnd, L_INT nCellIndex, HDC hDC, RECT * lpRect); } ; L_INT MyLImageViewerChild::TagCallBack(HWND /*hCellWnd*/, L_INT nCellIndex, HDC hDC, RECT * lpRect) { if (nCellIndex == 0) { // draw an overlay with italic font static LOGFONT lf; HFONT hFont, hOldFont; lf.lfHeight = RECT_HEIGHT(lpRect); lf.lfItalic = TRUE; wsprintf(lf.lfFaceName, TEXT("Times new Roman\0")); SetTextAlign(hDC, TA_BOTTOM | TA_RIGHT); SetTextColor(hDC, RGB(255, 255, 255)); hFont = CreateFontIndirect(&lf); hOldFont = SELECT_FONT(hDC, hFont); TextOut(hDC, lpRect->right, lpRect->bottom, TEXT("Owner Text"), 10); } return TRUE; } L_INT MyLImageViewerChild::ActionCallBack(HBITMAPLIST * phBitmapList, L_UINT uCount, L_INT nAction, L_UINT uMessage, WPARAM wParam, POINT * ptMousePos) { UNREFERENCED_PARAMETER(phBitmapList); UNREFERENCED_PARAMETER(uCount); UNREFERENCED_PARAMETER(nAction); UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(ptMousePos); L_INT nRet = 0 ; L_UINT uRow = 0 ; switch(uMessage) { case WM_LBUTTONDOWN: { // The user clicks the left button so the container scroll bar will scroll one step down nRet = gMyImageViewer.GetFirstVisibleRow(&uRow, 0); nRet = gMyImageViewer.SetFirstVisibleRow(uRow + 1, 0); } break; case WM_RBUTTONDOWN: { // The user clicks the right button so the container scroll bar will scroll one step up. nRet = gMyImageViewer.GetFirstVisibleRow(&uRow, 0); nRet = gMyImageViewer.SetFirstVisibleRow(uRow - 1, 0); } break; } return TRUE; } // This function will create a container, add cells with image lists, and add some tags. // Then the function will add some actions to the container. L_INT MyLImageViewer_CreateExample(CWnd* pwndParent, LImageViewer& ImageViewer, LBitmapList BitmapList) { DISPCONTAINERPROPERTIES DispContainerProp; DISPCELLPROPERTIES DispCellProp; RECT rcRect; L_INT nRet; // Create a container equal in size to its parent window. pwndParent->GetClientRect(&rcRect); nRet = ImageViewer.Create(pwndParent->GetSafeHwnd(), &rcRect, 0); if(nRet != SUCCESS) return nRet; gMyImageViewer = ImageViewer; // load a bitmap list. nRet = BitmapList.Load(MAKE_IMAGE_PATH(TEXT("xa.dcm")), 0, ORDER_BGRORGRAY); // if the image is corrupted or not found the program will destroy the container and terminate if (nRet != SUCCESS) { ImageViewer.Destroy(0); return nRet; } // Insert a new cell at the end of the container cell queue. MyLImageViewerChild * ImageViewerCell = new MyLImageViewerChild(); ImageViewerCell->Create(ImageViewer.GetWindowHandle(0), 0); ImageViewerCell->EnableActionCallBack(TRUE) ; ImageViewerCell->EnableTagCallBack(TRUE) ; ImageViewer.InsertCell(ImageViewerCell->GetWindowHandle(0), -1, 0); // Attach the loaded bitmaplist to the newly inserted cell. nRet = ImageViewerCell->SetCellBitmapList(BitmapList.GetHandle(),TRUE,0); if(nRet != SUCCESS) return nRet; // Add some tags to the cell nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 1"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(1, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 2"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(2, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 3"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(3, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 4"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(1, DISPWIN_ALIGN_LEFTCENTER , 0, TEXT("L"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMLEFT , 0, TEXT("Image1 Text 5"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPCENTER , 0, TEXT("Top"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMCENTER, 0, TEXT("Bottom"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPRIGHT , 0, TEXT("Image1 Text 6"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_RIGHTCENTER , 0, TEXT("R"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(8, DISPWIN_ALIGN_TOPLEFT , DISPWIN_TYPE_FRAME,NULL, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMRIGHT , DISPWIN_TYPE_OWNERDRAW,NULL, 0); if(nRet != SUCCESS) return nRet; BitmapList.SetHandle(NULL,NULL,FALSE); // load another bitmap list nRet = BitmapList.Load(MAKE_IMAGE_PATH(TEXT("mr.dcm")), 0, ORDER_BGRORGRAY); if(nRet != SUCCESS) return nRet; // insert a new cell at the end of the container queue. ImageViewerCell = new MyLImageViewerChild(); ImageViewerCell->Create(ImageViewer.GetWindowHandle(0), 0); ImageViewerCell->EnableActionCallBack(TRUE) ; ImageViewerCell->EnableTagCallBack(TRUE) ; ImageViewer.InsertCell(ImageViewerCell->GetWindowHandle(0), -1, 0); // Attach the loaded bitmap list to the newly inserted cell. nRet = ImageViewerCell->SetCellBitmapList(BitmapList.GetHandle(),TRUE,0); if(nRet != SUCCESS) return nRet; // Add some tags to the cell nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 1"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(2, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 2"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(4, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 3"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(6, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 4"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(1, DISPWIN_ALIGN_LEFTCENTER , 0, TEXT("Image3 Text 5"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMLEFT , 0, TEXT("Image3 Text 6"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPCENTER , 0, TEXT("Image3 Text 7"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMCENTER, 0, TEXT("Image3 Text 8"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_TOPRIGHT , 0, TEXT("Image3 Text 9"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_RIGHTCENTER , 0, TEXT("R"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(7, DISPWIN_ALIGN_TOPLEFT , DISPWIN_TYPE_SCALE, NULL, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetCellTag(0, DISPWIN_ALIGN_BOTTOMRIGHT, DISPWIN_TYPE_OWNERDRAW, NULL, 0); if(nRet != SUCCESS) return nRet; // Change the number of rows and columns to show all the inserted cells. DispContainerProp.uStructSize = sizeof(DISPCONTAINERPROPERTIES); DispContainerProp.uNumCols = 2; DispContainerProp.uNumRows = 1; DispContainerProp.uMask = DCPF_NUMROWS | DCPF_NUMCOLS; nRet = ImageViewer.SetProperties(&DispContainerProp, 0); if(nRet != SUCCESS) return nRet; // Change the number of sub-rows and sub-columns. DispCellProp.uStructSize = sizeof(DISPCELLPROPERTIES); DispCellProp.uNumCols = 3; DispCellProp.uNumRows = 3; nRet = ImageViewerCell->SetCellProperties(&DispCellProp, 0); if(nRet != SUCCESS) return nRet; BitmapList.SetHandle(NULL,NULL,FALSE); // Add some actions to the container. nRet = ImageViewerCell->AddAction(110, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetAction(110, CONTAINER_MOUSE_BUTTON_LEFT, DCACTION_ACTIVEONLY); if(nRet != SUCCESS) return nRet; nRet = ImageViewerCell->SetAction(110, CONTAINER_MOUSE_BUTTON_RIGHT, DCACTION_ACTIVEONLY); if(nRet != SUCCESS) return nRet; return SUCCESS; } #else #define RECT_HEIGHT(lpRect) ((lpRect)->bottom - (lpRect)->top) #define SELECT_FONT(hDC, hFont) ((HFONT) SelectObject((hDC), (HGDIOBJ)(HFONT)(hFont))) #ifdef LImageViewerChild class LImageViewerChild :public LImageViewerCell { L_INT ActionCallBack(HBITMAPLIST * phBitmapList, L_UINT uCount, L_INT nAction, L_UINT uMessage, WPARAM wParam, POINT * ptMousePos); virtual L_INT TagCallBack(L_INT nCellIndex, HDC hDC, RECT * lpRect); } ; #endif //#ifndef LImageViewerChild L_INT LImageViewerChild::TagCallBack(L_INT nCellIndex, HDC hDC, RECT * lpRect) { if (nCellIndex == 0) { // draw an overlay with italic font static LOGFONT lf; HFONT hFont, hOldFont; lf.lfHeight = RECT_HEIGHT(lpRect); lf.lfItalic = TRUE; wsprintf(lf.lfFaceName, TEXT("Times new Roman\0")); SetTextAlign(hDC, TA_BOTTOM | TA_RIGHT); SetTextColor(hDC, RGB(255, 255, 255)); hFont = CreateFontIndirect(&lf); hOldFont = SELECT_FONT(hDC, hFont); TextOut(hDC, lpRect->right, lpRect->bottom, TEXT("Owner Text"), 10); } return TRUE; } L_INT LImageViewerChild::ActionCallBack(HBITMAPLIST * phBitmapList, L_UINT uCount, L_INT nAction, L_UINT uMessage, WPARAM wParam, POINT * ptMousePos) { UNREFERENCED_PARAMETER(phBitmapList); UNREFERENCED_PARAMETER(uCount); UNREFERENCED_PARAMETER(nAction); UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(ptMousePos); L_INT nRet = 0 ; L_UINT uRow = 0 ; switch(uMessage) { case WM_LBUTTONDOWN: { // The user clicks the left button so the container scroll bar will scroll one step down nRet = GetFirstVisibleRow(&uRow, 0); nRet = SetFirstVisibleRow(uRow + 1, 0); } break; case WM_RBUTTONDOWN: { // The user clicks the right button so the container scroll bar will scroll one step up. nRet = GetFirstVisibleRow(&uRow, 0); nRet = SetFirstVisibleRow(uRow - 1, 0); } break; } return TRUE; } // This function will create a container, add cells with image lists, and add some tags. // Then the function will add some actions to the container. L_INT LImageViewer_CreateExample(CWnd* pwndParent, LImageViewerChild& ImageViewer, LBitmapList BitmapList) { DISPCONTAINERPROPERTIES DispContainerProp; DISPCELLPROPERTIES DispCellProp; RECT rcRect; L_INT nRet; L_INT nCellIndex; // Create a container equal in size to its parent window. pwndParent->GetClientRect(&rcRect); nRet = ImageViewer.Create(pwndParent->GetSafeHwnd(), &rcRect, 0); if(nRet != SUCCESS) return nRet; ImageViewer.EnableActionCallBack(TRUE) ; ImageViewer.EnableTagCallBack(TRUE) ; // load a bitmap list. nRet = BitmapList.Load(MAKE_IMAGE_PATH(TEXT("Image1.dcm")), 0, ORDER_BGRORGRAY); // if the image is corrupted or not found the program will destroy the container and terminate if (nRet != SUCCESS) { ImageViewer.Destroy(FALSE, 0); return nRet; } // Insert a new cell at the end of the container cell queue. nCellIndex = ImageViewer.InsertCell(-1, 0); // Attach the loaded bitmaplist to the newly inserted cell. nRet = ImageViewer.SetCellBitmapList(nCellIndex, BitmapList.GetHandle(),TRUE,0); if(nRet != SUCCESS) return nRet; // Add some tags to the cell nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 1"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 1, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 2"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 2, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 3"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 3, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image1 Text 4"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 1, DISPWIN_ALIGN_LEFTCENTER , 0, TEXT("L"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMLEFT , 0, TEXT("Image1 Text 5"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPCENTER , 0, TEXT("Top"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMCENTER, 0, TEXT("Bottom"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPRIGHT , 0, TEXT("Image1 Text 6"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_RIGHTCENTER , 0, TEXT("R"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 8, DISPWIN_ALIGN_TOPLEFT , DISPWIN_TYPE_FRAME, NULL, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMRIGHT , DISPWIN_TYPE_OWNERDRAW, NULL, 0); if(nRet != SUCCESS) return nRet; BitmapList.SetHandle(NULL,NULL,FALSE); // load another bitmap list nRet = BitmapList.Load(MAKE_IMAGE_PATH(TEXT("Image1.dcm")),0, ORDER_BGRORGRAY); if(nRet != SUCCESS) return nRet; // insert a new cell at the end of the container queue. nCellIndex = ImageViewer.InsertCell(-1, 0); // Attach the loaded bitmap list to the newly inserted cell. nRet = ImageViewer.SetCellBitmapList(nCellIndex, BitmapList.GetHandle(),TRUE,0); if(nRet != SUCCESS) return nRet; // Add some tags to the cell nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 1"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 2, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 2"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 4, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 3"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 6, DISPWIN_ALIGN_TOPLEFT , 0, TEXT("Image3 Text 4"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 1, DISPWIN_ALIGN_LEFTCENTER , 0, TEXT("Image3 Text 5"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMLEFT , 0, TEXT("Image3 Text 6"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPCENTER , 0, TEXT("Image3 Text 7"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMCENTER, 0, TEXT("Image3 Text 8"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_TOPRIGHT , 0, TEXT("Image3 Text 9"), 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_RIGHTCENTER , 0, TEXT("R"),0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 7, DISPWIN_ALIGN_TOPLEFT , DISPWIN_TYPE_SCALE,NULL, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetCellTag(nCellIndex, 0, DISPWIN_ALIGN_BOTTOMRIGHT, DISPWIN_TYPE_OWNERDRAW,NULL, 0); if(nRet != SUCCESS) return nRet; // Change the number of rows and columns to show all the inserted cells. DispContainerProp.uStructSize = sizeof(DISPCONTAINERPROPERTIES); DispContainerProp.uNumCols = 2; DispContainerProp.uNumRows = 1; DispContainerProp.uMask = DCPF_NUMROWS | DCPF_NUMCOLS; nRet = ImageViewer.SetProperties(&DispContainerProp, 0); if(nRet != SUCCESS) return nRet; // Change the number of sub-rows and sub-columns. DispCellProp.uStructSize = sizeof(DISPCELLPROPERTIES); DispCellProp.uNumCols = 3; DispCellProp.uNumRows = 3; nRet = ImageViewer.SetCellProperties(0, &DispCellProp, 0); if(nRet != SUCCESS) return nRet; BitmapList.SetHandle(NULL,NULL,FALSE); // Add some actions to the container. nRet = ImageViewer.AddAction(110, 0); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetAction(110, CONTAINER_MOUSE_BUTTON_LEFT, DCACTION_ACTIVEONLY); if(nRet != SUCCESS) return nRet; nRet = ImageViewer.SetAction(110, CONTAINER_MOUSE_BUTTON_RIGHT, DCACTION_ACTIVEONLY); if(nRet != SUCCESS) return nRet; return SUCCESS; } #endif // LEADTOOLS_V17_OR_LATER