/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL FeatherDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID FeatherDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT CodeNotify); static L_VOID FeatherDlg_OnScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos); static L_VOID FeatherDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID FeatherDlg_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_BOOL CALLBACK FeatherEnum (HWND hWnd, LPARAM lParam); static L_VOID GetFeatherImages (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK FeatherWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { HANDLE_MSG(hWnd, WM_INITDIALOG, FeatherDlg_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, FeatherDlg_OnCommand); HANDLE_MSG(hWnd, WM_HSCROLL, FeatherDlg_OnScroll); HANDLE_MSG(hWnd, WM_VSCROLL, FeatherDlg_OnScroll); HANDLE_MSG(hWnd, WM_TIMER, FeatherDlg_OnTimer); HANDLE_MSG(hWnd, WM_PAINT, FeatherDlg_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL FeatherDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPFEATHERDLGDATA pFthrDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nSlider; L_INT nRangeMax[] = {0, 0, 0, 0, 0, 0, 255}; L_INT nRangeMin[] = {0, 0, 0, 0, 0, 0, 0}; L_INT nPosInit [] = {0, 0, 0, 0, 0, 0, 0}; RECT rcRgn; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); pFthrDlgData = (LPFEATHERDLGDATA)lParam; MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_FTHR_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pFthrDlgData->DstBitmap); GetFeatherImages(hWnd); pFthrDlgData->nSldBaseID = IDC_FTHR_XSRC_SLD; pFthrDlgData->nEdtBaseID = IDC_FTHR_XSRC_EDT; pFthrDlgData->nSlideNum = 6; pFthrDlgData->nDstIndex = pFthrDlgData->nSrcIndex = pFthrDlgData->nSrcX = pFthrDlgData->nDstX = pFthrDlgData->nSrcY = pFthrDlgData->nDstY = 0; L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = nRangeMax[2] = pFthrDlgData->nWidth = pData->LeadBitmap.Width - 1; nRangeMax[1] = nRangeMax[3] = pFthrDlgData->nHeight = pData->LeadBitmap.Height - 1; nRangeMin[0] = nRangeMin[2] = - nRangeMax[0]; nRangeMin[1] = nRangeMin[3] = - nRangeMax[1]; nRangeMax[4] = nPosInit [4] = FadeBitmap.Width; nRangeMax[5] = nPosInit [5] = FadeBitmap.Height; SetWindowLong(hWnd, GWL_USERDATA, (long)pFthrDlgData); for (nSlider = 0; nSlider < pFthrDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pFthrDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pFthrDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pFthrDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE L_ApplyFilter (hWnd); return TRUE; } static L_VOID FeatherDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID FeatherDlg_OnPaint (HWND hWnd) { pCHILDDATA pSrcData, pDstData; RECT rcRect; RECT rcImage; HDC hDC; PAINTSTRUCT ps; HWND hWndParent; pCHILDDATA pData; LPFEATHERDLGDATA pFeathrDlgData; HPALETTE hPalette; HPALETTE hSavedPalette; pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_DST_COM))); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pFeathrDlgData = (LPFEATHERDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hDC = BeginPaint(GetDlgItem(hWnd, IDC_FTHR_SRC_TXT), &ps); GetClientRect(GetDlgItem(hWnd, IDC_FTHR_SRC_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, &pSrcData->LeadBitmap, &rcRect); hPalette = L_CreatePaintPalette(hDC, (pData == pSrcData) ? &pFeathrDlgData->DstBitmap : &pSrcData->LeadBitmap); if (hPalette) { hSavedPalette = SelectPalette (hDC, hPalette, FALSE); RealizePalette (hDC); } L_PaintDC(hDC, (pData == pSrcData) ? &pFeathrDlgData->DstBitmap : &pSrcData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); if (hSavedPalette) SelectPalette (hDC, hSavedPalette, FALSE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_FTHR_SRC_TXT), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_FTHR_DST_TXT), &ps); GetClientRect(GetDlgItem(hWnd, IDC_FTHR_DST_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, &pDstData->LeadBitmap, &rcRect); hPalette = L_CreatePaintPalette(hDC, (pData == pDstData) ? &pFeathrDlgData->DstBitmap : &pDstData->LeadBitmap); if (hPalette) { hSavedPalette = SelectPalette (hDC, hPalette, FALSE); RealizePalette (hDC); } L_PaintDC(hDC, (pData == pDstData) ? &pFeathrDlgData->DstBitmap : &pDstData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); if (hSavedPalette) SelectPalette (hDC, hSavedPalette, FALSE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_FTHR_DST_TXT), &ps); } L_VOID GetFeatherImages(HWND hWnd) { EnumChildWindows (hWndClient, FeatherEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_FTHR_SRC_COM), 0); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_FTHR_DST_COM), 0); } L_BOOL CALLBACK FeatherEnum(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_FTHR_DST_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_FTHR_DST_COM), StripName); ComboBox_AddString(GetDlgItem(hDlg, IDC_FTHR_SRC_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_FTHR_DST_COM), nCount, (LONG)pData); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_FTHR_SRC_COM), nCount, (LONG)pData); return TRUE; } static L_VOID FeatherDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPFEATHERDLGDATA pFthrDlgData; L_INT nValue; pCHILDDATA pSrcData, pDstData; L_INT nRangeMax[] = {0, 0, 0, 0, 0, 0, 255}; L_INT nRangeMin[] = {0, 0, 0, 0, 0, 0, 0}; L_INT nPosInit [] = {0, 0, 0, 0, 0, 0, 0}; L_INT nIndex; RECT rcRgn; pFthrDlgData = (LPFEATHERDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_DST_COM))); L_GetBitmapRgnBounds(&pSrcData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = pSrcData->LeadBitmap.Width - 1; nRangeMax[1] = pSrcData->LeadBitmap.Height - 1; nRangeMin[0] = - nRangeMax[0]; nRangeMin[1] = - nRangeMax[1]; L_GetBitmapRgnBounds(&pDstData->LeadBitmap, NULL, &rcRgn); nRangeMax[2] = pDstData->LeadBitmap.Width - 1; nRangeMax[3] = pDstData->LeadBitmap.Height - 1; nRangeMin[2] = - nRangeMax[2]; nRangeMin[3] = - nRangeMax[3]; nRangeMax[4] = FadeBitmap.Width; nRangeMax[5] = FadeBitmap.Height; switch (nID) { case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pFthrDlgData->DstBitmap, sizeof(BITMAPHANDLE)); L_FreeBitmap(&pFthrDlgData->DstBitmap); InvalidateRect(pDstData->hBitmapWnd, NULL, FALSE); EndDialog(hWnd, FALSE); break; case IDOK: L_FreeBitmap(&pFthrDlgData->DstBitmap); L_UndoList_AddBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //UNDOLIST// StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; case IDC_FTHR_DST_COM: case IDC_FTHR_SRC_COM: if (uCodeNotify == CBN_SELCHANGE) { pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_FTHR_DST_COM))); if (nID == IDC_FTHR_DST_COM) { if (pFthrDlgData->nDstIndex == ComboBox_GetCurSel(GetDlgItem(hWnd, nID))) return; SendMessage(hWndClient, WM_MDIACTIVATE, (WPARAM)pDstData->hBitmapWnd, (LPARAM)0); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pFthrDlgData->nDstIndex); L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pFthrDlgData->DstBitmap, sizeof(BITMAPHANDLE)); InvalidateRect(pDstData->hBitmapWnd, NULL, FALSE); pFthrDlgData->nDstIndex = ComboBox_GetCurSel(hWndCtl); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pFthrDlgData->nDstIndex); L_FreeBitmap(&pFthrDlgData->DstBitmap); L_CopyBitmap(&pFthrDlgData->DstBitmap, &pDstData->LeadBitmap, sizeof(BITMAPHANDLE)); } else { if (pFthrDlgData->nSrcIndex == ComboBox_GetCurSel(hWndCtl)) return; pFthrDlgData->nSrcIndex = ComboBox_GetCurSel(hWndCtl); } pFthrDlgData->nSrcX = pFthrDlgData->nSrcY = 0; pFthrDlgData->nDstX = pFthrDlgData->nDstY = 0; L_GetBitmapRgnBounds(&pSrcData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = pSrcData->LeadBitmap.Width - 1; nRangeMax[1] = pSrcData->LeadBitmap.Height - 1; nRangeMin[0] = - nRangeMax[0]; nRangeMin[1] = - nRangeMax[1]; L_GetBitmapRgnBounds(&pDstData->LeadBitmap, NULL, &rcRgn); nRangeMax[2] = pFthrDlgData->nWidth = pDstData->LeadBitmap.Width - 1; nRangeMax[3] = pFthrDlgData->nHeight = pDstData->LeadBitmap.Height - 1; nRangeMin[2] = - nRangeMax[2]; nRangeMin[3] = - nRangeMax[3]; nRangeMax[4] = nPosInit[4] = FadeBitmap.Width; nRangeMax[5] = nPosInit[5] = FadeBitmap.Height; for (nIndex = 0; nIndex < pFthrDlgData->nSlideNum; nIndex++) { Trackbar_SetRange(GetDlgItem(hWnd, pFthrDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nIndex], nRangeMax[nIndex]); SetDlgItemInt(hWnd, pFthrDlgData->nEdtBaseID + nIndex, nPosInit[nIndex], TRUE); } InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, NULL, FALSE); //ApplyFilter (hWnd); } break; } if (nID >= pFthrDlgData->nEdtBaseID && nID < pFthrDlgData->nEdtBaseID + pFthrDlgData->nSlideNum) { if ((uCodeNotify == EN_CHANGE)) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pFthrDlgData->nEdtBaseID; Trackbar_SetPos(GetDlgItem(hWnd, pFthrDlgData->nSldBaseID + nIndex), TRUE, nValue); if (nValue < nRangeMin[nIndex]) { nValue = nRangeMin[nIndex]; SetDlgItemInt(hWnd, nID, nRangeMin[nIndex], TRUE); } if (nValue > nRangeMax[nIndex]) { nValue = nRangeMax[nIndex]; SetDlgItemInt(hWnd, nID, nRangeMax[nIndex], TRUE); } switch(nIndex) { case 0: if (pFthrDlgData->nSrcX == nValue) return; pFthrDlgData->nSrcX = nValue; break; case 1: if (pFthrDlgData->nSrcY == nValue) return; pFthrDlgData->nSrcY = nValue; break; case 2: if (pFthrDlgData->nDstX == nValue) return; pFthrDlgData->nDstX = nValue; break; case 3: if (pFthrDlgData->nDstY == nValue) return; pFthrDlgData->nDstY = nValue; break; case 4: if (pFthrDlgData->nWidth == nValue) return; pFthrDlgData->nWidth = nValue; break; case 5: if (pFthrDlgData->nHeight == nValue) return; pFthrDlgData->nHeight = nValue; break; } L_ApplyFilter (hWnd); } } } static L_VOID FeatherDlg_OnScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPFEATHERDLGDATA pFthrDlgData = (LPFEATHERDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pFthrDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { L_INT nRet = 0; LPFEATHERDLGDATA pFthrDlgData; pCHILDDATA pSrcData, pDstData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pFthrDlgData = (LPFEATHERDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_SRC_COM), pFthrDlgData->nSrcIndex); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_FTHR_DST_COM), pFthrDlgData->nDstIndex); FreeMemorizedBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //MEMDISK// L_CopyBitmap(&pDstData->LeadBitmap, &pFthrDlgData->DstBitmap, sizeof(BITMAPHANDLE)); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); // EnableWindow(GetDlgItem(hWnd, IDCANCEL), FALSE); nRet = L_FeatherAlphaBlendBitmap(&pDstData->LeadBitmap, pFthrDlgData->nDstX, pFthrDlgData->nDstY, pFthrDlgData->nWidth, pFthrDlgData->nHeight, &pSrcData->LeadBitmap, pFthrDlgData->nSrcX, pFthrDlgData->nSrcY, &FadeBitmap); if(nRet == SUCCESS || nRet == FAILURE) { EnableWindow(GetDlgItem(hWnd, IDOK), TRUE); // EnableWindow(GetDlgItem(hWnd, IDCANCEL), TRUE); InvalidateRect(FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage), NULL, FALSE); InvalidateRect(hWnd, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }