/*[]=====================================================================[]*/ /*[] LEADTOOLS for Windows - Version 11 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #define STRICT #include #include #include #include #include #include #include #include #include "../../../include/l_bitmap.h" #include "../../../include/l_error.h" #include "fpxdemo.h" /* Internal Functions */ static VOID LEADTOOLS_OnSize(HWND hWnd, UINT state, int cx, int cy); static VOID LEADTOOLS_OnClose (HWND hWnd); static VOID LEADTOOLS_OnCommand (HWND hWnd, int id, HWND hwndCtl, UINT codeNotify); static BOOL LEADTOOLS_OnQueryNewPalette (HWND hwnd); static VOID LEADTOOLS_OnPaletteChanged (HWND hwnd, HWND hwndPaletteChange); static VOID LEADTOOLS_OnPaletteChanging(HWND hWnd, HWND hWndPaletteChange); static VOID LEADTOOLS_SysColorChange(HWND hwnd); static VOID LEADTOOLS_OnInitMenuPopup (HWND hWnd, HMENU hMenu, L_INT nItem, BOOL fSystemMenu); static VOID LEADTOOLS_OnDestroy (HWND hWnd); static BOOL LEADTOOLS_OnCreate (HWND hWnd, CREATESTRUCT FAR * lpCreateStruct); static L_VOID RedrawChildren (L_BOOL fErase, L_BOOL fNewPalette); static L_VOID OpenBitmap(L_VOID); /* Internal Variables */ static OPENPARM OpenParm = { TEXT(""), TEXT(""), 1, 0 }; /*====(FrameWindowProc)=================================================== Description: Handles all messages dispatched to the Frame window. Other messages that cannot be processed will be dispatched to the Client window procedure. Syntax : LRESULT CALLBACK L_EXPORT FrameWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) Prototype : fpxdemo.h Parameters : hWnd Handle to a window. Msg Windows message structure. wParam Windows word parameter. lParam Windows long parameter. Return Value: This is specific for each message. See Windows Programmer's Reference Volume 3. ==========================================================================*/ LRESULT CALLBACK L_EXPORT FrameWindowProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { HANDLE_MSG (hWnd, WM_CREATE, LEADTOOLS_OnCreate); HANDLE_MSG (hWnd, WM_INITMENUPOPUP, LEADTOOLS_OnInitMenuPopup); HANDLE_MSG (hWnd, WM_PALETTECHANGED, LEADTOOLS_OnPaletteChanged); HANDLE_MSG (hWnd, WM_QUERYNEWPALETTE, LEADTOOLS_OnQueryNewPalette); HANDLE_MSG (hWnd, WM_PALETTEISCHANGING, LEADTOOLS_OnPaletteChanging); HANDLE_MSG (hWnd, WM_SYSCOLORCHANGE, LEADTOOLS_SysColorChange); HANDLE_MSG (hWnd, WM_CLOSE, LEADTOOLS_OnClose); HANDLE_MSG (hWnd, WM_DESTROY, LEADTOOLS_OnDestroy); HANDLE_MSG (hWnd, WM_COMMAND, LEADTOOLS_OnCommand); HANDLE_MSG (hWnd, WM_SIZE, LEADTOOLS_OnSize); } return(DefFrameProc (hWnd, hWndClient, Msg, wParam, lParam)); } /*====(LEADTOOLS_OnSize)================================================== Description: Handles the WM_SIZE message. It positions the Status Bar and Client windows. Syntax : VOID LEADTOOLS_OnSize(HWND hWnd, UINT state, int cx, int cy) Parameters : hWnd Handle to the window. state Window state cx Client area width cy Client area height Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnSize(HWND hWnd, UINT state, int cx, int cy) { DefFrameProc (hWnd, hWndClient, WM_SIZE, (WPARAM)state, MAKELPARAM(cx, cy)); return; } /*====(LEADTOOLS_OnClose)================================================== Description: Handles the WM_CLOSE message. It sends IDM_CLOSEALL to close all open child windows and to destroy the frame window. Syntax : VOID LEADTOOLS_OnClose(HWND hWnd) Parameters : hWnd Handle to the window. Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnClose (HWND hWnd) { FORWARD_WM_COMMAND (hWnd, IDM_WINDOW_CLOSE_ALL, 0, 0, SendMessage); DestroyWindow (hWnd); return; } /*====(LEADTOOLS_OnCommand)================================================== Description: Translates the WM_COMMAND message sent to the frame window procedure. Other command messages that are specific to the child window will be forwarded to that window. Syntax : VOID LEADTOOLS_OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) Parameters : hWnd Handle to the window. id Control or menu item identifier. hwndCtl Handle of control codeNotify Notification message Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnCommand (HWND hWnd, int id, HWND hwndCtl, UINT codeNotify) { FARPROC lpfn; switch (id) { case IDM_FILE_OPEN: OpenBitmap(); break; case IDM_FILE_EXIT: FORWARD_WM_CLOSE(hWnd, SendMessage); break; case IDM_PREFERENCES_LOADING_BGR_VIDEO_ORDER: fIsBGRDevice = fIsBGRDevice ? FALSE : TRUE; break; case IDM_PREFERENCES_PALETTE_NETSCAPE: fNetscapePalette = !fNetscapePalette; RedrawChildren(FALSE, TRUE); break; case IDM_PREFERENCES_PALETTE_AUTO: case IDM_PREFERENCES_PALETTE_FIXED: nPaletteMode = id; RedrawChildren(FALSE, TRUE); break; case IDM_PREFERENCES_DITHERING_ERROR_DIFFUSION: case IDM_PREFERENCES_DITHERING_ORDERED: nDitherMode = id; RedrawChildren(FALSE, FALSE); break; case IDM_PREFERENCES_BITONAL_SCALING_NORMAL: case IDM_PREFERENCES_BITONAL_SCALING_FAVOR_BLACK: case IDM_PREFERENCES_BITONAL_SCALING_SCALE_TO_GRAY: nBitonalMode = id; RedrawChildren(FALSE, TRUE); break; case IDM_WINDOW_CASCADE: FORWARD_WM_MDICASCADE(hWndClient, 0, SendMessage); break; case IDM_WINDOW_TILE: FORWARD_WM_MDITILE(hWndClient, MDITILE_HORIZONTAL, SendMessage); break; case IDM_WINDOW_ARRANGE_ICONS: FORWARD_WM_MDIICONARRANGE(hWndClient, SendMessage); break; case IDM_WINDOW_CLOSE_ALL: lpfn = MakeProcInstance((FARPROC) CloseAll, hInst); EnumChildWindows(hWndClient, (WNDENUMPROC) lpfn, 0); FreeProcInstance(lpfn); break; case IDM_HELP_ABOUT: DoDialogBoxParam(IDD_ABOUT, hWnd, (DLGPROC) AboutDlgProc, 0); break; default: { HWND hWndChild = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); if (IsWindow (hWndChild)) FORWARD_WM_COMMAND(hWndChild, id, hwndCtl, codeNotify, SendMessage); DefFrameProc(hWnd, hWndClient, WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl)); } } return; } /*====(LEADTOOLS_OnQueryNewPalette)========================================= Description: Responds to a WM_QUERYNEWPALETTE message, forwarding to the child window that it will receive the focus and should realize any palette that it has. Syntax : BOOL LEADTOOLS_OnQueryNewPalette(HWND hwnd) Parameters : hwnd Handle to a window. Return Value: TRUE Function was successful, so respond to the message. ==========================================================================*/ static BOOL LEADTOOLS_OnQueryNewPalette (HWND hwnd) { HWND hWndChild = FORWARD_WM_MDIGETACTIVE (hWndClient, SendMessage); UNREFERENCED_PARAMETER(hwnd); if (IsWindow (hWndChild)) FORWARD_WM_QUERYNEWPALETTE (hWndChild, SendMessage); return(TRUE); } /*====(Window_OnPaletteChanging)========================================== Description: Enumerates all child windows and asks them to realize their logical palettes beside the physical palette. Syntax : static VOID LEADTOOLS_OnPaletteChanging(HWND hWnd, HWND hWndPaletteChange) Parameters : hwnd Handle to a window. hWndPaletteChange Handle to a window that has the palette realized. Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnPaletteChanging(HWND hWnd, HWND hWndPaletteChange) { LEADTOOLS_OnPaletteChanged (hWnd, hWndPaletteChange); } /*====(Window_SysColorChange)========================================== Syntax: static VOID LEADTOOLS_SysColorChange(HWND hwnd) Parameters: hWnd Handle to a window. Prototype: Loadsave.h Notes: This procedure is responsible for handling WM_SYSCOLORCHANGE. --------------------------------------------------------------------------*/ static VOID LEADTOOLS_SysColorChange(HWND hwnd) { LEADTOOLS_OnQueryNewPalette (hwnd); } /*====(LEADTOOLS_OnPaletteChanged)========================================== Description: Enumerates all child windows and asks them to realize their logical palettes beside the physical palette. Syntax : VOID LEADTOOLS_OnPaletteChanged(HWND hwnd, HWND hWndPaletteChange) Parameters : hwnd Handle to a window. hWndPaletteChange Handle to a window that has the palette realized. Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnPaletteChanged (HWND hWnd, HWND hWndPaletteChange) { FARPROC lpfn = MakeProcInstance ((FARPROC) PaletteChangedAll, hInst); UNREFERENCED_PARAMETER(hWnd); EnumChildWindows (hWndClient, (WNDENUMPROC) lpfn, (LPARAM) (UINT) hWndPaletteChange); FreeProcInstance (lpfn); return; } /*====(LEADTOOLS_OnInitMenuPopup)============================================ Description: Initializes the main popup menu when the user clicks on one of the menu items. Syntax : VOID LEADTOOLS_OnInitMenuPopup(HWND hWnd, HMENU hMenu, L_INT nItem, BOOL fSystemMenu) Parameters : hWnd Handle to the window using the popup menu. hMenu Handle to the menu to be used. nItem Number of items in the menu. fSystemMenu Truth of "Is the menu a system menu". Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnInitMenuPopup (HWND hWnd, HMENU hMenu, L_INT nItem, BOOL fSystemMenu) { HWND hWndChild; LPCHILDDATA pData = NULL; L_BOOL fHasChild; hWndChild = FORWARD_WM_MDIGETACTIVE (hWndClient, SendMessage); if (!fSystemMenu && GetSubMenu (GetMenu (hWnd), nItem) == hMenu) { fHasChild = IsWindow (hWndChild); if (fHasChild) { pData = LOCKCHILDDATA (hWndChild); if (IsZoomed (hWndChild)) nItem--; } switch (nItem) { case MENU_FILE_POS: ENABLEMENUITEM (hMenu, IDM_FILE_SAVEAS, fHasChild); break; case MENU_VIEW_POS: ENABLEMENUITEM (hMenu, IDM_VIEW_NORMAL, fHasChild); ENABLEMENUITEM (hMenu, IDM_VIEW_ZOOM, fHasChild); ENABLEMENUITEM (hMenu, IDM_VIEW_FIT_IMAGE_TO_WINDOW, fHasChild); ENABLEMENUITEM (hMenu, IDM_VIEW_SNAP_WINDOW_TO_IMAGE, fHasChild && !pData->fFitImage && !IsIconic(hWndChild) && !IsZoomed(hWndChild)); CHECKMENUITEM (hMenu, IDM_VIEW_NORMAL, fHasChild && !pData->fFitImage && pData->nZoom == 100); CHECKMENUITEM (hMenu, IDM_VIEW_ZOOM, fHasChild && !pData->fFitImage && pData->nZoom != 100); CHECKMENUITEM (hMenu, IDM_VIEW_FIT_IMAGE_TO_WINDOW, fHasChild && pData->fFitImage); break; case MENU_INFORMATION_POS: ENABLEMENUITEM (hMenu, IDM_INFORMATION_SUMMARY_INFORMATION, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_FILE_SOURCE_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_INTELLECTUAL_PROPERTY_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_CONTENT_DESCRIPTION_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_CAMERA_INFORMATION_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_PER_PICTURE_CAMERA_SETTINGS_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_DIGITAL_CAMERA_CHARACTERIZATION_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_FILM_DESCRIPTION_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_ORIGINAL_DOCUMENT_SCAN_DESCRIPTION_GROUP, fHasChild); ENABLEMENUITEM (hMenu, IDM_INFORMATION_SCAN_DEVICE_PROPERTY_GROUP, fHasChild); break; case MENU_TRANSFORMS_POS: ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_ROTATION, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SHEAR_HORIZONTAL, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SHEAR_VERTICAL, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_FLIP_HORIZONTAL, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_FLIP_VERTICAL, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SCALING, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_RESTORE_ORIGINAL_VIEWING_TRANSFORMS, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_IGNORE_VIEWING_TRANSFORMS, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_LIGHTEN, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SATURATION, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_RED_BALANCE, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_GREEN_BALANCE, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_BLUE_BALANCE, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_CONTRAST, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SHARPNESS, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_RESTORE_ORIGINAL_COLOR_TRANSFORMS, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_IGNORE_COLOR_TRANSFORMS, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SAVE_TRANSFORMS_FALSE, fHasChild); ENABLEMENUITEM (hMenu, IDM_TRANSFORMS_SAVE_TRANSFORMS_TRUE, fHasChild); break; case MENU_PREFERENCE_POS: CHECKMENUITEM (hMenu, IDM_PREFERENCES_LOADING_BGR_VIDEO_ORDER, fIsBGRDevice ? TRUE : FALSE); CHECKMENUITEM (hMenu, IDM_PREFERENCES_DITHERING_ORDERED, nDitherMode == IDM_PREFERENCES_DITHERING_ORDERED); CHECKMENUITEM (hMenu, IDM_PREFERENCES_DITHERING_ERROR_DIFFUSION, nDitherMode == IDM_PREFERENCES_DITHERING_ERROR_DIFFUSION); CHECKMENUITEM (hMenu, IDM_PREFERENCES_BITONAL_SCALING_NORMAL, nBitonalMode == IDM_PREFERENCES_BITONAL_SCALING_NORMAL); ENABLEMENUITEM (hMenu, IDM_PREFERENCES_BITONAL_SCALING_SCALE_TO_GRAY, VersionInfo.Level == TOOLKIT_LEVEL_DOCUMENT||VersionInfo.Level == TOOLKIT_LEVEL_MEDICAL); ENABLEMENUITEM (hMenu, IDM_PREFERENCES_BITONAL_SCALING_FAVOR_BLACK, VersionInfo.Level == TOOLKIT_LEVEL_DOCUMENT||VersionInfo.Level == TOOLKIT_LEVEL_MEDICAL); CHECKMENUITEM (hMenu, IDM_PREFERENCES_BITONAL_SCALING_SCALE_TO_GRAY, nBitonalMode == IDM_PREFERENCES_BITONAL_SCALING_SCALE_TO_GRAY); CHECKMENUITEM (hMenu, IDM_PREFERENCES_BITONAL_SCALING_FAVOR_BLACK, nBitonalMode == IDM_PREFERENCES_BITONAL_SCALING_FAVOR_BLACK); CHECKMENUITEM (hMenu, IDM_PREFERENCES_PALETTE_AUTO, nPaletteMode == IDM_PREFERENCES_PALETTE_AUTO); CHECKMENUITEM (hMenu, IDM_PREFERENCES_PALETTE_FIXED, nPaletteMode == IDM_PREFERENCES_PALETTE_FIXED); CHECKMENUITEM (hMenu, IDM_PREFERENCES_PALETTE_NETSCAPE, fNetscapePalette); break; case MENU_WINDOW_POS: ENABLEMENUITEM (hMenu, IDM_WINDOW_CASCADE, fHasChild); ENABLEMENUITEM (hMenu, IDM_WINDOW_TILE, fHasChild); ENABLEMENUITEM (hMenu, IDM_WINDOW_ARRANGE_ICONS, fHasChild); ENABLEMENUITEM (hMenu, IDM_WINDOW_CLOSE_ALL, fHasChild); break; } if (fHasChild) UNLOCKCHILDDATA (hWndChild); } return; } /*====(LEADTOOLS_OnDestroy)================================================= Description: Performs cleanup for the program, and posts WM_QUIT to terminate the application. Syntax : VOID LEADTOOLS_OnDestroy(HWND hWnd) Parameters : hWnd Handle to a window. Return Value: None. ==========================================================================*/ static VOID LEADTOOLS_OnDestroy (HWND hWnd) { UNREFERENCED_PARAMETER(hWnd); L_DlgFree (); PostQuitMessage (0); return; } /*====(LEADTOOLS_OnCreate)======================================================== Description: Creates a client window in response to WM_CREATE from the frame window. Syntax : BOOL LEADTOOLS_OnCreate(HWND hWnd, CREATESTRUCT FAR* lpCreateStruct) Parameters : hWnd Handle to current window. lpCreateStruct pointer to CREATESTRUCT Return Value: TRUE The function was successful in creating window. FALSE The function was not successful. ==========================================================================*/ static BOOL LEADTOOLS_OnCreate (HWND hWnd, CREATESTRUCT FAR * lpCreateStruct) { CLIENTCREATESTRUCT ClientStruct; UNREFERENCED_PARAMETER(lpCreateStruct); ClientStruct.hWindowMenu = GetSubMenu (GetMenu (hWnd), MENU_WINDOW_POS); ClientStruct.idFirstChild = IDM_FIRSTCHILD; hWndClient = CreateWindow (TEXT("MDICLIENT"), NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU) 1, hInst, (VOID FAR *) & ClientStruct); if (!hWndClient) return(FALSE); return(TRUE); } /*====(CloseAll)=========================================================== Description: Performs as a callback. Used by EnumChildWindows to send WM_CLOSE to each child window. Syntax : L_BOOL CloseAll(HWND hWnd, LPARAM lParam) Prototype : fpxdemo.h Parameters : hWnd Handle to a window. lParam long parameter. Return Value: TRUE Function was successful, goto to next child. ==========================================================================*/ L_BOOL CALLBACK L_EXPORT CloseAll (HWND hWnd, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); if (GetWindow (hWnd, GW_OWNER)) return(TRUE); FORWARD_WM_MDIRESTORE (GetParent (hWnd), hWnd, SendMessage); FORWARD_WM_CLOSE (hWnd, SendMessage); return(TRUE); } /*====(RedrawChildrenCB)=================================================== Description: Forces painting of the window. Syntax : L_BOOL CALLBACK L_EXPORT RedrawChildrenCB (HWND hWnd, LPARAM lParam) Prototype : fpxdemo.h Parameters : hWnd Window to redraw. lParam Windows long parameter. Return Value: TRUE Function was succcessful. ==========================================================================*/ L_BOOL CALLBACK L_EXPORT RedrawChildrenCB (HWND hWnd, LPARAM lParam) { if (GetWindow (hWnd, GW_OWNER)) return(TRUE); if (HIWORD(lParam)) FORWARD_WM_QUERYNEWPALETTE (hWnd, SendMessage); InvalidateRect (hWnd, NULL, LOWORD(lParam)); return(TRUE); } /*====(RedrawChildren)==================================================== Description: Enumerates all child windows and makes them repaint. Syntax : static L_VOID RedrawChildren (L_BOOL fErase, L_BOOL fNewPalette) Parameters : fErase Erase the backGround? fNewPalette Is there a new palette? Return Value: None. ==========================================================================*/ static L_VOID RedrawChildren (L_BOOL fErase, L_BOOL fNewPalette) { FARPROC lpfn = MakeProcInstance ((FARPROC) RedrawChildrenCB, hInst); EnumChildWindows (hWndClient, (WNDENUMPROC) lpfn, MAKELONG (fErase, fNewPalette)); FreeProcInstance (lpfn); return; } /*====(EnableFrameMenu)==================================================== Description: Enables Frame menu items. Syntax : L_VOID EnableFrameMenu (L_BOOL fEnable) Prototype : fpxdemo.h Parameters : fEnable Should items be enabled? Return Value: None. ==========================================================================*/ L_VOID EnableFrameMenu (L_BOOL fEnable) { HWND hWndChild; HMENU hMenu; L_INT nItem; hMenu = GetMenu (hWndFrame); nItem = 0; hWndChild = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); if (IsWindow (hWndChild)) { if (IsZoomed (hWndChild)) nItem = 1; } ENABLEMENUPOS (hMenu, MENU_FILE_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_VIEW_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_INFORMATION_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_TRANSFORMS_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_PREFERENCE_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_WINDOW_POS + nItem, fEnable); ENABLEMENUPOS (hMenu, MENU_HELP_POS + nItem, fEnable); hMenu = GetSystemMenu (hWndFrame, FALSE); ENABLEMENUITEM (hMenu, SC_CLOSE, fEnable); DrawMenuBar (hWndFrame); return; } /*====(PaletteChangedAll)================================================== Description: Performs as a callback. Used by EnumChildWindows to realize logical palettes. Syntax : L_BOOL CALLBACK L_EXPORT PaletteChangedAll(HWND hwnd, LPARAM lParam) Prototype : fpxdemo.h Parameters : hwnd Handle to a window. lParam LEAD parameter structure. Return Value: TRUE Function is successful. ==========================================================================*/ L_BOOL CALLBACK L_EXPORT PaletteChangedAll (HWND hWnd, LPARAM lParam) { if (GetWindow (hWnd, GW_OWNER)) return(TRUE); FORWARD_WM_PALETTECHANGED (hWnd, (HWND) (UINT) (lParam), SendMessage); return(TRUE); } /*====(AboutDlgProc)====================================================== Description: Processes messages for the about dialog box. Syntax : L_BOOL CALLBACK L_EXPORT AboutDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Prototype : fpxdemo.h Parameters : hWnd Handle to the window using the popup menu. hMenu Handle to the menu to be used. nItem Number of items in the menu. fSystemMenu Truth of "Is the menu a system menu". Return Value: TRUE WM_INITDIALOG and WM_COMMAND (IDOK or IDCANCEL) messages processed. FALSE A different message was processed. ==========================================================================*/ L_BOOL CALLBACK L_EXPORT AboutDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return(TRUE); case WM_COMMAND: switch (CTLID(wParam, lParam)) { case IDOK: case IDCANCEL: EndDialog (hDlg, 0); return(TRUE); } } return(FALSE); } /*====(CreateChildWindow)================================================== Description: Sets up data for MDI child window creation. Syntax : HWND CreateChildWindow (LPTSTR pszFile, LPTSTR pszTitle, pBITMAPHANDLE pBitmap) Prototype : fpxdemo.h Parameters : pszTitle Title for the window. pBitmap Image to set in the window. Return Value: hWndChild Window handle of the child window. ==========================================================================*/ HWND CreateChildWindow (LPOPENPARM pOpenParm, pBITMAPHANDLE pBitmap) { MDICREATESTRUCT mdiCreateStruct; CREATEDATA CreateData; HWND hWndChild,hParent; HICON hIcon; CreateData.pszTitle = pOpenParm->szFile; CreateData.pBitmap = pBitmap; CreateData.pTransforms = &pOpenParm->Transforms; CreateData.pszFile = pOpenParm->szPath; CreateData.nPage = pOpenParm->nPage; mdiCreateStruct.szClass = szChildClass; mdiCreateStruct.szTitle = pOpenParm->szFile; mdiCreateStruct.hOwner = hInst; mdiCreateStruct.x = CW_USEDEFAULT; mdiCreateStruct.y = CW_USEDEFAULT; mdiCreateStruct.cx = CW_USEDEFAULT; mdiCreateStruct.cy = CW_USEDEFAULT; mdiCreateStruct.style = MDIS_ALLCHILDSTYLES; mdiCreateStruct.lParam = (LPARAM) (LPCREATEDATA) & CreateData; hWndChild = FORWARD_WM_MDICREATE (hWndClient, (LPMDICREATESTRUCT) & mdiCreateStruct, SendMessage); hParent=GetParent(hWndChild); hIcon = (HICON) LoadImage( (HANDLE)GetWindowLong(hParent,GWL_HINSTANCE), MAKEINTRESOURCE(IDI_MAIN), IMAGE_ICON, GetSystemMetrics( SM_CXSMICON ), GetSystemMetrics( SM_CYSMICON ), 0 ); /* Set the applilcation small and big icons */ SendMessage( hWndChild, WM_SETICON, ICON_SMALL, (LPARAM) hIcon ); return(hWndChild); } /*====(OpenBitmap)======================================================== Description: Loads the image from file and creates a child window for the image. Syntax : static L_VOID OpenBitmap(L_VOID) Parameters : None. Return Value: None. ==========================================================================*/ static L_VOID OpenBitmap(L_VOID) { HCURSOR hCursor; static BITMAPHANDLE Bitmap; L_INT nRet; HWND hWndChild = NULL; L_BOOL fLoadInfo; fLoadInfo = EnableLoadInfo(TRUE); if (GetOpenParm (hWndFrame, TEXT("Open File"), &OpenParm)) { LoadFileOption.Passes = 1; hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)); nRet = L_ReadFileTransforms(OpenParm.szPath, &OpenParm.Transforms, &LoadFileOption); if (nRet != SUCCESS) { IgnoreViewingTransforms(&OpenParm.Transforms); IgnoreColorTransforms(&OpenParm.Transforms); } nRet = L_LoadBitmap (OpenParm.szPath, &Bitmap, sizeof(BITMAPHANDLE), 0, fIsBGRDevice ? ORDER_BGR : ORDER_RGB, &LoadFileOption, NULL); if(nRet == SUCCESS) { CreateChildWindow (&OpenParm, &Bitmap); } } else return; SetCursor (hCursor); if (nRet != SUCCESS) { L_FileError (hWndFrame, nRet, (LPTSTR) TEXT("Open File"), OpenParm.szPath); } EnableLoadInfo(fLoadInfo); return; } L_VOID ReLoadBitmap (LPTSTR pszFile, L_INT nPage, pFILETRANSFORMS pTransforms, pBITMAPHANDLE pBitmap, L_BOOL fFlags) { HCURSOR hCursor; L_INT nRet; L_BOOL fLoadInfo; fLoadInfo = EnableLoadInfo(TRUE); SetPageNumber(nPage); LoadFileOption.Passes = 1; hCursor = SetCursor(LoadCursor (NULL, IDC_WAIT)); nRet = L_WriteFileTransforms(pszFile, pTransforms, fFlags, &SaveFileOption); nRet = L_LoadBitmap(pszFile, pBitmap, sizeof(BITMAPHANDLE), 0, fIsBGRDevice ? ORDER_BGR : ORDER_RGB, &LoadFileOption, NULL); SetCursor(hCursor); if (nRet != SUCCESS) { L_FileError(hWndFrame, nRet, (LPTSTR) "Reload File", pszFile); } EnableLoadInfo(fLoadInfo); return; } L_VOID DisplayComments (HWND hWnd, LPTSTR pszFile, L_INT nPage, L_UINT uType) { HGLOBAL hBuffer; L_UCHAR L_HUGE *pBuffer; L_UCHAR L_FAR *pPointers[CMNT_LAST+1]; L_UINT uLengths[CMNT_LAST+1]; FILECOMMENTS Comments; L_UINT uSize; HCURSOR hCursor; L_INT nRet; L_BOOL fLoadInfo; COMMENTSPARM dlg; fLoadInfo = EnableLoadInfo(TRUE); SetPageNumber(nPage); hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)); nRet = L_GetFileCommentSize(pszFile, uType, &uSize, &LoadFileOption); if (nRet == SUCCESS) { hBuffer = GlobalAlloc(GPTR, uSize); if (hBuffer != NULL) { pBuffer = (L_UCHAR L_FAR *)GlobalLock(hBuffer); Comments.count = CMNT_LAST + 1; Comments.size = uLengths; Comments.pointer = pPointers; nRet = L_ReadFileCommentExt(pszFile, uType, &Comments, pBuffer, &uSize, &LoadFileOption); if (nRet == SUCCESS) { dlg.uType = uType; dlg.pComments = &Comments; DoDialogBoxParam(IDD_COMMENTS, hWnd, (DLGPROC)CommentsDlgProc, (LPARAM)(LPCOMMENTSPARM)&dlg); } GlobalFree(hBuffer); } } SetCursor (hCursor); if (nRet != SUCCESS) { L_FileError (hWndFrame, nRet, (LPTSTR) "Load Comments", pszFile); } EnableLoadInfo(fLoadInfo); return; }