/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_VOID FRAME_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT codeNotify); static L_VOID FRAME_OnInitMenuPopup (HWND hWnd, HMENU hMenu, L_INT nItem, L_BOOL bSystemMenu); static L_VOID FRAME_OnDestroy (HWND hWnd); static L_BOOL FRAME_OnCreate (HWND hWnd, CREATESTRUCT FAR * lpCreateStruct); static L_VOID FRAME_OnClose (HWND hWnd); static L_VOID FRAME_OnSize (HWND hWnd, L_UINT nState, L_INT nCX, L_INT nCY); static L_VOID FRAME_OnDrop (HWND hWnd, HDROP hDrop); L_VOID GetDir (LPTSTR Dir, LPTSTR pszTitle); // File Open Dialog static OPENDLGPARAMS foParm; WNDPROC hOldProgWndProc; #ifdef UNICODE HFONT ghDlgFont = NULL; #endif// UNICODE L_INT OpenBitmapChild (LPTSTR szFileName); L_BOOL OpenBitmap (HWND hWnd); L_VOID L_FileError (HWND hWnd, L_INT nCode, LPTSTR pTitle, LPTSTR pFilename); /*====(FrameWndProc)=================================================== 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 FrameWndProc (HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) Prototype : ImgDemo.h Parameters : hWnd Handle to a window. uMessage Windows uMessage structure. wParam Windows word parameter. lParam Windows long parameter. Return Value: This is specific for each uMessage. See Windows Programmer's Reference Volume 3. ==========================================================================*/ LRESULT CALLBACK FrameWndProc (HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch (uMessage) { HANDLE_MSG (hWnd, WM_CREATE, FRAME_OnCreate); HANDLE_MSG (hWnd, WM_INITMENUPOPUP, FRAME_OnInitMenuPopup); HANDLE_MSG (hWnd, WM_DESTROY, FRAME_OnDestroy); HANDLE_MSG (hWnd, WM_COMMAND, FRAME_OnCommand); HANDLE_MSG (hWnd, WM_CLOSE, FRAME_OnClose); HANDLE_MSG (hWnd, WM_SIZE, FRAME_OnSize); HANDLE_MSG (hWnd, WM_DROPFILES, FRAME_OnDrop); } return DefFrameProc (hWnd, hWndClient, uMessage, wParam, lParam); } /*====(LEADTOOLS_OnDropFiles)================================================== Description: Handles the WM_DROPFILES message Syntax : VOID LEADTOOLS_OnDropFiles(HWND hWnd, HDROP hdrop) Parameters : hWnd Handle to the window. hdrop Handle to the dropped files Return Value: None. ==========================================================================*/ static VOID FRAME_OnDrop(HWND hWnd, HDROP hdrop) { L_TCHAR szDropedFileName[256]; L_INT nFilesCount, nFiles,nRet; FILEINFO foFileInfo; BITMAPHANDLE Bitmap; memset(szDropedFileName, 0, 256); // Get draged files count nFilesCount = DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0); for (nFiles = 0; nFiles < nFilesCount; nFiles++) { DragQueryFile(hdrop, nFiles, szDropedFileName, 256); L_FileInfo(szDropedFileName, &foFileInfo, sizeof(FILEINFO), FILEINFO_TOTALPAGES, NULL); nRet = L_LoadBitmap (szDropedFileName, &Bitmap, sizeof(BITMAPHANDLE), 0, ORDER_BGRORGRAY, NULL, NULL); if(nRet != SUCCESS) { MessageBox(hWnd, TEXT("Invalid File(s)"), TEXT("Error"), MB_OK | MB_ICONEXCLAMATION); return; } L_ChangeBitmapViewPerspective(&Bitmap, &Bitmap, sizeof(BITMAPHANDLE),TOP_LEFT); StripWithExt(pszTitle1, szDropedFileName); CreateChildWindow(pszTitle1, &Bitmap, NULL, 0, FALSE); } } /*====(FRAME_OnCreate)======================================================== Description: Creates a client window in response to WM_CREATE from the frame window. Syntax : L_BOOL FRAME_OnCreate (HWND hWnd, CREATESTRUCT L_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 L_BOOL FRAME_OnCreate (HWND hWnd, CREATESTRUCT L_FAR * lpCreateStruct) { CLIENTCREATESTRUCT clientcreate; L_DlgInit (DLG_INIT_COLOR) ; memset(&clientcreate, 0, sizeof(CLIENTCREATESTRUCT)); memset(&foParm, 0, sizeof(OPENDLGPARAMS)); clientcreate.hWindowMenu = hMenuChildWindow; clientcreate.idFirstChild = IDM_FIRSTCHILD; uCombineMode = L_RGN_SET; 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, (PSTR) &clientcreate); lpfnStatusBar = MakeProcInstance((FARPROC)StatusBarProc, hInst); hStatusWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STATUSBAR), hWnd, (DLGPROC) lpfnStatusBar); hOldProgWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hStatusWnd, IDC_STATUS_PROG), GWL_WNDPROC, (LONG)ProgressBarProc); ShowWindow(GetDlgItem(hStatusWnd, IDC_STATUS_PROG), SW_HIDE); if(hWndClient) { UNLOCKSUPPORT(); } /* Enable Drag and Drop Files */ DragAcceptFiles(hWnd, TRUE); StatusProc.lpfnStatusCB = MakeProcInstance (StatusCallBack, hInst); L_SetStatusCallBack (StatusProc.lpfnStatusCB, NULL, &StatusProc.lpfnOldStatusCB, NULL); StatusProc.bProgress = FALSE; StatusProc.bStillWork = FALSE; StatusProc.nPercent = 0; StatusProc.bOneTick = FALSE; #ifdef UNICODE GenerateDefaultFont ( &ghDlgFont ) ; #endif// UNICODE return ((hWndClient) ? TRUE : FALSE); } /*====(LEADTOOLS_OnSize)================================================== Description: Handles the WM_SIZE uMessage. It positions the Status Bar and Client windows. Syntax : VOID LEADTOOLS_OnSize(HWND hWnd, UINT state, int nCX, int nCY) Parameters : hWnd Handle to the window. state Window state nCX Client area width nCY Client area height Return Value: None. ==========================================================================*/ static VOID FRAME_OnSize(HWND hWnd, L_UINT nState, L_INT nCX, L_INT nCY) { RECT rcRect; L_INT cyStatus; GetWindowRect(hStatusWnd, &rcRect); cyStatus = RECTHEIGHT(&rcRect); MoveWindow(hStatusWnd, 0, nCY - cyStatus, nCX, cyStatus, TRUE); DefFrameProc (hWnd, hWndClient, WM_SIZE, (WPARAM)nState, MAKELPARAM(nCX, nCY - cyStatus)); } /*====(FRAME_OnClose)================================================== Description: Handles the WM_CLOSE uMessage. It sends IDM_CLOSEALL to close all open child windows and to destroy the frame window. Syntax : L_VOID FRAME_OnClose (HWND hWnd) Parameters : hWnd Handle to the window. Return Value: None. ==========================================================================*/ static L_VOID FRAME_OnClose (HWND hWnd) { FORWARD_WM_COMMAND(hWnd, IDM_WINDOW_CLOSEALL, 0, 0, SendMessage); if (FadeBitmap.Flags.Allocated) L_FreeBitmap(&FadeBitmap); DestroyWindow(hWnd); } /*====(FRAME_OnInitMenuPopup)============================================ Description: Initializes the main popup menu when the user clicks on one of the menu items. Syntax : L_VOID FRAME_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 L_VOID FRAME_OnInitMenuPopup (HWND hWnd, HMENU hMenu, L_INT nItem, L_BOOL fSystemMenu) { L_BOOL bClipboardReady; pCHILDDATA pData = NULL; HWND hWndParent; L_INT nNum; L_INT nShift; L_BOOL bEnable; L_BOOL bGrayScale; L_BOOL bOneBitImage; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = (pCHILDDATA) GetWindowLong(hWndParent, GWL_USERDATA); bClipboardReady = L_ClipboardReady(); EnableMenuItem(hMenu, IDM_EDIT_PASTE, MF_BYCOMMAND | ((bClipboardReady) ? MF_ENABLED : MF_GRAYED)); if (L_BitmapHasRgn(&(pData->LeadBitmap))) EnableMenuItem(hMenu, IDM_EDIT_CANCELREGION, MF_ENABLED); else EnableMenuItem(hMenu, IDM_EDIT_CANCELREGION, MF_GRAYED); if (IsWindow(hWndParent)) { bOneBitImage = pData->LeadBitmap.BitsPerPixel == 1; CheckMenuItem(hMenu, IDM_EDIT_SETREGION_NONE, MF_BYCOMMAND | (pData->nRgnType == 0) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SETREGION_RECTANGLE, MF_BYCOMMAND | (pData->nRgnType == 1) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SETREGION_ROUNDEDRECTANGLE, MF_BYCOMMAND | (pData->nRgnType == 2) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SETREGION_ELLIPSE, MF_BYCOMMAND | (pData->nRgnType == 3) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SETREGION_FREEHAND, MF_BYCOMMAND | (pData->nRgnType == 4) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SETREGION_MAGICWAND, MF_BYCOMMAND | (pData->nRgnType == 5) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_MAGICWANDEX, MF_BYCOMMAND | (pData->nRgnType == 6) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_SINGLE, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_SET) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_MULTI, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_OR) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_INTERSECT, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_AND) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_INVERT, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_SETNOT) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_OLDANDNOTNEW, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_ANDNOTRGN) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_NEWANDNOTOLD, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_ANDNOTBITMAP) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_EDIT_OLDXORNEW, MF_BYCOMMAND | (pData->uCombineMode == L_RGN_XOR) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hMenu, IDM_WINDOW_MGCDLG, MF_BYCOMMAND | (pData->bMagWnd) ? MF_CHECKED : MF_UNCHECKED); bGrayScale = L_IsGrayScaleBitmap(&pData->LeadBitmap); EnableMenuItem(hMenu, IDM_IMAGE_RST, ((!bGrayScale) && (pData->LeadBitmap.BitsPerPixel <= 8)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_WR, (L_BitmapHasRgn(&pData->LeadBitmap)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_EDIT_COPYRGN, ((L_BitmapHasRgn(&pData->LeadBitmap) ? MF_ENABLED : MF_GRAYED))); EnableMenuItem(hMenu, IDM_IMAGE_FEATHER, FadeBitmap.Flags.Allocated ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_FADEMASK, L_BitmapHasRgn(&pData->LeadBitmap) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_SELECTIVECOLOR, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_DESAT, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_BALANCECOLORS, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_COLOR_SWAPCOLOR, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_COLOR_BALANCECOLOR, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_COLOR_COLOREDGRAY, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_COLOR_CONVERTTOGRAY, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_HSB, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_CHANNELMIXER, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_COLORTHRESHOLD, bGrayScale ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_SHIFTBITMAP, bGrayScale ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_BITMAPSELECTOR, bGrayScale ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_GRAYCOLORATION, bGrayScale ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_SHIFTBITMAP, !bGrayScale || bOneBitImage ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_BITMAPSELECTOR, !bGrayScale || bOneBitImage ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_GRAYCOLORATION, !bGrayScale || bOneBitImage ? MF_GRAYED : MF_ENABLED); EnableMenuItem(hMenu, IDM_IMAGE_GETFERETS, (L_BitmapHasRgn(&pData->LeadBitmap)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_GETRGNPERIMETER,(L_BitmapHasRgn(&pData->LeadBitmap)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_EDIT_RESIZEREGION, (L_BitmapHasRgn(&pData->LeadBitmap)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_WINDOW_MGCDLG, (pData->nRgnType == 5) ? MF_ENABLED : MF_GRAYED); EnableMenuItem(hMenu, IDM_IMAGE_REDEYEREMOVE, bGrayScale); bEnable = FALSE; nNum = pData->LeadBitmap.Width; nShift = (L_INT)(log10(nNum) / log10(2)); if (((nNum >> nShift) << nShift) == nNum) { nNum = pData->LeadBitmap.Height; nShift = (L_INT)(log10(nNum) / log10(2)); if (((nNum >> nShift) << nShift) == nNum) bEnable = TRUE; } if ((pData->LeadBitmap.Width == 1) || (pData->LeadBitmap.Height == 1)) bEnable = FALSE; EnableMenuItem(hMenu, IDM_IMAGE_FFT, bEnable ? MF_ENABLED : MF_GRAYED); } if (pData) //UNDOLIST// { EnableMenuItem (hMenu, IDM_EDIT_UNDO, (L_UndoList_UndoExists (hWndParent)) ? MF_ENABLED : MF_GRAYED); EnableMenuItem (hMenu, IDM_EDIT_REDO, (L_UndoList_RedoExists (hWndParent)) ? MF_ENABLED : MF_GRAYED); } } /*====(FRAME_OnCommand)================================================== Description: Translates the WM_COMMAND uMessage sent to the frame window procedure. Other command messages that are specific to the child window will be forwarded to that window. Syntax : L_VOID FRAME_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT codeNotify) Parameters : hWnd Handle to the window. nID Control or menu item identifier. hWndCtl Handle of control codeNotify Notification uMessage Return Value: None. ==========================================================================*/ static L_VOID FRAME_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT codeNotify) { HWND hChildWnd; switch(nID) { case IDM_FILE_OPEN: OpenBitmap(hWnd); return; case IDM_FILE_CLOSE: hChildWnd = (HWND) SendMessage(hWndClient, WM_MDIGETACTIVE, 0, 0); if(SendMessage(hChildWnd, WM_QUERYENDSESSION, 0, 0)) SendMessage(hWndClient, WM_MDIDESTROY, (WPARAM) hChildWnd, 0); return; case IDM_FILE_EXIT: SendMessage(hWnd, WM_CLOSE, 0, 0); return; case IDM_EDIT_PASTE: PasteBitmap(hWnd); return; case IDM_WINDOW_CASCADE: SendMessage(hWndClient, WM_MDICASCADE, 0, 0); return; case IDM_WINDOW_TILE_HORIZONTAL: SendMessage(hWndClient, WM_MDITILE, MDITILE_HORIZONTAL | MDITILE_SKIPDISABLED, 0); return; case IDM_WINDOW_TILE_VERTICAL: SendMessage(hWndClient, WM_MDITILE, MDITILE_VERTICAL | MDITILE_SKIPDISABLED, 0); return; case IDM_WINDOW_ARRANGE: SendMessage(hWndClient, WM_MDIICONARRANGE, 0, 0); return; case IDM_WINDOW_CLOSEALL: EnumChildWindows(hWndClient, CloseEnumProc, 0); break; case IDM_HELP_ABOUT: DoDialogBoxParam(IDD_ABOUTBOX, hWnd, (DLGPROC) AboutDlgProc, 0); return; default: hChildWnd = (HWND) SendMessage(hWndClient, WM_MDIGETACTIVE, 0, 0); if(IsWindow(hChildWnd)) SendMessage(hChildWnd, WM_COMMAND, MAKEWPARAM((UINT)(nID),(UINT)(codeNotify)), (LPARAM)(HWND)(hWndCtl)); break; } DefFrameProc(hWnd, hWndClient, WM_COMMAND, MAKEWPARAM((UINT)(nID),(UINT)(codeNotify)), (LPARAM)(HWND)(hWndCtl)); } /*====(FRAME_OnDestroy)================================================= Description: Performs cleanup for the program, and posts WM_QUIT to terminate the application. Syntax : L_VOID FRAME_OnDestroy (HWND hWnd) Parameters : hWnd Handle to a window. Return Value: None. ==========================================================================*/ static L_VOID FRAME_OnDestroy (HWND hWnd) { if(hStatusWnd) DestroyWindow(hStatusWnd); if(lpfnStatusBar) FreeProcInstance(lpfnStatusBar); #ifdef UNICODE if ( NULL != ghDlgFont ) { DeleteObject ( ghDlgFont ) ; ghDlgFont = NULL ; } #endif L_DlgFree(); PostQuitMessage(0); } /*====(CreateChildWindow)================================================== Description: Sets up data for MDI child window creation. Syntax : HWND CreateChildWindow (L_CHAR L_FAR * pszTitle, pBITMAPHANDLE pBitmap, pBITMAPHANDLE pThumb, L_INT nBitmapFormat, L_BOOL bIsFile) Prototype : demo.h Parameters : pszTitle Title for the window. pBitmap Image to set in the window. pThumb pointer to thumbniel image. nBitmapFormat Image format. bIsFile if image from file or not. Return Value: hWndChild Window handle of the child window. ==========================================================================*/ HWND CreateChildWindow (L_TCHAR L_FAR * pszTitle, pBITMAPHANDLE pBitmap, pBITMAPHANDLE pThumb, L_INT nBitmapFormat, L_BOOL bIsFile) { HWND hWndChild; CREATEDATA CreateData; MDICREATESTRUCT mdiCreateStruct; CreateData.pszTitle = pszTitle; CreateData.pBitmap = pBitmap; CreateData.pThumbnel = pThumb; CreateData.nBitmapFormat = nBitmapFormat; CreateData.bIsFile = bIsFile; mdiCreateStruct.szClass = szChildClass; mdiCreateStruct.szTitle = pszTitle; mdiCreateStruct.hOwner = hInst; mdiCreateStruct.x = CW_USEDEFAULT; mdiCreateStruct.y = CW_USEDEFAULT; mdiCreateStruct.cx = CW_USEDEFAULT; mdiCreateStruct.cy = CW_USEDEFAULT; mdiCreateStruct.style = MDIS_ALLCHILDSTYLES | WS_CLIPCHILDREN; mdiCreateStruct.lParam = (LPARAM) (LPCREATEDATA) & CreateData; hWndChild = (HWND) SendMessage(hWndClient, WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdiCreateStruct); return hWndChild; } 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_BOOL CALLBACK CloseEnumProc (HWND hWnd, LPARAM lParam) { if (GetWindow (hWnd, GW_OWNER)) return TRUE; SendMessage (GetParent (hWnd), WM_MDIRESTORE, (WPARAM) hWnd, 0); if (!SendMessage (hWnd, WM_QUERYENDSESSION, 0, 0)) return TRUE; SendMessage (GetParent (hWnd), WM_MDIDESTROY, (WPARAM) hWnd, 0); return TRUE; } /*====(PasteBitmap)============================================================== Description: Pastes the image from the clipboard. Syntax : L_INT PasteBitmap (HWND hWnd) Parameters : hWnd Handle to a window.. Return Value: None. ==========================================================================*/ L_INT PasteBitmap (HWND hWnd) { L_INT nRet; L_TCHAR szBuffer[256]; HCURSOR hOldCur; BITMAPHANDLE Bitmap; BITMAPHANDLE Thumb; static L_INT nPasteNo = 0; hOldCur = SetCursor(LoadCursor(NULL, IDC_WAIT)); L_InitBitmap(&Bitmap, sizeof(BITMAPHANDLE), 0, 0, 0); nRet = 0; nRet = L_CopyFromClipboard(hWnd, &Bitmap, sizeof(BITMAPHANDLE)); if(nRet == SUCCESS) { memset(szBuffer, 0, sizeof(szBuffer)); wsprintf(szBuffer, TEXT("Clipboard Data: %d"), ++nPasteNo); L_ChangeBitmapViewPerspective(NULL, &Bitmap, sizeof(BITMAPHANDLE),TOP_LEFT); L_InitBitmap(&Thumb, sizeof(BITMAPHANDLE),0, 0, 0); L_CopyBitmap(&Thumb,&Bitmap, sizeof(BITMAPHANDLE)); L_SizeBitmap(&Thumb, 250, 200, SIZE_NORMAL); CreateChildWindow(szBuffer, &Bitmap, &Thumb,0, FALSE); } SetCursor(hOldCur); return nRet; } /*====(fMessageBox)======================================================== Description: Creates a uMessage box. Syntax : L_INT fMessageBox (HWND hWnd, LPSTR pCaption, UINT wType, LPSTR pFormat,...) Prototype : demo.h Parameters : hWnd Handle of a window. pCaption Pointer to the title of the uMessage box. wType Type of the uMessage box. pFormat Format of the uMessage box. Return Value: X Return value of Window's MessageBox function. ==========================================================================*/ L_INT fMessageBox (HWND hWnd, LPSTR pCaption, UINT wType, LPSTR pFormat,...) { L_CHAR szText[256]; va_list ap; va_start (ap, pFormat); #ifdef _ALPHA_ vsprintf (szText,pFormat,ap); #else vsprintf (szText, pFormat, (LPSTR) ap); #endif va_end (ap); return (MessageBoxA (hWnd, szText, pCaption, wType)); } /*====(L_FileError)======================================================== Description: Sets up parameters for an error uMessage box. Syntax : L_VOID L_FileError (HWND hWnd, L_INT nCode, LPSTR pTitle, LPSTR pFilename) Prototype : demo.h Parameters : hWnd Handle of a window. nCode Error code to be displayed. pTitle Pointer to the title of the uMessage box. pFilename Pointer to the filename associated with the error. Return Value: None. ==========================================================================*/ L_VOID L_FileError (HWND hWnd, L_INT nCode, LPTSTR pTitle, LPTSTR pFilename) { L_TCHAR ErrorBuf[1024]; switch (nCode) { case ERROR_NO_MEMORY: wsprintf (ErrorBuf, TEXT("Not enough memory available!")); break; case ERROR_NO_BITMAP: wsprintf (ErrorBuf, TEXT("Invalid bitmap handle!")); break; case ERROR_MEMORY_TOO_LOW: wsprintf (ErrorBuf, TEXT("Not enough memory available!")); break; case ERROR_FILE_LSEEK: wsprintf (ErrorBuf, TEXT("Error seeking to position!")); break; case ERROR_FILE_WRITE: wsprintf (ErrorBuf, TEXT("Error writing file!")); break; case ERROR_FILE_GONE: wsprintf (ErrorBuf, TEXT("File not present - abort!")); break; case ERROR_FILE_READ: wsprintf (ErrorBuf, TEXT("Error reading file!")); break; case ERROR_INV_FILENAME: wsprintf (ErrorBuf, TEXT("Invalid filename specified!")); break; case ERROR_FILE_FORMAT: wsprintf (ErrorBuf, TEXT("Invalid file format!")); break; case ERROR_FILENOTFOUND: wsprintf (ErrorBuf, TEXT("File not found!")); break; case ERROR_INV_RANGE: wsprintf (ErrorBuf, TEXT("Invalid width/height!")); break; case ERROR_IMAGE_TYPE: wsprintf (ErrorBuf, TEXT("Image format recognized, but sub-type not supported!")); break; case ERROR_INV_PARAMETER: wsprintf (ErrorBuf, TEXT("Invalid parameter!")); break; case ERROR_FILE_OPEN: wsprintf (ErrorBuf, TEXT("Not able to open file!")); break; case ERROR_UNKNOWN_COMP: wsprintf (ErrorBuf, TEXT("Unknown compression format!")); break; case ERROR_FEATURE_NOT_SUPPORTED: wsprintf (ErrorBuf, TEXT("Feature not supported!")); break; case ERROR_NOT_256_COLOR: wsprintf (ErrorBuf, TEXT("VGA card only supports 256 colors (8 bit)!")); break; case ERROR_PRINTER: wsprintf (ErrorBuf, TEXT("Printer error!")); break; case ERROR_CRC_CHECK: wsprintf (ErrorBuf, TEXT("Data CRC check error!")); break; case ERROR_QFACTOR: wsprintf (ErrorBuf, TEXT("Invalid QFactor specified!")); break; case ERROR_TARGAINSTALL: wsprintf (ErrorBuf, TEXT("TARGA not installed!")); break; case ERROR_OUTPUTTYPE: wsprintf (ErrorBuf, TEXT("Invalid compression format!")); break; case ERROR_XORIGIN: wsprintf (ErrorBuf, TEXT("X origin specified invalid!")); break; case ERROR_YORIGIN: wsprintf (ErrorBuf, TEXT("Y origin specified invalid!")); break; case ERROR_VIDEOTYPE: wsprintf (ErrorBuf, TEXT("Invalid video mode!")); break; case ERROR_BITPERPIXEL: wsprintf (ErrorBuf, TEXT("Invalid bits/pixel!")); break; case ERROR_WINDOWSIZE: wsprintf (ErrorBuf, TEXT("Invalid window size!")); break; case ERROR_NORMAL_ABORT: wsprintf (ErrorBuf, TEXT("Escape key pressed!")); break; case ERROR_NO_STAMP: wsprintf (ErrorBuf, TEXT("Stamp not found!")); break; case ERROR_G3CODE_INVALID: wsprintf (ErrorBuf, TEXT("Invalid group 3 data!")); break; case ERROR_G3CODE_EOF: case ERROR_G3CODE_EOL: wsprintf (ErrorBuf, TEXT("Group3 code end of code!")); break; case ERROR_PREMATURE_EOF: wsprintf (ErrorBuf, TEXT("Premature EOF at scanline!")); break; case ERROR_PREMATURE_EOL: case ERROR_UNCOMP_EOF: case ERROR_ACT_INCOMP: case ERROR_BAD_DECODE_STATE: wsprintf (ErrorBuf, TEXT("Premature end-of-line code!")); break; case ERROR_VERSION_NUMBER: wsprintf (ErrorBuf, TEXT("Bad version number!")); break; case ERROR_TWAIN_NODSM: wsprintf (ErrorBuf, TEXT("Source manager not found!")); break; case ERROR_TWAIN_BUMMER: wsprintf (ErrorBuf, TEXT("Failure due to unknown causes!")); break; case ERROR_TWAIN_LOWMEMORY: wsprintf (ErrorBuf, TEXT("Not enough memory to perform operation!")); break; case ERROR_TWAIN_NODS: wsprintf (ErrorBuf, TEXT("No Data Source!")); break; case ERROR_TWAIN_MAXCONNECTIONS: wsprintf (ErrorBuf, TEXT("DS is connected to max possible apps!")); break; case ERROR_TWAIN_OPERATIONERROR: wsprintf (ErrorBuf, TEXT("DS or DSM reported error, app shouldn't!")); break; case ERROR_TWAIN_BADCAP: wsprintf (ErrorBuf, TEXT("Unknown capability!")); break; case ERROR_TWAIN_BADPROTOCOL: wsprintf (ErrorBuf, TEXT("Unrecognized MSG DG DAT combination!")); break; case ERROR_TWAIN_BADVALUE: wsprintf (ErrorBuf, TEXT("Data parameter out of range!")); break; case ERROR_TWAIN_SEQERROR: wsprintf (ErrorBuf, TEXT("DG DAT MSG out of expected sequence!")); break; case ERROR_TWAIN_BADDEST: wsprintf (ErrorBuf, TEXT("Unknown destination App/Src in DSM_Entry!")); break; case ERROR_TWAIN_CANCEL: wsprintf (ErrorBuf, TEXT("Operation was cancelled!")); break; case ERROR_NOT_ENOUGH_IMAGES: wsprintf (ErrorBuf, TEXT("Not enough images to complete the process!")); break; case ERROR_IMAGE_EMPTY: wsprintf (ErrorBuf, TEXT("Image is empty!")); break; case ERROR_NO_CHANGE: wsprintf (ErrorBuf, TEXT("The image hasn't changed!")); break; case ERROR_LZW_LOCKED: wsprintf (ErrorBuf, TEXT("LZW capability is required to load/save this file!")); break; case ERROR_DOCUMENT_NOT_ENABLED: wsprintf (ErrorBuf, TEXT("Express capability is required to use this function!")); break; case ERROR_MEDICAL_NOT_ENABLED: wsprintf (ErrorBuf, TEXT("Medical Express capability is required to use this function!")); break; case ERROR_JBIG_NOT_ENABLED: wsprintf (ErrorBuf, TEXT("JBIG capability is required to use this function!")); break; case ERROR_FPX_FILE_IN_USE: wsprintf (ErrorBuf, TEXT("Error accessing file. The file is probably already open!")); break; #if defined(WIN32) && !defined(_ALPHA_) case ERROR_ISIS_NOCURSCANNER: wsprintf (ErrorBuf, TEXT("No ISIS Scanner selected!")); break; case ERROR_ISIS_CANCEL: wsprintf (ErrorBuf, TEXT("ISIS Operation canceled!")); break; case ERROR_ISIS_SCANDRIVER_NOT_LOADED: wsprintf (ErrorBuf, TEXT("ISIS Driver failed to load")); break; case ERROR_ISIS_BAD_TAG_OR_VALUE: case ERROR_ISIS_NOT_READY: case ERROR_ISIS_JAM: case ERROR_ISIS_SCANNER_ERROR: case ERROR_ISIS_BUSY: case ERROR_ISIS_FILE_ERROR: case ERROR_ISIS_NETWORK_ERROR: wsprintf (ErrorBuf, TEXT("ISIS Scanner Error acquiring image!")); break; case ERROR_ISIS_NO_PAGE: wsprintf (ErrorBuf, TEXT("No Page in ISIS Scanner!")); break; #endif case ERROR_USER_ABORT: case ERROR_DLG_FAILED: return; break; default: if(nCode >= ERROR_FPX_INVALID_FORMAT_ERROR && nCode <= ERROR_FPX_INVALID_TILE) wsprintf (ErrorBuf, TEXT("Internal FlashPix error!")); else wsprintf (ErrorBuf, TEXT("Internal or Unrecognized Error!")); break; } #ifdef UNICODE { L_CHAR szTempTitle [ L_MAXPATH ] = "" ; L_CHAR szTempFilename [ L_MAXPATH ] = "" ; L_CHAR szTempError [ L_MAXPATH ] = "" ; WideCharToMultiByte(CP_ACP, 0, pTitle, -1, szTempTitle, L_MAXPATH,NULL,NULL); WideCharToMultiByte(CP_ACP, 0, pFilename, -1, szTempFilename, L_MAXPATH,NULL,NULL); WideCharToMultiByte(CP_ACP, 0, ErrorBuf, -1, szTempError, L_MAXPATH,NULL,NULL); fMessageBox (hWnd, szTempTitle, MB_ICONEXCLAMATION | MB_OK, "%s\nLEADTOOLS DLL Error (%d)\n%s", szTempFilename, nCode, (LPSTR) szTempError); } #else fMessageBox (hWnd, pTitle, MB_ICONEXCLAMATION | MB_OK, "%s\nLEADTOOLS DLL Error (%d)\n%s", pFilename, nCode, (LPSTR) ErrorBuf); #endif return; } L_INT OpenBitmapChild ( LPTSTR szFileName) { BITMAPHANDLE Bitmap; L_INT nRet; nRet = L_LoadBitmap (szFileName, &Bitmap, sizeof(BITMAPHANDLE), 0, ORDER_BGRORGRAY, NULL, NULL); if(nRet != SUCCESS) return nRet; L_ChangeBitmapViewPerspective(&Bitmap, &Bitmap, sizeof(BITMAPHANDLE),TOP_LEFT); CreateChildWindow(szFileName, &Bitmap, NULL, 0, FALSE); return nRet; } L_VOID StripWithExt(LPTSTR StripName, LPTSTR pszTitle) { L_INT nEndPos = 0; L_INT nSlashPos; L_INT nCount; L_TCHAR cX = '\0'; memset(StripName, 0, lstrlen(StripName)*sizeof(L_TCHAR)); while(pszTitle[nEndPos] != cX) { nEndPos++; } for(nSlashPos = nEndPos; nSlashPos >= 0; nSlashPos--) { if(pszTitle[nSlashPos ] == '\\') break; } for(nCount = 0, nSlashPos++; nSlashPos < nEndPos; nSlashPos++, nCount++) { StripName[nCount] = pszTitle[nSlashPos]; } } /*--------------------------------------------------------------------------+ | Function :CleanOpenDlgParam | Desc :Clean File open Param structuer | Return : | Notes : +--------------------------------------------------------------------------*/ L_VOID CleanOpenDlgParam(LPOPENDLGPARAMS pFOParam) { int i=0; if(pFOParam!=NULL && pFOParam->pFileData!= NULL ) { for(i=0; i < pFOParam->nNumOfFiles; ++i ) { if(pFOParam->pFileData[i].pBitmap != NULL) { L_FreeBitmap(pFOParam->pFileData[i].pBitmap); GlobalFreePtr(pFOParam->pFileData[i].pBitmap); pFOParam->pFileData[i].pBitmap = NULL; } if(pFOParam->pFileData[i].pThumbnail != NULL) { L_FreeBitmap(pFOParam->pFileData[i].pThumbnail); GlobalFreePtr(pFOParam->pFileData[i].pThumbnail); pFOParam->pFileData[i].pThumbnail = NULL; } if(pFOParam->pFileData[i].pFileInfo != NULL) { GlobalFreePtr(pFOParam->pFileData[i].pFileInfo); pFOParam->pFileData[i].pFileInfo = NULL; } } GlobalFreePtr(pFOParam->pFileData); pFOParam->pFileData =NULL; pFOParam->nNumOfFiles = 0; } } /*====(OpenBitmap)======================================================== Description: Loads the image from file and creates a child window for the image. Syntax : L_BOOL OpenBitmap( HWND hWnd, pBITMAPHANDLE pBitmap, pBITMAPHANDLE pThumb) Parameters : hWnd Handle to a window. pBitmap pointer to BitmapHandle. pThumb pointer to ThumbnielHandle. Return Value: None. ==========================================================================*/ L_BOOL OpenBitmap(HWND hWnd) { OPENFILENAME OpenFileName; L_INT nRet; L_INT nI; L_INT nFilterIndex; L_UINT nMin, nMax; const TCHAR m_szOpenFilter [ ] = { TEXT("Popular Media Types\0") TEXT("*.CMP;*.jpg;*.jpeg;*.cmw;*.j2k;*.tif;*.tiff;*.gif;*.png;*.ani;*.bmp;*.cur;*.ico;*.icon;*.wmf;*.dic\0") // Display String Filter // LEAD Constant formats order TEXT( "LEAD (*.cmp)\0" ) TEXT( "*.cmp\0" ) TEXT( "JPEG (*.jpg;*.jpeg;*.jtf)\0" ) TEXT( "*.jpg;*.jpeg;*.jtf\0" ) TEXT( "CMW (*.cmw)\0" ) TEXT( "*.cmw\0" ) TEXT( "JPEG 2000 (*.j2k;*.jp2)\0" ) TEXT( "*.j2k;*.jp2\0" ) TEXT( "TIFF (*.tif;*.tiff)\0" ) TEXT( "*.tif;*.tiff\0" ) TEXT( "GIF (*.gif)\0" ) TEXT( "*.gif\0" ) TEXT( "PNG (*.png)\0" ) TEXT( "*.png\0" ) //Alphabetical Order // +++ "A" +++ TEXT( "Acrobat (*.pdf)\0" ) TEXT( "*.pdf\0" ) TEXT( "Adobe Photoshop (*.psd)\0" ) TEXT( "*.psd\0" ) TEXT( "Advanced Function Presentation(*.afp)\0" ) TEXT( "*.afp\0" ) TEXT( "Animated Cursor (*.ani)\0" ) TEXT( "*.ani\0" ) TEXT( "AutoDesk DWF (*.dwf)\0" ) TEXT( "*.dwf\0" ) TEXT( "AutoDesk DWG (*.dwg)\0" ) TEXT( "*.dwg\0" ) TEXT( "AutoDesk DXF (*.dxf)\0" ) TEXT( "*.dxf\0" ) // +++ "C" +++ TEXT( "CALS (*.cal)\0" ) TEXT( "*.cal\0" ) TEXT( "Canon RAW Format (*.crw)\0" ) TEXT( "*.crw\0" ) TEXT( "CGM (*.cgm)\0" ) TEXT( "*.cgm\0" ) TEXT( "Clipboard (*.clp)\0" ) TEXT( "*.clp\0" ) TEXT( "Compressed Windows Metafile (*.wmz)\0" ) TEXT( "*.wmz\0" ) TEXT( "Corel Presentation Exchange (*.cmx)\0" ) TEXT( "*.cmx\0" ) TEXT( "CUT (*.cut)\0" ) TEXT( "*.cut\0" ) // +++ "D" +++ TEXT( "DGN (*.dgn)\0" ) TEXT( "*.dgn\0" ) #ifndef UNICODE TEXT( "DICOM (*.dic)\0" ) TEXT( "*.dic\0" ) #endif TEXT( "DJVU (*.djv)\0" ) TEXT( "*.djv\0" ) TEXT( "DRW (*.drw)\0" ) TEXT( "*.drw\0" ) // +++ "E" +++ TEXT( "Enhanced Compressed Wavelet (*.ecw)\0" ) TEXT( "*.ecw\0" ) TEXT( "Enhanced Metafile (*.emf)\0" ) TEXT( "*.emf\0" ) TEXT( "Environmental Systems Research Institute (*.shp)\0" ) TEXT( "*.shp\0" ) TEXT( "EXIF (*.exf;*.tif;*.jpg)\0" ) TEXT( "*.exf;*.tif;*.jpg\0" ) // +++ "F" +++ TEXT( "FAX (*.fax)\0" ) TEXT( "*.fax\0" ) TEXT( "FLIC (*.flc;*.fli)\0" ) TEXT( "*.flc;*.fli\0" ) TEXT( "FlashPix (*.fpx)\0" ) TEXT( "*.fpx\0" ) TEXT( "Flexible Image Transport System (*.fit)\0" ) TEXT( "*.fit\0" ) // +++ "G" +++ TEXT( "GEM IMG (*.img)\0" ) TEXT( "*.img\0" ) TEXT( "Gerber Vector (*.gbr)\0" ) TEXT( "*.gbr\0" ) // +++ "H" +++ TEXT( "HPGL (*.plt;*.hgl)\0" ) TEXT( "*.plt;*.hgl\0" ) // +++ "I" +++ TEXT( "IFF (*.iff)\0" ) TEXT( "*.iff\0" ) TEXT( "Internet Fax (*.tifx;*.tiff;*.tfx)\0" ) TEXT( "*.tifx;*.tiff;*.tfx\0" ) TEXT( "IOCA (*.ica)\0" ) TEXT( "*.ica\0" ) TEXT( "ITG (*.itg;*.cit)\0" ) TEXT( "*.itg;*.cit\0" ) // +++ "J" +++ TEXT( "JBIG (*.jbg;*.jbig)\0" ) TEXT( "*.jbg;*.jbig\0" ) // +++ "K" +++ TEXT( "Kodak Cineon (*.cin)\0" ) TEXT( "*.cin\0" ) TEXT( "Kodak Digital Camera KDC (*.kdc)\0" ) TEXT( "*.kdc\0" ) TEXT( "Kodak Photo CD (*.pcd)\0" ) TEXT( "*.pcd\0" ) TEXT( "Kodak Professional Digital Camera System (*.tif;*.tiff)\0" ) TEXT( "*.tif;*.tiff\0" ) // +++ "L" +++ TEXT( "LaserView (*.lv)\0" ) TEXT( "*.lv\0" ) // +++ "M" +++ TEXT( "MacPaint (*.mac)\0" ) TEXT( "*.mac\0" ) TEXT( "Mac PICT (*.pct;*.pict)\0" ) TEXT( "*.pct;*.pict\0" ) TEXT( "MODCA (*.ica)\0" ) TEXT( "*.ica\0" ) TEXT( "Mr SID (*.sid)\0" ) TEXT( "*.sid\0" ) TEXT( "MS Fax (*.awd)\0" ) TEXT( "*.awd\0" ) TEXT( "MS Paint (*.msp)\0" ) TEXT( "*.msp\0" ) TEXT( "MO:DCA PTOCA(*.ptk)\0" ) TEXT( "*.ptk\0" ) // +++ "O" +++ TEXT( "OS/2 Bitmap (*.bmp)\0" ) TEXT( "*.bmp\0" ) // +++ "P" +++ TEXT( "PaintBrush PCX (*.pcx)\0" ) TEXT( "*.pcx\0" ) TEXT( "Paint Shop Pro (*.psp)\0" ) TEXT( "*.psp\0" ) TEXT( "PBM (*.pbm)\0" ) TEXT( "*.pbm\0" ) TEXT( "PGM (*.pgm)\0" ) TEXT( "*.pgm\0" ) TEXT( "Postscript (*.eps)\0" ) TEXT( "*.eps\0" ) TEXT( "PPM (*.ppm)\0" ) TEXT( "*.ppm\0" ) TEXT( "Printer Command Language(*.prn;*.prt;*.pcl)\0" ) TEXT( "*.prn;*.prt;*.pcl\0" ) TEXT( "Profession Digital Camera (*.dcr)\0" ) TEXT( "*.dcr\0" ) TEXT( "Profession Digital Camera (*.tif;*.tiff)\0" ) TEXT( "*.tif;*.tiff\0" ) // +++ "R" +++ TEXT( "Rich Text Format (*.rtf)\0" ) TEXT( "*.rtf\0" ) // +++ "S" +++ TEXT( "Scalable Vector Graphics(*.svg)\0" ) TEXT( "*.svg\0" ) TEXT( "Scitex Continuous Tone(*.sct;*.ct)\0" ) TEXT( "*.sct; *.ct\0" ) TEXT( "SGI (*.sgi)\0" ) TEXT( "*.sgi\0" ) TEXT( "Structured Fax File (*.sff)\0" ) TEXT( "*.sff\0" ) TEXT( "Sun Raster (*.ras)\0" ) TEXT( "*.ras\0" ) // +++ "T" +++ TEXT( "Targa TGA (*.tga)\0" ) TEXT( "*.tga\0" ) // +++ "W" +++ TEXT( "Windows Bitmap (*.bmp)\0" ) TEXT( "*.bmp\0" ) TEXT( "Windows Cursor (*.cur)\0" ) TEXT( "*.cur\0" ) TEXT( "Windows ICON (*.ico;*.icon)\0" ) TEXT( "*.ico;*.icon\0" ) TEXT( "WinFax (*.wfx)\0" ) TEXT( "*.wfx\0" ) TEXT( "Windows Metafile (*.wmf)\0" ) TEXT( "*.wmf\0" ) TEXT( "WordPerfect Graphic (*.wpg)\0" ) TEXT( "*.wpg\0" ) TEXT( "Wireless Bitmap(*.wbmp)\0" ) TEXT( "*.wbmp\0" ) // +++ "X" +++ TEXT( "Xionics SMP (*.smp)\0" ) TEXT( "*.smp\0" ) TEXT( "XWindows Bitmap (*.xwd)\0" ) TEXT( "*.xwd\0" ) TEXT( "X Bitmap (*.xbm)\0" ) TEXT( "*.xbm\0" ) TEXT( "X Pixmap (*.xpm)\0" ) TEXT( "*.xpm\0" ) TEXT( "All Files (*.*)\0" ) TEXT( "*.*\0" ) TEXT( "\0" ) } ; memset(strSection, 0, sizeof(strSection)); GetProfileString(strSection, strStringItem, TEXT(""), szDirectory, sizeof(szDirectory)); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); memset(&foParm, 0, sizeof(OPENDLGPARAMS)); OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.lpstrFilter = m_szOpenFilter;//TEXT("Popular Media Types\0 *.CMP;*.jpg;*.jpeg;*.cmw;*.j2k;*.tif;*.tiff;*.gif;*.png;*.ani;*.bmp;*.cur;*.ico;*.icon;*.wmf;*.dic\0All Files(*.*)\0*.*"); OpenFileName.nFilterIndex = 0;//nFilterIndex; OpenFileName.nMaxCustFilter = 12; OpenFileName.hwndOwner = hWnd; OpenFileName.lpstrTitle = TEXT("Open a File"); OpenFileName.Flags = OFN_ALLOWMULTISELECT; OpenFileName.lpstrInitialDir = szDirectory; 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 | DLG_OPEN_LOADBITMAP; nRet = L_DlgOpen( hWnd, &OpenFileName, &foParm); if(nRet == SUCCESS_DLG_OK ) { nFilterIndex = OpenFileName.nFilterIndex; _itot(nFilterIndex, StrExt, 10); memset(szDirectory, 0, sizeof(szDirectory)); GetDir(szDirectory, foParm.pFileData[0].szFileName); WriteProfileString(strSection, strStringItem, szDirectory); for ( nI = 0 ; nI < foParm.nNumOfFiles ; nI++ ) { if ( NULL != foParm.pFileData[nI].pFileInfo ) { L_ChangeBitmapViewPerspective(foParm.pFileData[nI].pBitmap, foParm.pFileData[nI].pBitmap, sizeof(BITMAPHANDLE),TOP_LEFT); if(L_IsGrayScaleBitmap(foParm.pFileData[nI].pBitmap) && (foParm.pFileData[nI].pBitmap->BitsPerPixel == 12 || foParm.pFileData[nI].pBitmap->BitsPerPixel == 16)) { if (!foParm.pFileData[nI].pBitmap->Flags.UseLUT) { L_GetMinMaxBits(foParm.pFileData[nI].pBitmap, &nMin, &nMax); foParm.pFileData[nI].pBitmap->LowBit = nMin; foParm.pFileData[nI].pBitmap->HighBit = nMax; } else { foParm.pFileData[nI].pBitmap->LowBit = 0; foParm.pFileData[nI].pBitmap->HighBit = (foParm.pFileData[nI].pBitmap->BitsPerPixel) - 1; } } memset(pszTitle1, 0, sizeof(pszTitle1)); StripWithExt(pszTitle1, foParm.pFileData[nI].szFileName); CreateChildWindow(pszTitle1, foParm.pFileData[nI].pBitmap, NULL, 0, FALSE); foParm.pFileData[nI].pBitmap = NULL; } } CleanOpenDlgParam(&foParm); } else if(nRet == ERROR_PDF_BAD_INITIALIZATION_FILES) { if( IDYES == MessageBox(hWnd, TEXT("LEADTOOLS PDF plugin is not found, do you want to download the plugin now?"), TEXT("Open file"),MB_ICONEXCLAMATION | MB_YESNO)) ShellExecute(hWnd, TEXT("open"), TEXT("http://www.leadtools.com/ReleaseDownloads/v14/LEADTOOLSPDFRuntime.exe"), NULL, NULL, SW_SHOWNORMAL); } else if (nRet != SUCCESS_DLG_CANCEL) L_FileError(hWndFrame, nRet,(LPTSTR)TEXT("Error Cannot Open File"), TEXT("")); return(nRet); } L_VOID GetDir(LPTSTR Dir, LPTSTR pszTitle) { L_INT nEndPos = 0; L_INT nSlashPos; L_INT nCount; L_TCHAR cX = '\0'; while(pszTitle[nEndPos] != cX) nEndPos++; for(nSlashPos = nEndPos; nSlashPos >= 0; nSlashPos--) { if(pszTitle[nSlashPos] == '\\') break; } for(nCount=0; nCount <= nSlashPos; nCount++) { Dir[nCount] = pszTitle[nCount]; } }