/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL DispDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL DispDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL DispDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID DispDialog_OnTimer (HWND hWnd, UINT nID); static L_BOOL DispDialog_OnPaint (HWND hWnd); static L_VOID GetConvImages (HWND hWnd); static L_BOOL CALLBACK ConvsEnum (HWND hWnd, LPARAM lParam); static L_VOID L_ApplyFilter (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK DisplaceDlgProc(HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, DispDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, DispDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, DispDialog_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, DispDialog_OnTimer); HANDLE_MSG (hWnd, WM_PAINT, DispDialog_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_VOID DispDialog_OnTimer(HWND hWnd, L_UINT nID) { Dialog_Timer(nID); } static L_BOOL DispDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPDISPDLGDATA pDispDlgData; pCHILDDATA pData; HWND hWndParent; RECT rcRgn; L_INT nRangeMax [] = {100, 100}; L_INT nRangeMin [] = { 1, 1}; L_INT nPosInit [] = { 1, 1}; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pDispDlgData = (LPDISPDLGDATA) lParam; pDispDlgData->uCurrentSel = 0; MemorizeAndCopyBitmap(hWndParent, &pDispDlgData->LeadBitmap); MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pDispDlgData); GetConvImages(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_DISP_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRgn); pDispDlgData->nSldBaseID = IDC_DISP_HORZ_SLD; pDispDlgData->nEdtBaseID = IDC_DISP_HORZ_EDT; pDispDlgData->nSlideNum = 2; pDispDlgData->uHorzFact = nPosInit[0]; pDispDlgData->uVertFact = nPosInit[1]; pDispDlgData->uCurrentSel = 0; pDispDlgData->uType = 0; pDispDlgData->uFill = 0; Button_SetCheck(GetDlgItem(hWnd, IDC_DISP_TIL_RAD), BST_CHECKED); ComboBox_AddString(GetDlgItem(hWnd, IDC_DISP_FIL_COM), "Fill Color"); ComboBox_AddString(GetDlgItem(hWnd, IDC_DISP_FIL_COM), "Repeat Edges"); ComboBox_AddString(GetDlgItem(hWnd, IDC_DISP_FIL_COM), "No Change"); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_DISP_FIL_COM), 0); for (nSlider = 0; nSlider < pDispDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pDispDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetNumericEditBox(GetDlgItem(hWnd, pDispDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); SetDlgItemInt(hWnd, pDispDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); } ShowWindow(hWnd, SW_SHOW); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE L_ApplyFilter (hWnd); return TRUE; } L_VOID GetConvImages(HWND hWnd) { EnumChildWindows (hWndClient, ConvsEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_DISP_IMG_COM), 0); } L_BOOL CALLBACK ConvsEnum(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 = ComboBox_GetCount(GetDlgItem(hDlg, IDC_DISP_IMG_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_DISP_IMG_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_DISP_IMG_COM), nCount , (LONG)pData); return TRUE; } static L_BOOL DispDialog_OnPaint(HWND hWnd) { HDC hDC; PAINTSTRUCT ps; HBRUSH hBrush; LPDISPDLGDATA pDispDlgData; RECT rcImage, Rect; HPALETTE hSavedPalette, hPalette; pCHILDDATA pData; HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pCurrentData = LOCKCHILDDATA (hWndParent); pBITMAPHANDLE pBitmap; pDispDlgData = (LPDISPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DISP_IMG_COM), pDispDlgData->uCurrentSel); pBitmap = (pData == pCurrentData) ? &pDispDlgData->LeadBitmap : &pData->LeadBitmap; GetClientRect(GetDlgItem(hWnd , IDC_DISP_FIL_TXT), &Rect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_DISP_FIL_TXT),&ps); hBrush = CreateSolidBrush(pDispDlgData->crColor); FillRect(hDC, &Rect, !pDispDlgData->uFill ? hBrush : (HBRUSH)COLOR_WINDOW); DeleteObject (hBrush); EndPaint(GetDlgItem(hWnd, IDC_DISP_FIL_TXT), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_DISP_IMG_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, pBitmap); if (hPalette) { hSavedPalette = SelectPalette (hDC, hPalette, FALSE); RealizePalette (hDC); } GetClientRect(GetDlgItem(hWnd, IDC_DISP_IMG_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, pBitmap, &Rect); L_PaintDC(hDC, pBitmap, NULL, NULL, &Rect, &ps.rcPaint,SRCCOPY); if (hSavedPalette) SelectPalette (hDC, hSavedPalette, FALSE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_DISP_IMG_TXT),&ps); return TRUE; } static L_BOOL DispDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPDISPDLGDATA pDispDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nValue; L_INT nIndex; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pDispDlgData = (LPDISPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if(nID >= pDispDlgData->nEdtBaseID && nID < pDispDlgData->nEdtBaseID + pDispDlgData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd,nID, NULL, FALSE); nIndex = nID - pDispDlgData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nIndex + pDispDlgData->nSldBaseID), TRUE, nValue); switch(nIndex) { case 0: if (pDispDlgData->uHorzFact == (L_UINT)nValue) return FALSE; pDispDlgData->uHorzFact = nValue; break; case 1: if (pDispDlgData->uVertFact == (L_UINT)nValue) return FALSE; pDispDlgData->uVertFact = nValue; break; } L_ApplyFilter (hWnd); } } switch(nID) { case IDC_DISP_IMG_COM: if (uCodeNotify == CBN_SELCHANGE) { if (pDispDlgData->uCurrentSel != ComboBox_GetCurSel(hWndCtl)) { pDispDlgData->uCurrentSel = ComboBox_GetCurSel(hWndCtl); InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } } break; case IDC_DISP_FIL_COM: if (uCodeNotify == CBN_SELCHANGE) { if (pDispDlgData->uFill != ComboBox_GetCurSel(hWndCtl)) { pDispDlgData->uFill = ComboBox_GetCurSel(hWndCtl); Button_Enable(GetDlgItem(hWnd, IDC_DISP_FIL_BTN), !pDispDlgData->uFill); InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter(hWnd); } } break; case IDC_DISP_FIL_BTN: crColor = pDispDlgData->crColor; pDispDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pDispDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_DISP_TIL_RAD: case IDC_DISP_STC_RAD: nValue = nID - IDC_DISP_TIL_RAD; if (pDispDlgData->uType != (L_UINT)nValue) { pDispDlgData->uType = nValue; L_ApplyFilter(hWnd); } break; case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; EndDialog(hWnd, FALSE); break; case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; } return TRUE; } static L_BOOL DispDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPDISPDLGDATA pDispDlgData = (LPDISPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); return SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pDispDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; pCHILDDATA pImgDispData; L_INT nRet = 0; HWND hWndParent; LPDISPDLGDATA pDispDlgData; L_INT nIndex; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pDispDlgData = (LPDISPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pDispDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); nIndex = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_DISP_IMG_COM)); pImgDispData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DISP_IMG_COM), nIndex); nRet = L_DisplaceMapBitmap(&pData->LeadBitmap, &pImgDispData->LeadBitmap, pDispDlgData->uHorzFact, pDispDlgData->uVertFact, pDispDlgData->crColor, (pDispDlgData->uType << 4) | pDispDlgData->uFill); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }