/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL DFTndDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify); static L_BOOL DFTndDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL DFTndDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID DFTndDlg_OnTimer (HWND hWnd, L_INT ID); L_BOOL CALLBACK DFTndDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, DFTndDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, DFTndDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, DFTndDlg_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, DFTndDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL DFTndDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPFTDATA pDFTData = (LPFTDATA)lParam; HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pData = LOCKCHILDDATA (hWndParent); L_INT nRangeMax[] = {pData->LeadBitmap.Width - 1, pData->LeadBitmap.Width - 1, pData->LeadBitmap.Height - 1, pData->LeadBitmap.Height - 1}; L_INT nRangeMin[] = {0, 0, 0, 0}; L_INT nPosInit [] = {0, pData->LeadBitmap.Width, 0, pData->LeadBitmap.Height}; L_INT nSlider; SetWindowLong(hWnd, GWL_USERDATA, (LONG)pDFTData); MoveDialogToMiddle(hWnd); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pDFTData->Bitmap); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_DFT_ND_PROG); pDFTData->nRdoBaseID = IDC_DFT_ND_RED_RAD; pDFTData->nRadioNum = 4; pDFTData->nSlideNum = 4; pDFTData->nSldBaseID = IDC_DFT_ND_XMIN_SLD; pDFTData->nEdtBaseID = IDC_DFT_ND_XMIN_EDT; pDFTData->uFlags = DFT_RED | DFT_IDFT_SCL | DFT_IDFT_MAG; pDFTData->rcRange.left = 0; pDFTData->rcRange.top = 0; pDFTData->rcRange.right = pData->LeadBitmap.Width - 1; pDFTData->rcRange.bottom = pData->LeadBitmap.Height - 1; pDFTData->bKeepX = FALSE; pDFTData->bKeepY = FALSE; Button_SetCheck(GetDlgItem(hWnd, IDC_DFT_ND_SCAL_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_DFT_ND_RED_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_DFT_ND_MAG_RAD), TRUE); for (nSlider = 0; nSlider < pDFTData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pDFTData->nSldBaseID + nSlider), FALSE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pDFTData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); SetNumericEditBox(GetDlgItem(hWnd, pDFTData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); Trackbar_SetPos(GetDlgItem(hWnd, pDFTData->nSldBaseID + nSlider), TRUE, nPosInit[nSlider]); } InvalidateRect(hWndParent, NULL, FALSE); L_ApplyFilter (hWnd); return ( TRUE ); } static L_VOID DFTndDlg_OnTimer (HWND hWnd, L_INT ID) { Dialog_Timer(ID); } static L_BOOL DFTndDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify) { LPFTDATA pDFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); HWND hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCHILDDATA pData = LOCKCHILDDATA (hWndParent); L_INT nRangeMax[] = {pData->LeadBitmap.Width - 1, pData->LeadBitmap.Width - 1, pData->LeadBitmap.Height - 1, pData->LeadBitmap.Height - 1}; L_INT nRangeMin[] = {0, 0, 0, 0}; HWND hCtl; L_INT nValue; L_INT nIndex; if (id >= pDFTData->nRdoBaseID && id < pDFTData->nRdoBaseID + pDFTData->nRadioNum) { nIndex = id - pDFTData->nRdoBaseID; pDFTData->uFlags &= 0xffffff0f; if (nIndex == 3) pDFTData->uFlags |= DFT_GRAY; else pDFTData->uFlags |= (pDFTData->nRadioNum - (nIndex + 1)) << 4; L_ApplyFilter (hWnd); return TRUE; } if (id >= pDFTData->nEdtBaseID && id < pDFTData->nEdtBaseID + pDFTData->nSlideNum) { if(codeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, id, NULL, TRUE); hCtl = GetDlgItem(hWnd,id + pDFTData->nSlideNum); nIndex = id - pDFTData->nEdtBaseID; if(nValue > nRangeMax[nIndex]) { SetDlgItemInt(hWnd, id, nRangeMax[nIndex], TRUE); return FALSE; } if(nValue < nRangeMin[nIndex]) { SetDlgItemInt(hWnd, id, nRangeMin[nIndex], TRUE); return FALSE; } switch (nIndex) { case 0: if(pDFTData->rcRange.left == nValue) return TRUE; if(nValue > pDFTData->rcRange.right) nValue = pDFTData->rcRange.right; pDFTData->rcRange.left = nValue; break; case 1: if(pDFTData->rcRange.right == nValue) return TRUE; if(nValue < pDFTData->rcRange.left) nValue = pDFTData->rcRange.left; pDFTData->rcRange.right = nValue; break; case 2: if(pDFTData->rcRange.top == nValue) return TRUE; if(nValue > pDFTData->rcRange.bottom) nValue = pDFTData->rcRange.bottom; pDFTData->rcRange.top = nValue; break; case 3: if(pDFTData->rcRange.bottom == nValue) return TRUE; if(nValue < pDFTData->rcRange.top) nValue = pDFTData->rcRange.top; pDFTData->rcRange.bottom = nValue; break; } Trackbar_SetPos(hCtl, TRUE, nValue); L_ApplyFilter (hWnd); } return TRUE; } switch (id) { case IDC_DFT_ND_XKEP_CHK: pDFTData->bKeepX = Button_GetCheck(hWndCtl); L_ApplyFilter (hWnd); break; case IDC_DFT_ND_YKEP_CHK: pDFTData->bKeepY = Button_GetCheck(hWndCtl); L_ApplyFilter (hWnd); break; case IDC_DFT_ND_CLIP_RAD: pDFTData->uFlags &= 0xffff0fff; pDFTData->uFlags |= DFT_IDFT_CLIP; L_ApplyFilter (hWnd); break; case IDC_DFT_ND_SCAL_RAD: pDFTData->uFlags &= 0xffff0fff; pDFTData->uFlags |= DFT_IDFT_SCL; L_ApplyFilter (hWnd); break; case IDC_DFT_ND_MAG_RAD: case IDC_DFT_ND_PHAS_RAD: case IDC_DFT_ND_BOTH_RAD: pDFTData->uFlags &= 0xfffff0ff; pDFTData->uFlags |= ((id - IDC_DFT_ND_MAG_RAD) + 1) << 8; 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 DFTndDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPFTDATA pDFTData; pDFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pDFTData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPFTDATA pDFTData; //L_COMPLEX L_FAR * L_FAR * lpcxData; // L_INT nIndex; pFTARRAY pFtArray; if (100 != StatusProc.ProgressValue) { StatusProc.bKillProgress = TRUE; return; } pDFTData = (LPFTDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap(hWndParent); L_CopyBitmap(&pData->LeadBitmap, &pDFTData->Bitmap, sizeof(BITMAPHANDLE)); L_AllocFTArray(&pData->LeadBitmap, &pFtArray, sizeof(FTARRAY)); memcpy(pFtArray->acxData, pDFTData->pFtArray->acxData, sizeof(L_COMPLEX) * pFtArray->uHeight * pFtArray->uWidth); nRet = L_DFTBitmap(&pData->LeadBitmap, pFtArray, &pDFTData->rcRange, pDFTData->uFlags | DFT_IDFT | DFT_RANGE |(pDFTData->bKeepX ? DFT_INSIDE_X : DFT_OUTSIDE_X) | (pDFTData->bKeepY ? DFT_INSIDE_Y : DFT_OUTSIDE_Y)); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } L_FreeFTArray(pFtArray); }