/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL OpacityDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID OpacityDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT CodeNotify); static L_VOID OpacityDlg_OnScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos); static L_VOID OpacityDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID OpacityDlg_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_BOOL CALLBACK OpacityEnum (HWND hWnd, LPARAM lParam); static L_VOID GetOpacityImages (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK OpacityWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { HANDLE_MSG(hWnd, WM_INITDIALOG, OpacityDlg_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, OpacityDlg_OnCommand); HANDLE_MSG(hWnd, WM_HSCROLL, OpacityDlg_OnScroll); HANDLE_MSG(hWnd, WM_VSCROLL, OpacityDlg_OnScroll); HANDLE_MSG(hWnd, WM_TIMER, OpacityDlg_OnTimer); HANDLE_MSG(hWnd, WM_PAINT, OpacityDlg_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL OpacityDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPOPCDLGDATA pOpctyDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nSlider; L_INT nRangeMax[] = {0, 0, 0, 0, 0, 0, 255}; L_INT nRangeMin[] = {0, 0, 0, 0, 1, 1, 0}; L_INT nPosInit [] = {0, 0, 0, 0, 0, 0, 127}; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); pOpctyDlgData = (LPOPCDLGDATA)lParam; MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_OPCT_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pOpctyDlgData->DstBitmap); GetOpacityImages(hWnd); pOpctyDlgData->nSldBaseID = IDC_OPCT_XSRC_SLD; pOpctyDlgData->nEdtBaseID = IDC_OPCT_XSRC_EDT; pOpctyDlgData->nSlideNum = 7; pOpctyDlgData->nDstIndex = pOpctyDlgData->nSrcIndex = pOpctyDlgData->nSrcX = pOpctyDlgData->nDstX = pOpctyDlgData->nSrcY = pOpctyDlgData->nDstY = 0; nRangeMax[0] = nRangeMax[2] = pOpctyDlgData->nWidth = BITMAPWIDTH(&pData->LeadBitmap) - 1; nRangeMax[1] = nRangeMax[3] = pOpctyDlgData->nHeight = BITMAPHEIGHT(&pData->LeadBitmap) - 1; nRangeMin[0] = nRangeMin[2] = - nRangeMax[0]; nRangeMin[1] = nRangeMin[3] = - nRangeMax[1]; nRangeMax[4] = nPosInit[4] = pOpctyDlgData->nWidth = BITMAPWIDTH(&pData->LeadBitmap); nRangeMax[5] = nPosInit[5] = pOpctyDlgData->nHeight = BITMAPHEIGHT(&pData->LeadBitmap); if (Is16Bit(&pData->LeadBitmap)) { nRangeMax[6] = pData->LeadBitmap.BitsPerPixel == 12 ? 0xfff : 0xffff; nPosInit[6] = nRangeMax[6] / 2; } SetWindowLong(hWnd, GWL_USERDATA, (long)pOpctyDlgData); for (nSlider = 0; nSlider < pOpctyDlgData->nSlideNum; nSlider++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pOpctyDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pOpctyDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pOpctyDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE return TRUE; } static L_VOID OpacityDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID OpacityDlg_OnPaint (HWND hWnd) { pCHILDDATA pSrcData, pDstData; RECT rcRect; HDC hDC; PAINTSTRUCT ps; HPALETTE hPalette, hSavedPalette; RECT rcImage; pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_DST_COM))); hDC = BeginPaint(GetDlgItem(hWnd, IDC_OPCT_SRC_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, &pSrcData->LeadBitmap); hSavedPalette = SelectPalette(hDC, hPalette, TRUE); RealizePalette(hDC); GetClientRect(GetDlgItem(hWnd, IDC_OPCT_SRC_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage,&pSrcData->LeadBitmap, &rcRect); L_PaintDC(hDC, &pSrcData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); hPalette = SelectPalette(hDC, hSavedPalette, TRUE); DeletePalette(hPalette); EndPaint(GetDlgItem(hWnd, IDC_OPCT_SRC_TXT), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_OPCT_DST_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, &pSrcData->LeadBitmap); hSavedPalette = SelectPalette(hDC, hPalette, TRUE); RealizePalette(hDC); GetClientRect(GetDlgItem(hWnd, IDC_OPCT_DST_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage,&pDstData->LeadBitmap, &rcRect); L_PaintDC(hDC, &pDstData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); hPalette = SelectPalette(hDC, hSavedPalette, TRUE); DeletePalette(hPalette); EndPaint(GetDlgItem(hWnd, IDC_OPCT_DST_TXT), &ps); } L_VOID GetOpacityImages(HWND hWnd) { EnumChildWindows (hWndClient, OpacityEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_OPCT_SRC_COM), 0); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_OPCT_DST_COM), 0); } L_BOOL CALLBACK OpacityEnum(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_OPCT_DST_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_OPCT_DST_COM), StripName); ComboBox_AddString(GetDlgItem(hDlg, IDC_OPCT_SRC_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_OPCT_DST_COM), nCount, (LONG)pData); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_OPCT_SRC_COM), nCount, (LONG)pData); return TRUE; } static L_VOID OpacityDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPOPCDLGDATA pOpctyDlgData; L_INT nValue; pCHILDDATA pSrcData, pDstData; L_INT nRangeMax[] = {0, 0, 0, 0, 0, 0, 255}; L_INT nRangeMin[] = {0, 0, 0, 0, 1, 1, 0}; L_INT nPosInit [] = {0, 0, 0, 0, 0, 0, 0}; L_INT nIndex; pOpctyDlgData = (LPOPCDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_DST_COM))); nRangeMax[0] = nRangeMax[2] = pSrcData->LeadBitmap.Width; nRangeMax[1] = nRangeMax[3] = pSrcData->LeadBitmap.Height; nRangeMin[0] = nRangeMin[2] = - nRangeMax[0]; nRangeMin[1] = nRangeMin[3] = - nRangeMax[1]; nRangeMax[4] = pDstData->LeadBitmap.Width; nRangeMax[5] = pDstData->LeadBitmap.Height; switch (nID) { case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pOpctyDlgData->DstBitmap, sizeof(BITMAPHANDLE)); L_FreeBitmap(&pOpctyDlgData->DstBitmap); InvalidateRect(pDstData->hBitmapWnd, NULL, FALSE); EndDialog(hWnd, FALSE); break; case IDOK: L_FreeBitmap(&pOpctyDlgData->DstBitmap); L_UndoList_AddBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //UNDOLIST// StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; case IDC_OPCT_DST_COM: case IDC_OPCT_SRC_COM: if (uCodeNotify == CBN_SELCHANGE) { pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_SRC_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_SRC_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_DST_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_OPCT_DST_COM))); if (nID == IDC_OPCT_DST_COM) { if (pOpctyDlgData->nDstIndex == ComboBox_GetCurSel(GetDlgItem(hWnd, nID))) return; SendMessage(hWndClient, WM_MDIACTIVATE, (WPARAM)pDstData->hBitmapWnd, (LPARAM)0); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pOpctyDlgData->nDstIndex); L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pOpctyDlgData->DstBitmap, sizeof(BITMAPHANDLE)); InvalidateRect(pDstData->hBitmapWnd, NULL, FALSE); pOpctyDlgData->nDstIndex = ComboBox_GetCurSel(hWndCtl); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pOpctyDlgData->nDstIndex); L_FreeBitmap(&pOpctyDlgData->DstBitmap); L_CopyBitmap(&pOpctyDlgData->DstBitmap, &pDstData->LeadBitmap, sizeof(BITMAPHANDLE)); } else { if (pOpctyDlgData->nSrcIndex == ComboBox_GetCurSel(hWndCtl)) return; pOpctyDlgData->nSrcIndex = ComboBox_GetCurSel(hWndCtl); } pOpctyDlgData->nSrcX = pOpctyDlgData->nSrcY = 0; pOpctyDlgData->nDstX = pOpctyDlgData->nDstY = 0; nRangeMax[0] = pSrcData->LeadBitmap.Width - 1; nRangeMax[1] = pSrcData->LeadBitmap.Height - 1; nRangeMin[0] = - nRangeMax[0]; nRangeMin[1] = - nRangeMax[1]; nRangeMax[4] = nPosInit[4] = pOpctyDlgData->nWidth = pDstData->LeadBitmap.Width; nRangeMax[5] = nPosInit[5] = pOpctyDlgData->nHeight = pDstData->LeadBitmap.Height; nRangeMax[2] = pDstData->LeadBitmap.Width - 1; nRangeMax[3] = pDstData->LeadBitmap.Height - 1; nRangeMin[2] = - nRangeMax[2]; nRangeMin[3] = - nRangeMax[3]; for (nIndex = 0; nIndex < pOpctyDlgData->nSlideNum - 1; nIndex++) { Trackbar_SetRange(GetDlgItem(hWnd, pOpctyDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nIndex], nRangeMax[nIndex]); SetDlgItemInt(hWnd, pOpctyDlgData->nEdtBaseID + nIndex, nPosInit[nIndex], TRUE); } InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } break; } if (nID >= pOpctyDlgData->nEdtBaseID && nID < pOpctyDlgData->nEdtBaseID + pOpctyDlgData->nSlideNum) { if ((uCodeNotify == EN_CHANGE)) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pOpctyDlgData->nEdtBaseID; Trackbar_SetPos(GetDlgItem(hWnd, pOpctyDlgData->nSldBaseID + nIndex), TRUE, nValue); switch(nIndex) { case 0: if (pOpctyDlgData->nSrcX == nValue) return; pOpctyDlgData->nSrcX = nValue; break; case 1: if (pOpctyDlgData->nSrcY == nValue) return; pOpctyDlgData->nSrcY = nValue; break; case 2: if (pOpctyDlgData->nDstX == nValue) return; pOpctyDlgData->nDstX = nValue; break; case 3: if (pOpctyDlgData->nDstY == nValue) return; pOpctyDlgData->nDstY = nValue; break; case 4: if (pOpctyDlgData->nWidth == nValue) return; pOpctyDlgData->nWidth = nValue; break; case 5: if (pOpctyDlgData->nHeight == nValue) return; pOpctyDlgData->nHeight = nValue; break; case 6: if (pOpctyDlgData->uOpacity == (L_UINT)nValue) return; pOpctyDlgData->uOpacity = (L_UINT)nValue; break; } L_ApplyFilter (hWnd); } } } static L_VOID OpacityDlg_OnScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPOPCDLGDATA pOpctyDlgData = (LPOPCDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pOpctyDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { L_INT nRet = 0; LPOPCDLGDATA pOpctyDlgData; pCHILDDATA pSrcData, pDstData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pOpctyDlgData = (LPOPCDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_SRC_COM), pOpctyDlgData->nSrcIndex); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_OPCT_DST_COM), pOpctyDlgData->nDstIndex); FreeMemorizedBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //MEMDISK// L_CopyBitmap(&pDstData->LeadBitmap, &pOpctyDlgData->DstBitmap, sizeof(BITMAPHANDLE)); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); nRet = L_AlphaBlendBitmap(&pDstData->LeadBitmap, pOpctyDlgData->nDstX, pOpctyDlgData->nDstY, pOpctyDlgData->nWidth, pOpctyDlgData->nHeight, &pSrcData->LeadBitmap, pOpctyDlgData->nSrcX, pOpctyDlgData->nSrcY, pOpctyDlgData->uOpacity); if(nRet == SUCCESS || nRet == FAILURE) { EnableWindow(GetDlgItem(hWnd, IDOK), 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 ; if(pOpctyDlgData) { GlobalFreePtr(pOpctyDlgData); } } } }