/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL PictzDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID PictzDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT uCodeNotify); static L_VOID PictzDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos); static L_VOID PictzDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID PictzDlg_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID ChangePos (HWND hWnd, L_INT nID, L_BOOL uFlag, L_INT nDistance); static L_VOID GetPicturizeImages (HWND hWnd); static L_BOOL CALLBACK PictzEnum (HWND hWnd, LPARAM lParam); static L_INT L_FAR L_EXPORT BrowseBitmaps(pBITMAPHANDLE pBitmap, L_TCHAR L_FAR *pszFile, pFILEINFO pInfo, L_INT nStatusCode, L_INT nPercent, L_VOID L_FAR *pUserData); static L_VOID Positioning (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_INT nBitmapNum; L_BOOL CALLBACK PictzWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { HANDLE_MSG(hWnd, WM_INITDIALOG, PictzDlg_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, PictzDlg_OnCommand); HANDLE_MSG(hWnd, WM_HSCROLL, PictzDlg_OnHScroll); HANDLE_MSG(hWnd, WM_TIMER, PictzDlg_OnTimer); HANDLE_MSG(hWnd, WM_PAINT, PictzDlg_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_VOID GetPicturizeImages(HWND hWnd) { EnumChildWindows (hWndClient, PictzEnum, (LONG)hWnd); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_PIC_ALL_LST), 0); } static L_BOOL CALLBACK PictzEnum(HWND hWnd, LPARAM lParam) { pCHILDDATA pData; HWND hDlg; L_TCHAR StripName[255]; L_INT nCount; hDlg = (HWND)lParam; pData = (pCHILDDATA) GetWindowLong(hWnd, GWL_USERDATA); if (!pData) return FALSE; memset(StripName, 0, sizeof(StripName)); Strip(StripName, pData->pszTitle); nCount = ListBox_GetCount(GetDlgItem(hDlg, IDC_PIC_ALL_LST)); ListBox_AddString(GetDlgItem(hDlg, IDC_PIC_ALL_LST), StripName); ListBox_SetItemData(GetDlgItem(hDlg, IDC_PIC_ALL_LST), nCount, (LONG)pData); return TRUE; } static L_BOOL PictzDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPPICDLGDATA pPicDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nSlider; L_INT nRangeMax[] = {0, 0, 1000}; L_INT nRangeMin[] = {1, 1, 0 }; L_INT nPosInit [] = {10, 10, 0 }; RECT rcRgn; RECT rcButton; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); pPicDlgData = (LPPICDLGDATA)lParam; SetWindowLong(hWnd, GWL_USERDATA, (long)pPicDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pPicDlgData->LeadBitmap); MoveDialogToMiddle(hWnd); GetPicturizeImages(hWnd); GetWindowRect(GetDlgItem(hWnd, IDC_PIC_INV1_TXT), &rcRgn); GetWindowRect(GetDlgItem(hWnd, IDC_PIC_INV2_TXT), &rcButton); ComboBox_AddString(GetDlgItem(hWnd, IDC_PIC_STL_COM), TEXT("Use the same bitmap")); ComboBox_AddString(GetDlgItem(hWnd, IDC_PIC_STL_COM), TEXT("Use multiple bitmaps")); ComboBox_AddString(GetDlgItem(hWnd, IDC_PIC_STL_COM), TEXT("Specify Directory as a source")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_PIC_STL_COM), 0); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_PIC_INC_LST), 0); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_PIC_ALL_LST), 0); EnableWindow(GetDlgItem(hWnd, IDC_PIC_DEL_BTN), FALSE); pPicDlgData->nDistance = rcButton.top - rcRgn.bottom; GetWindowRect(GetDlgItem(hWnd, IDC_PIC_ADD_BTN), &rcButton); pPicDlgData->nDistance2 = rcButton.top - rcRgn.bottom; StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_PIC_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); L_GetBitmapRgnBounds(&pPicDlgData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = rcRgn.right - rcRgn.left; nRangeMax[1] = rcRgn.bottom - rcRgn.top; pPicDlgData->nSldBaseID = IDC_PIC_WDT_SLD; pPicDlgData->nEdtBaseID = IDC_PIC_WDT_EDT; pPicDlgData->nSlideNum = 3; pPicDlgData->nHeight = 10; pPicDlgData->nWidth = 10; pPicDlgData->nLightness = 0; pPicDlgData->nComboIndex = 0; pPicDlgData->nPreIndex = 1; pPicDlgData->bAllList = TRUE; Positioning(hWnd); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); for (nSlider = 0; nSlider < pPicDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pPicDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pPicDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pPicDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); } L_CreateBitmapList(&pPicDlgData->hListDirectory); L_CreateBitmapList(&pPicDlgData->hListMultiple); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE L_ApplyFilter(hWnd); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return TRUE; } static L_VOID PictzDlg_OnPaint (HWND hWnd) { HDC hDC; PAINTSTRUCT ps; LPPICDLGDATA pPicDlgData; pCHILDDATA pListData, pData; HWND hWndCtl; HPALETTE hPalette, hSavedPalette; RECT rcRect; HWND hWndParent; RECT rcImage; pPicDlgData = (LPPICDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); hWndCtl = GetDlgItem(hWnd, pPicDlgData->bAllList || !ListBox_GetCount(GetDlgItem(hWnd, IDC_PIC_INC_LST)) ? IDC_PIC_ALL_LST : IDC_PIC_INC_LST); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pListData = (pCHILDDATA)ListBox_GetItemData(hWndCtl, ListBox_GetCurSel(hWndCtl)); pData = LOCKCHILDDATA(hWndParent); hDC = BeginPaint(GetDlgItem(hWnd, IDC_PIC_SEL_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, (pData == pListData) ? &pPicDlgData->LeadBitmap : &pListData->LeadBitmap); hSavedPalette = SelectPalette(hDC, hPalette, FALSE); RealizePalette(hDC); GetClientRect(GetDlgItem(hWnd, IDC_PIC_SEL_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, &pListData->LeadBitmap, &rcRect); L_PaintDC(hDC, (pData == pListData) ? &pPicDlgData->LeadBitmap : &pListData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); SelectPalette(hDC, hSavedPalette, FALSE); DeletePalette(hPalette); EndPaint(GetDlgItem(hWnd, IDC_PIC_SEL_TXT), &ps); UNLOCKCHILDDATA(hWndParent); } static L_VOID PictzDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } L_VOID ChangePos(HWND hWnd, L_INT nID, L_BOOL uFlag, L_INT nDistance) { HWND hWndCtl; RECT rcRect; POINT TmpPoint; hWndCtl = GetDlgItem(hWnd, nID); GetWindowRect(hWndCtl, &rcRect); TmpPoint.x = rcRect.left; TmpPoint.y = rcRect.top; ScreenToClient(hWnd, &TmpPoint); MoveWindow(hWndCtl, TmpPoint.x, uFlag ? TmpPoint.y + nDistance : TmpPoint.y - nDistance, RECTWIDTH(&rcRect), RECTHEIGHT(&rcRect), TRUE); } static L_VOID Positioning(HWND hWnd) { L_INT nCounter; LPPICDLGDATA pPicDlgData = (LPPICDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); RECT rcRect; L_INT nResult; L_INT nDistance[3] = {0, pPicDlgData->nDistance, pPicDlgData->nDistance2}; for (nCounter = 0; nCounter < 6; nCounter++) ShowWindow(GetDlgItem(hWnd, IDC_PIC_ALL_LST + nCounter), (pPicDlgData->nComboIndex == 1)); for (nCounter = 0; nCounter < 3; nCounter++) ShowWindow(GetDlgItem(hWnd, IDC_PIC_DIR_EDT + nCounter), (pPicDlgData->nComboIndex == 2)); nResult = nDistance[pPicDlgData->nComboIndex] - nDistance[pPicDlgData->nPreIndex]; ChangePos(hWnd, IDOK, TRUE, nResult); ChangePos(hWnd, IDCANCEL, TRUE, nResult); ChangePos(hWnd, IDC_PIC_PROG, TRUE, nResult); GetWindowRect(hWnd, &rcRect); MoveWindow(hWnd, rcRect.left, rcRect.top , RECTWIDTH(&rcRect), RECTHEIGHT(&rcRect) + nResult, TRUE); } static L_VOID PictzDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPPICDLGDATA pPicDlgData; L_UINT uCurrentColor; L_INT nValue; pCHILDDATA pData, pListData; HWND hWndParent; L_INT nRangeMax[] = {0, 0, 1000}; L_INT nRangeMin[] = {1, 1, 0 }; L_INT nIndex; RECT rcRgn; L_TCHAR szStripName[255]; HWND hWndAll, hWndInc; pPicDlgData = (LPPICDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); hWndAll = GetDlgItem(hWnd, IDC_PIC_ALL_LST); hWndInc = GetDlgItem(hWnd, IDC_PIC_INC_LST); L_GetBitmapRgnBounds(&pPicDlgData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = rcRgn.right - rcRgn.left; nRangeMax[1] = rcRgn.bottom - rcRgn.top; switch (nID) { case IDCANCEL: pPicDlgData->uListCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_PIC_INC_LST)); StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; EndDialog(hWnd, FALSE); break; case IDOK: pPicDlgData->uListCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_PIC_INC_LST)); ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; case IDC_PIC_STL_COM: if (uCodeNotify == CBN_SELCHANGE) { if (ComboBox_GetCurSel(hWndCtl) != pPicDlgData->nComboIndex) { pPicDlgData->nPreIndex = pPicDlgData->nComboIndex; pPicDlgData->nComboIndex = ComboBox_GetCurSel(hWndCtl); Positioning(hWnd); InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } } break; case IDC_PIC_ADD_BTN: nIndex = ListBox_GetCurSel(hWndAll); pListData = (pCHILDDATA)ListBox_GetItemData(hWndAll, nIndex); L_InsertBitmapListItem(pPicDlgData->hListMultiple, ListBox_GetCount(hWndInc), (pData == pListData) ? &pPicDlgData->LeadBitmap : &pListData->LeadBitmap); memset(szStripName, 0, sizeof(szStripName)); Strip(szStripName, pListData->pszTitle); ListBox_AddString(hWndInc, szStripName); ListBox_SetItemData(hWndInc, ListBox_GetCount(hWndInc) - 1, pListData); ListBox_DeleteString(hWndAll, nIndex); ListBox_SetCurSel(hWndAll, max(0, nIndex - 1)); ListBox_SetCurSel(hWndInc, ListBox_GetCount(hWndInc) - 1); if (ListBox_GetCount(hWndAll) == 0) { EnableWindow(hWndCtl, FALSE); pPicDlgData->bAllList = FALSE; } InvalidateRect(hWnd, NULL, FALSE); EnableWindow(GetDlgItem(hWnd, IDC_PIC_DEL_BTN), TRUE); L_ApplyFilter (hWnd); break; case IDC_PIC_DEL_BTN: nIndex = ListBox_GetCurSel(hWndInc); pListData = (pCHILDDATA)ListBox_GetItemData(hWndInc, nIndex); L_RemoveBitmapListItem(pPicDlgData->hListMultiple, nIndex, NULL); memset(szStripName, 0, sizeof(szStripName)); Strip(szStripName, pListData->pszTitle); ListBox_DeleteString(hWndInc, nIndex); ListBox_AddString(hWndAll, szStripName); ListBox_SetItemData(hWndAll, ListBox_GetCount(hWndAll) - 1, pListData); ListBox_SetCurSel(hWndInc, max(0, nIndex - 1)); ListBox_SetCurSel(hWndAll, ListBox_GetCount(hWndAll) - 1); if (ListBox_GetCount(hWndInc) == 0) { EnableWindow(hWndCtl, FALSE); pPicDlgData->bAllList = TRUE; } InvalidateRect(hWnd, NULL, FALSE); EnableWindow(GetDlgItem(hWnd, IDC_PIC_ADD_BTN), TRUE); L_ApplyFilter (hWnd); break; case IDC_PIC_ALL_LST: case IDC_PIC_INC_LST: if (!ListBox_GetCount(hWndCtl)) break; pPicDlgData->bAllList = IDC_PIC_ALL_LST - nID + 1; InvalidateRect(hWnd, NULL, FALSE); break; case IDC_PIC_DIR_BTN: { GETDIRECTORYDLGPARAMS DirectoryDlgParams ; L_INT nRet; THUMBOPTIONS ThumbOption; L_TCHAR szTitle [ 50 ] = TEXT("Browse For Folder:") ; nBitmapNum = 0; ZeroMemory (&DirectoryDlgParams, sizeof(GETDIRECTORYDLGPARAMS)); DirectoryDlgParams.uStructSize = sizeof (GETDIRECTORYDLGPARAMS); DirectoryDlgParams.pszDirectory = malloc ( L_MAXPATH * 2 ) ; DirectoryDlgParams.pszTitle = TEXT("Select Border Images Folder") ; DirectoryDlgParams.nBuffSize = L_MAXPATH * sizeof(L_TCHAR) ; DirectoryDlgParams.pszFilter = NULL ; DirectoryDlgParams.nFilterIndex = 1 ; nRet = L_DlgGetDirectory ( hWnd, &DirectoryDlgParams ) ; // Get the Border directory if ( nRet == SUCCESS_DLG_OK ) { SetDlgItemText(hWnd, IDC_PIC_DIR_EDT, DirectoryDlgParams.pszDirectory); L_GetBitmapListCount(pPicDlgData->hListDirectory, &nIndex); L_DeleteBitmapListItems(pPicDlgData->hListDirectory, 0, nIndex); ThumbOption.nWidth = 115; ThumbOption.nHeight = 115; ThumbOption.bResample = TRUE; ThumbOption.bMaintainAspect = TRUE; ThumbOption.bLoadStamp = FALSE; ThumbOption.nBits = 24; ThumbOption.crBackColor = RGB(0,0,0); ThumbOption.uCRFlags = 0; ThumbOption.uStructSize = sizeof(THUMBOPTIONS); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); L_BrowseDir(DirectoryDlgParams.pszDirectory, TEXT("*.jpg"), &ThumbOption, 0, TRUE, FALSE, 0, 4000*1024, (BROWSEDIRCALLBACK) BrowseBitmaps, &pPicDlgData->hListDirectory); EnableWindow(GetDlgItem(hWnd, IDOK), TRUE); L_ApplyFilter (hWnd); } } break; } if (nID >= pPicDlgData->nEdtBaseID && nID < pPicDlgData->nEdtBaseID + pPicDlgData->nSlideNum) { if (uCodeNotify == EN_CHANGE) { uCurrentColor = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_CHM_OTPT_COM)); nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pPicDlgData->nEdtBaseID; Trackbar_SetPos(GetDlgItem(hWnd, pPicDlgData->nSldBaseID + nIndex), TRUE, nValue); switch(nIndex) { case 0: if (pPicDlgData->nWidth == nValue) return; pPicDlgData->nWidth = nValue; break; case 1: if (pPicDlgData->nHeight == nValue) return; pPicDlgData->nHeight = nValue; break; case 2: if (pPicDlgData->nLightness == nValue) return; pPicDlgData->nLightness = nValue; break; } L_ApplyFilter (hWnd); } } } static L_VOID PictzDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPPICDLGDATA pPicDlgData = (LPPICDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pPicDlgData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPPICDLGDATA pPicDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pPicDlgData = (LPPICDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pPicDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); switch (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_PIC_STL_COM))) { case 0: nRet = L_PicturizeBitmapSingle(&pData->LeadBitmap, &pData->LeadBitmap, pPicDlgData->nWidth, pPicDlgData->nHeight, pPicDlgData->nLightness); break; case 1: if (ListBox_GetCount(GetDlgItem(hWnd, IDC_PIC_INC_LST)) == 0) nRet = TRUE; else nRet = L_PicturizeBitmapList(&pData->LeadBitmap, pPicDlgData->nWidth, pPicDlgData->nHeight, pPicDlgData->nLightness, pPicDlgData->hListMultiple); break; case 2: if (nBitmapNum == 0) nRet = TRUE; else nRet = L_PicturizeBitmapList(&pData->LeadBitmap, pPicDlgData->nWidth, pPicDlgData->nHeight, pPicDlgData->nLightness, pPicDlgData->hListDirectory); break; } if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; } } } static L_INT L_FAR L_EXPORT BrowseBitmaps(pBITMAPHANDLE pBitmap, L_TCHAR L_FAR *pszFile, pFILEINFO pInfo, L_INT nStatusCode, L_INT nPercent, L_VOID L_FAR *pUserData) { BITMAPHANDLE TmpBitmap; if ( nStatusCode == SUCCESS ) { pHBITMAPLIST phList; phList = (pHBITMAPLIST) pUserData ; L_LoadBitmap(pszFile, &TmpBitmap, sizeof(BITMAPHANDLE), 24, ORDER_BGRORGRAY, 0, 0); L_InsertBitmapListItem(*phList, nBitmapNum, &TmpBitmap); nBitmapNum++ ; } return SUCCESS; }