#include "l_bitmap.h"
L_LTIVW_API L_BOOL EXT_FUNCTION L_DispContainerHandlePalette(hCellWnd, uMessage, wParam, uFlags)
L_HWND hCellWnd; |
handle to the cell window |
L_UINT uMessage; |
message |
WPARAM wParam; |
wParam value to be passed to the message |
L_UINT uFlags; |
reserved for future use |
Provides an interface with the viewer to allow it to receive messages that inform the control that the palette has been changed.
Parameter |
Description |
hCellWnd |
Handle to the cell window. |
uMessage |
Value that indicate the message that will be sent to the viewer main window. |
wParam |
wParam value to be passed to the message. |
uFlags |
Reserved for future use. Pass 0. |
SUCCESS |
The function was successful. |
< 1 |
An error occurred. Refer to Return Codes. |
This function is used to display images correctly when working on 8-bit viewing systems.
The allowed messages to be recived through the parameter uMessage are:
WM_PALETTECHANGED
WM_PALETTEISCHANGING
WM_QUERYNEWPALETTE
WM_SYSCOLORCHANGE
In order to use this function, first set the uFlags parameter of the L_DispContainerCreate function to CONTAINER_HANDLEPALETTE.
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. |
Platforms
The toolkit comes in Win32 and x64 editions that can support development of software applications for any of the following environments:
Windows 10
Windows 8
Windows 7
Windows Vista
Windows XP
Windows 2000
Functions: |
L_DispContainerCreate, L_DispContainerInsertCell, L_DispContainerSetCellBitmapList, L_DispContainerDestroy |
Topics: |
|
|
This example creates a medical viewer control that works on 8-bit palette display monitors.
#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileNametypedef struct tagDATA{HBITMAPLIST hBitmapList;L_BOOL bWindowLevel;L_INT nAction;HDISPCONTAINER hCon;L_INT nApplyToAllSubCells;HWND hWndAnimationDialog;}DATA, * LPDATA;HWND hWndParent;#define SETDATA(hwnd, h) L_SETWINDOWLONGPTR(hwnd, GWLP_USERDATA, (HANDLE)(h))#define LOCKDATA(hwnd) ((LPDATA) GlobalLock((HANDLE)L_GETWINDOWLONGPTR(hwnd, GWLP_USERDATA)))#define UNLOCKDATA(hwnd) GlobalUnlock((HANDLE)L_GETWINDOWLONGPTR(hwnd, GWLP_USERDATA))L_INT CreateNewCell(HWND hWnd, L_TCHAR * 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;HWND hConWnd = L_DispContainerGetWindowHandle(pData->hCon, 0);HWND hCellWnd = L_DispContainerCreateCell(hConWnd, 0);nIndex = L_DispContainerInsertCell(pData->hCon, hCellWnd, -1, 0);nRet = L_DispContainerSetCellBitmapList(hCellWnd,pData->hBitmapList,TRUE,0);return SUCCESS;}LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam){LPDATA pData = NULL;pData = (LPDATA)LOCKDATA(hWnd);L_INT nCellIndex = 0;HWND hCellWnd = NULL;hCellWnd = L_DispContainerGetCellWindowHandle(pData->hCon, nCellIndex, 0);switch(uMessage){case WM_SYSCOLORCHANGE:case WM_QUERYNEWPALETTE:if (hCellWnd != NULL){L_DispContainerHandlePalette(hCellWnd, uMessage, 0, 0);L_DispContainerRepaintCell(hCellWnd, 0);}break;case WM_PALETTEISCHANGING:case WM_PALETTECHANGED:if (hCellWnd != NULL){L_DispContainerHandlePalette(hCellWnd, uMessage, wParam, 0);L_DispContainerRepaintCell(hCellWnd, 0);}break;}return DefWindowProc(hWnd, uMessage, wParam, lParam);}L_INT DispContainerHandlePaletteExample(HINSTANCE hInstance){MSG uMessage;WNDCLASS wndclass;HANDLE hMem;LPDATA pData;HACCEL hAccel;RECT rcRect;DISPCONTAINERPROPERTIES DispContainerProp;DISPCELLPROPERTIES DispCellProp;L_TCHAR szText[L_MAXPATH];L_INT nRet;//register the Image child window classwndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = sizeof(HANDLE);wndclass.hInstance = hInstance;wndclass.hIcon = NULL;wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);wndclass.hbrBackground = GetStockBrush(GRAY_BRUSH);wndclass.lpszMenuName = NULL;wndclass.lpszClassName = TEXT("HandlePaletteExample");if (!RegisterClass(&wndclass))return 0;hWndParent = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("HandlePaletteExample"),TEXT("Image Viewer Demo"),WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);hMem = GlobalAlloc (GHND, sizeof (DATA));SETDATA (hWndParent, hMem);if(!hMem)return(FALSE);pData = (LPDATA)LOCKDATA(hWndParent);memset(pData, 0, sizeof(LPDATA));pData->hCon = NULL;// you must unlock the medical suite in order to be able to use the medical viewer.//UNLOCKSUPPORT();// Initialize the container by making it the same size as its parent.GetClientRect(hWndParent, &rcRect);pData->hCon = L_DispContainerCreate(hWndParent, &rcRect, CONTAINER_HANDLEPALETTE);// If there is a problem occur whileif (pData->hCon == NULL){L_INT nError = GetLastError();wsprintf(szText, TEXT("Error %d"), nError);MessageBox(hWndParent, szText, TEXT("Aborting"), MB_OK);L_DispContainerDestroy(pData->hCon, 0);GlobalFree(hMem);return FALSE;}HWND hCellWnd = L_DispContainerGetCellWindowHandle(pData->hCon, 0, 0);// Add some action and activate themL_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_WINDOWLEVEL, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ALPHA, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_OFFSET , 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_MAG, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_SCALE , 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_STACK , 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_RULER, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_ELLIPSE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_RECTANGLE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_TEXT, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_ARROW, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_ANGLE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_ANNOTATION_HILITE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_RECTANGLE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_NUDGETOOL, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_SHRINKTOOL, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_ELLIPSE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_POLYGON, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_FREEHAND, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_MAGICWAND, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_COLORRANGE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_CIRCLE, 0);L_DispContainerAddAction(hCellWnd, CONTAINER_ACTION_REGION_SQUARE, 0);// assign the action to a mouse button.L_DispContainerSetAction(hCellWnd, CONTAINER_ACTION_WINDOWLEVEL, CONTAINER_MOUSE_BUTTON_LEFT, 0);L_DispContainerSetAction(hCellWnd, CONTAINER_ACTION_OFFSET, CONTAINER_MOUSE_BUTTON_RIGHT, 0);L_DispContainerSetAction(hCellWnd, CONTAINER_ACTION_SCALE, CONTAINER_MOUSE_BUTTON_MIDDLE, 0);L_DispContainerSetAction(hCellWnd, CONTAINER_ACTION_STACK, CONTAINER_MOUSE_WHEEL, 0);SetCursor(LoadCursor(NULL, IDC_WAIT));// set the image viewer interface to show two cells, that are arranged horizontalyDispContainerProp.uStructSize = sizeof(DISPCONTAINERPROPERTIES);DispContainerProp.uNumCols = 2;DispContainerProp.uNumRows = 1;DispContainerProp.uMask = DCPF_NUMROWS | DCPF_NUMCOLS;nRet = L_DispContainerSetProperties(pData->hCon, &DispContainerProp, 0);CreateNewCell(hWndParent, MAKE_IMAGE_PATH(TEXT("xa.dcm")));// Set some tags.L_DispContainerSetCellTag(hCellWnd, 2, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("EX. ID 230-36-5448"), 0);L_DispContainerSetCellTag(hCellWnd, 4, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_FRAME, NULL,0);L_DispContainerSetCellTag(hCellWnd, 6, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_SCALE, NULL,0);L_DispContainerSetCellTag(hCellWnd, 2, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_WLCENTERWIDTH, NULL,0);L_DispContainerSetCellTag(hCellWnd, 1, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_FIELDOFVIEW, NULL,0);L_DispContainerSetCellTag(hCellWnd, 1, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Good, Guy"), 0);L_DispContainerSetCellTag(hCellWnd, 2, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("PID 125-98-445"), 0);L_DispContainerSetCellTag(hCellWnd, 3, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("DOB 08/02/1929"), 0);L_DispContainerSetCellTag(hCellWnd, 5, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("03/16/1999"), 0);L_DispContainerSetCellTag(hCellWnd, 0, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_RULERUNIT, NULL, 0);DispCellProp.uStructSize = sizeof(DISPCELLPROPERTIES);DispCellProp.bIsFit = TRUE;DispCellProp.uMask = DCCELLPF_IMAGE_FIT;nRet = L_DispContainerSetCellProperties(hCellWnd, &DispCellProp, 0);CreateNewCell(hWndParent, MAKE_IMAGE_PATH(TEXT("mr.dcm")));HWND hCellWnd1 = L_DispContainerGetCellWindowHandle(pData->hCon, 1, 0);// set some tagsL_DispContainerSetCellTag(hCellWnd1, 1, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("MRI"), 0);L_DispContainerSetCellTag(hCellWnd1, 2, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_USERDATA, TEXT("EX. ID G-1194-24"), 0);L_DispContainerSetCellTag(hCellWnd1, 4, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_FRAME, NULL,0);L_DispContainerSetCellTag(hCellWnd1, 6, DISPWIN_ALIGN_TOPLEFT, DISPWIN_TYPE_SCALE, NULL,0);L_DispContainerSetCellTag(hCellWnd1, 2, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_WLCENTERWIDTH, NULL,0);L_DispContainerSetCellTag(hCellWnd1, 1, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_FIELDOFVIEW, NULL,0);L_DispContainerSetCellTag(hCellWnd1, 0, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("THK 10 mm"), 0);L_DispContainerSetCellTag(hCellWnd1, 3, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("TR 1333.33"), 0);L_DispContainerSetCellTag(hCellWnd1, 4, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("TE 11.98"), 0);L_DispContainerSetCellTag(hCellWnd1, 6, DISPWIN_ALIGN_BOTTOMLEFT, DISPWIN_TYPE_USERDATA, TEXT("Comm longaxis - Normal"), 0);L_DispContainerSetCellTag(hCellWnd1, 0, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Community Hospital"), 0);L_DispContainerSetCellTag(hCellWnd1, 1, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Nice, Fellow"), 0);L_DispContainerSetCellTag(hCellWnd1, 2, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("PID 123-45-6789"), 0);L_DispContainerSetCellTag(hCellWnd1, 3, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("DOB 05/13/1936"), 0);L_DispContainerSetCellTag(hCellWnd1, 4, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("Sex M"), 0);L_DispContainerSetCellTag(hCellWnd1, 5, DISPWIN_ALIGN_TOPRIGHT, DISPWIN_TYPE_USERDATA, TEXT("06/26/1995"), 0);// set the cell interface so it shows 4 frames at once.DispCellProp.uNumCols = 2;DispCellProp.uNumRows = 2;DispCellProp.bIsFit = TRUE;DispCellProp.bOnMove = TRUE;DispCellProp.uMask = DCCELLPF_COLS | DCCELLPF_ROWS | DCCELLPF_IMAGE_FIT | DCCELLPF_APPLYONMOVE;nRet = L_DispContainerSetCellProperties(hCellWnd1, &DispCellProp, 0);SetCursor(LoadCursor(NULL, IDC_ARROW));ShowWindow(hWndParent, SW_MAXIMIZE);UpdateWindow(hWndParent);hAccel = LoadAccelerators(hInstance, TEXT("HandlePaletteExample"));while (GetMessage (&uMessage, NULL, 0, 0)){if(!TranslateMDISysAccel (hWndParent, &uMessage) &&!TranslateAccelerator (hWndParent, hAccel, &uMessage)){TranslateMessage (&uMessage);DispatchMessage (&uMessage);}}GlobalFree(hMem);return (L_INT)uMessage.wParam;}