#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\\")pFileName
typedef 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 class
wndclass.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 while
if (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 them
L_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 horizontaly
DispContainerProp.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 tags
L_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;
}