/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL GlassEffectDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify); static L_BOOL GlassEffectDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL GlassEffectDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID GlassEffectDialog_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK GlassEffectDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, GlassEffectDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, GlassEffectDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, GlassEffectDialog_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, GlassEffectDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL GlassEffectDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPGLASSEFFECTDATA pGlassDlgData = (LPGLASSEFFECTDATA) lParam; HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pData = LOCKCHILDDATA (hWndParent); RECT rcRgn; L_INT nRangeMax[] = { BITMAPWIDTH(&pData->LeadBitmap) / 2 , BITMAPHEIGHT(&pData->LeadBitmap) / 2}; L_INT nRangeMin[] = { 2, 3}; L_INT nPosInit [] = { min(nRangeMax[0], 20), min(nRangeMax[1], 20)}; L_INT nSlider; SetWindowLong(hWnd, GWL_USERDATA, (LONG)pGlassDlgData); MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_GLS_PROG); ShowWindow(hWnd, SW_SHOW); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pGlassDlgData->Bitmap); if(L_BitmapHasRgn(&pData->LeadBitmap)) { L_GetBitmapRgnBounds(&pData->LeadBitmap,NULL, &rcRgn); nRangeMax[0] = (rcRgn.right - rcRgn.left) / 2; nRangeMax[1] = (rcRgn.bottom - rcRgn.top) / 2; } pGlassDlgData->uCellWidth = nPosInit[0]; pGlassDlgData->uCellHeight = nPosInit[1]; pGlassDlgData->uFlags = GLASS_WFRQ | GLASS_HFRQ; pGlassDlgData->nSldBaseID = IDC_GLS_WDT_SLD; pGlassDlgData->nEdtBaseID = IDC_GLS_WDT_EDT; pGlassDlgData->nSlideNum = 2; for (nSlider = 0; nSlider < pGlassDlgData->nSlideNum; nSlider++) { Trackbar_SetRange (GetDlgItem(hWnd, pGlassDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); Trackbar_SetPos (GetDlgItem(hWnd, pGlassDlgData->nSldBaseID + nSlider), TRUE, nPosInit[nSlider]); SetDlgItemInt (hWnd, pGlassDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); ComboBox_AddString(GetDlgItem(hWnd, pGlassDlgData->nSldBaseID + nSlider + pGlassDlgData->nSlideNum), TEXT("Frequency")); ComboBox_AddString(GetDlgItem(hWnd, pGlassDlgData->nSldBaseID + nSlider + pGlassDlgData->nSlideNum), TEXT("Period")); ComboBox_SetCurSel(GetDlgItem(hWnd, pGlassDlgData->nSldBaseID + nSlider + pGlassDlgData->nSlideNum), 0); SetNumericEditBox (GetDlgItem(hWnd, pGlassDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); L_ApplyFilter (hWnd); return TRUE; } static L_VOID GlassEffectDialog_OnTimer(HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL GlassEffectDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify) { pCHILDDATA pData; HWND hWndParent; L_INT nValue, nRet, nComIndex; LPGLASSEFFECTDATA pGlassDlgData; L_INT nIndex; pGlassDlgData = (LPGLASSEFFECTDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); if (nID >= pGlassDlgData->nSldBaseID + pGlassDlgData->nSlideNum && nID < pGlassDlgData->nSldBaseID + pGlassDlgData->nSlideNum + pGlassDlgData->nSlideNum) { if (codeNotify == CBN_SELCHANGE) { L_ApplyFilter (hWnd); } } if (nID >= pGlassDlgData->nEdtBaseID && nID < pGlassDlgData->nEdtBaseID + pGlassDlgData->nSlideNum) { if(codeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, &nRet, FALSE); nIndex = nID - pGlassDlgData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nID + pGlassDlgData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if(nValue == (L_INT)pGlassDlgData->uCellWidth) return FALSE; pGlassDlgData->uCellWidth = nValue; break; case 1: if(nValue == (L_INT)pGlassDlgData->uCellHeight) return FALSE; pGlassDlgData->uCellHeight = nValue; break; } L_ApplyFilter (hWnd); } } switch(nID) { case IDC_GLS_WDT_COM: if (codeNotify == CBN_SELCHANGE) { nComIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_GLS_WDT_COM))) + 1; pGlassDlgData->uFlags = pGlassDlgData->uFlags & 0xFFF0; pGlassDlgData->uFlags = pGlassDlgData->uFlags | nComIndex; InvalidateRect(hWndCtl, NULL, FALSE); } break; case IDC_GLS_HGT_COM: if (codeNotify == CBN_SELCHANGE) { nComIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_GLS_HGT_COM))) + 1; pGlassDlgData->uFlags = pGlassDlgData->uFlags & 0xFF0F; pGlassDlgData->uFlags = pGlassDlgData->uFlags | (nComIndex << 4); InvalidateRect(hWndCtl, NULL, FALSE); } 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 GlassEffectDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { L_INT nCtrlID; LPGLASSEFFECTDATA pGlassDlgData; pGlassDlgData = (LPGLASSEFFECTDATA) GetWindowLong(hWnd, GWL_USERDATA); nCtrlID = GetWindowLong (hWndCtl, GWL_ID); SetDlgItemInt(hWnd, nCtrlID - pGlassDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPGLASSEFFECTDATA pGlassDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pGlassDlgData = (LPGLASSEFFECTDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pGlassDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_GlassEffectBitmap(&pData->LeadBitmap, pGlassDlgData->uCellWidth, pGlassDlgData->uCellHeight, pGlassDlgData->uFlags); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }