#include "ImgPF.h" static L_BOOL Fragment_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID Fragment_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_VOID Fragment_OnTimer (HWND hWnd, L_INT nID); static L_VOID Fragment_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL Fragment_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK FragmentDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG(hWnd, WM_INITDIALOG, Fragment_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Fragment_OnCommand); HANDLE_MSG(hWnd, WM_HSCROLL, Fragment_OnHScroll); HANDLE_MSG(hWnd, WM_TIMER, Fragment_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static L_BOOL Fragment_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM Data) { HWND hWndParent; pCHILDDATA pData; LPFRAGMENTDLGDATA pFrgmntDlgData; L_INT nIndex; L_INT nRangeMin[] = {0, 0}; L_INT nRangeMax[] = {10, 100}; L_INT nPosInit[] = {4, 50}; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pFrgmntDlgData = (LPFRAGMENTDLGDATA)(Data); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pFrgmntDlgData); MemorizeAndCopyBitmap (hWndParent, &pFrgmntDlgData->LeadBitmap); MoveDialogToMiddle(hWnd); pFrgmntDlgData->uDisp = 4; pFrgmntDlgData->nEdtBaseID = IDC_FRGMT_DSP_EDT; pFrgmntDlgData->nSldBaseID = IDC_FRGMT_DSP_SLD; pFrgmntDlgData->nSlideNum = 2; pFrgmntDlgData->uOpacity = 50; StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bKillProgress = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_FRGMT_PROG); Progress_SetRange(GetDlgItem(hWnd, IDC_FRGMT_PROG), 0, 100); Progress_SetPos (GetDlgItem(hWnd, IDC_FRGMT_PROG), 0); for(nIndex = 0; nIndex < pFrgmntDlgData->nSlideNum; nIndex++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pFrgmntDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nIndex], nRangeMax[nIndex]); SetNumericEditBox(GetDlgItem(hWnd, pFrgmntDlgData->nEdtBaseID + nIndex), nRangeMin[nIndex], nRangeMax[nIndex], 1, 0, FALSE); SetDlgItemInt(hWnd, pFrgmntDlgData->nEdtBaseID + nIndex, nPosInit[nIndex], FALSE); } ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); L_ApplyFilter(hWnd); return TRUE; } static L_VOID Fragment_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID Fragment_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { HWND hWndParent; LPFRAGMENTDLGDATA pFrgmntDlgData; pCHILDDATA pData; L_INT nIndex, nValue; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pFrgmntDlgData = (LPFRAGMENTDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); switch(nID) { case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, TRUE); break; case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; EndDialog(hWnd, FALSE); break; } if(nID >= (L_INT)pFrgmntDlgData->nEdtBaseID && nID <(L_INT)(pFrgmntDlgData->nEdtBaseID + pFrgmntDlgData->nSlideNum)) { if(uCodeNotify == EN_CHANGE) { nIndex = nID - pFrgmntDlgData->nEdtBaseID; nValue = GetDlgItemInt(hWnd, nID, NULL, FALSE); Trackbar_SetPos(GetDlgItem(hWnd, nID + pFrgmntDlgData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if(pFrgmntDlgData->uDisp == (L_UINT)nValue) return; pFrgmntDlgData->uDisp = (L_UINT)nValue; break; case 1: if(pFrgmntDlgData->uOpacity == (L_UINT)nValue) return; pFrgmntDlgData->uOpacity = (L_UINT)nValue; break; } L_ApplyFilter(hWnd); } } } static L_VOID Fragment_OnHScroll(HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPFRAGMENTDLGDATA pFrgmntDlgData = (LPFRAGMENTDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pFrgmntDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), FALSE); } static L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPFRAGMENTDLGDATA pFrgmntDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pFrgmntDlgData = (LPFRAGMENTDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = (pCHILDDATA)GetWindowLong(hWndParent, GWL_USERDATA); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pFrgmntDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); nRet = L_FragmentBitmap(&pData->LeadBitmap, pFrgmntDlgData->uDisp, pFrgmntDlgData->uOpacity); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, TRUE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }