/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL AgeDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL AgeDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL AgeDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID AgeDlg_OnTimer (HWND hWnd, L_INT nID); static L_BOOL AgeDlg_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID ShowWindows (HWND hWnd, L_UINT uCurrentTab); L_BOOL CALLBACK AgingDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { LPAGEDLGDATA pAgeDlgData = (LPAGEDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, AgeDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, AgeDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, AgeDlg_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, AgeDlg_OnPaint); HANDLE_MSG (hWnd, WM_TIMER, AgeDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; case WM_NOTIFY: if (pAgeDlgData && wParam == IDC_AGE_TAB) { L_BOOL bCheck[3]; if (pAgeDlgData->uCurrentTab == (L_UINT)TabCtrl_GetCurSel(GetDlgItem(hWnd, IDC_AGE_TAB))) return FALSE; pAgeDlgData->uCurrentTab = TabCtrl_GetCurSel(GetDlgItem(hWnd, IDC_AGE_TAB)); bCheck[0] = Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_HORZ_CHK)) || Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_VERT_CHK)); bCheck[1] = Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_DUST_CHK)); bCheck[2] = Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_PITS_CHK)); ShowWindows(hWnd, pAgeDlgData->uCurrentTab); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_COM), bCheck[pAgeDlgData->uCurrentTab]); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_BTN), bCheck[pAgeDlgData->uCurrentTab] && ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_AGE_CLR_COM))); } break; } return FALSE; } L_VOID ShowWindows(HWND hWnd, L_UINT uCurrentTab) { LPAGEDLGDATA pAgeDlgData = (LPAGEDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); L_INT nIndex; HDC hDC; HBRUSH hBrush; L_INT nSldStart[] = {0, 3, 4}; L_INT nSldEnd [] = {3, 4, 6}; L_INT nChkStart[] = {0, 2, 3}; L_INT nChkEnd [] = {2, 3, 4}; L_TCHAR * cColorType[] = {TEXT("Line Color"), TEXT("Dust Color"), TEXT("Pits Color")}; RECT rcRect; for (nIndex = 0; nIndex < pAgeDlgData->nSlideNum; nIndex++) { ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nIndex), SW_HIDE); ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nIndex), SW_HIDE); ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + nIndex), SW_HIDE); } for (nIndex = 0; nIndex < pAgeDlgData->nCheckNum; nIndex++) ShowWindow(GetDlgItem(hWnd, IDC_AGE_VERT_CHK + nIndex), SW_HIDE); for (nIndex = nSldStart[uCurrentTab]; nIndex < nSldEnd[uCurrentTab]; nIndex++) { ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nIndex), SW_SHOW); ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nIndex), SW_SHOW); ShowWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + nIndex), SW_SHOW); } for (nIndex = nChkStart[uCurrentTab]; nIndex < nChkEnd[uCurrentTab]; nIndex++) ShowWindow(GetDlgItem(hWnd, IDC_AGE_VERT_CHK + nIndex), SW_SHOW); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_AGE_CLR_COM), pAgeDlgData->uCombCur[uCurrentTab]); Static_SetText(GetDlgItem(hWnd, IDC_AGE_CLRT_TXT), cColorType[uCurrentTab]); hDC = GetDC(GetDlgItem(hWnd, IDC_AGE_CLR_TXT)); hBrush = CreateSolidBrush(pAgeDlgData->crColors[uCurrentTab]); GetClientRect(GetDlgItem(hWnd, IDC_AGE_CLR_TXT), &rcRect); FillRect(hDC, &rcRect, hBrush); DeleteBrush(hBrush); ReleaseDC(GetDlgItem(hWnd, IDC_AGE_CLR_TXT), hDC); } static L_BOOL AgeDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPAGEDLGDATA pAgeDlgData; pCHILDDATA pData; HWND hWndParent; RECT rcRgn; L_INT nRangeMax[] = {200, 100, 100, 1000, 1000, 50}; L_INT nRangeMin[] = {2, 1, 1, 1, 1, 1}; L_INT nPosInit [] = {50, 10, 10, 10, 5, 5}; L_TCHAR * cComboString[] = {TEXT("Inverse"), TEXT("Color")}; L_TCHAR * cTabString[] = {TEXT("Lines"), TEXT(" Dust"), TEXT("Pits")}; L_INT nSlider; TCITEM tcTabItem; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); pAgeDlgData = (LPAGEDLGDATA) lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pAgeDlgData); ShowWindow(hWnd, SW_SHOW); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_AGE_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pAgeDlgData->LeadBitmap); L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRgn); pAgeDlgData->uMaximumLength = nPosInit[0]; pAgeDlgData->uVerticalNum = nPosInit[1]; pAgeDlgData->uHorizontalNum = nPosInit[2]; pAgeDlgData->uDustDensity = nPosInit[3]; pAgeDlgData->uPitsDensity = nPosInit[4]; pAgeDlgData->uMaximumSize = nPosInit[5]; pAgeDlgData->nSlideNum = 6; pAgeDlgData->nCheckNum = 4; pAgeDlgData->nSldBaseID = IDC_AGE_MAXL_SLD; pAgeDlgData->nEdtBaseID = IDC_AGE_MAXL_EDT; pAgeDlgData->nTxtBaseID = IDC_AGE_MAXL_TXT; pAgeDlgData->nChkBaseID = IDC_AGE_VERT_CHK; pAgeDlgData->uCurrentTab = 0; for (nSlider = 0; nSlider < pAgeDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pAgeDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } tcTabItem.mask = TCIF_TEXT | TCIF_IMAGE; tcTabItem.iImage = -1; for (nSlider = 0; nSlider < 3; nSlider++) { tcTabItem.pszText = cTabString[nSlider]; TabCtrl_InsertItem(GetDlgItem(hWnd, IDC_AGE_TAB), nSlider, &tcTabItem); } for (nSlider = 0; nSlider < 2; nSlider++) ComboBox_AddString(GetDlgItem(hWnd, IDC_AGE_CLR_COM), cComboString[nSlider]); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_AGE_CLR_COM), 0); for (nSlider = 0; nSlider < pAgeDlgData->nSlideNum; nSlider++) { EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nSlider), FALSE); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nSlider), FALSE); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + nSlider), FALSE); } EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLRT_TXT), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_COM), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_BTN), FALSE); for (nSlider = 0; nSlider < 3; nSlider++) pAgeDlgData->uCombCur[nSlider] = 0; pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); L_ApplyFilter (hWnd); return TRUE; } static L_VOID AgeDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL AgeDlg_OnPaint(HWND hWnd) { HDC hDC; PAINTSTRUCT ps; RECT rcRect; HBRUSH hBrush; LPAGEDLGDATA pAgeDlgData; pAgeDlgData = (LPAGEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_AGE_CLR_TXT), &rcRect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_AGE_CLR_TXT), &ps); hBrush = CreateSolidBrush(pAgeDlgData->crColors[pAgeDlgData->uCurrentTab]); FillRect(hDC, &rcRect, hBrush); DeleteBrush(hBrush); EndPaint(GetDlgItem(hWnd, IDC_AGE_CLR_TXT), &ps); return FALSE; } static L_BOOL AgeDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPAGEDLGDATA pAgeDlgData; pCHILDDATA pData; HWND hWndParent; L_INT nValue; L_INT nRangeMax[] = {200, 100, 100, 1000, 1000, 50}; L_INT nRangeMin[] = {2, 1, 1, 1, 1, 1}; L_INT nIndex; RECT rcRgn; COLORREF crColor; L_BOOL bCheck; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pAgeDlgData = (LPAGEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pData = LOCKCHILDDATA (hWndParent); L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRgn); if (nID >= pAgeDlgData->nEdtBaseID && nID < pAgeDlgData->nEdtBaseID + pAgeDlgData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pAgeDlgData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nID + pAgeDlgData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if (nValue == (L_INT)pAgeDlgData->uMaximumLength) return FALSE; pAgeDlgData->uMaximumLength = nValue; break; case 1: if (nValue == (L_INT)pAgeDlgData->uVerticalNum) return FALSE; pAgeDlgData->uVerticalNum = nValue; break; case 2: if (nValue == (L_INT)pAgeDlgData->uHorizontalNum) return FALSE; pAgeDlgData->uHorizontalNum = nValue; break; case 3: if (nValue == (L_INT)pAgeDlgData->uDustDensity) return FALSE; pAgeDlgData->uDustDensity = nValue; break; case 4: if (nValue == (L_INT)pAgeDlgData->uPitsDensity) return FALSE; pAgeDlgData->uPitsDensity = nValue; break; case 5: if (nValue == (L_INT)pAgeDlgData->uMaximumSize) return FALSE; pAgeDlgData->uMaximumSize = nValue; break; } L_ApplyFilter (hWnd); } } if (nID >= pAgeDlgData->nChkBaseID && nID < pAgeDlgData->nChkBaseID + pAgeDlgData->nCheckNum) { bCheck = Button_GetCheck(hWndCtl); pAgeDlgData->uFlags ^= (1 << (nID - pAgeDlgData->nChkBaseID)); nValue = nID - pAgeDlgData->nChkBaseID; switch(nValue) { case 0: for (nIndex = 0; nIndex < 2; nIndex++) { EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nIndex), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nIndex), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + nIndex), bCheck); } if (Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_VERT_CHK)) || Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_HORZ_CHK))) bCheck = TRUE; break; case 1: EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + 2), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + 2), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + 2), bCheck); if (Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_VERT_CHK)) || Button_GetCheck(GetDlgItem(hWnd, IDC_AGE_HORZ_CHK))) bCheck = TRUE; break; case 2: EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + 3), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + 3), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + 3), bCheck); break; case 3: for (nIndex = 4; nIndex < 6; nIndex++) { EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nSldBaseID + nIndex), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nEdtBaseID + nIndex), bCheck); EnableWindow(GetDlgItem(hWnd, pAgeDlgData->nTxtBaseID + nIndex), bCheck); } break; } EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLRT_TXT), bCheck); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_COM), bCheck); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_BTN), bCheck && pAgeDlgData->uCombCur[pAgeDlgData->uCurrentTab]); InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } switch(nID) { case IDC_AGE_CLR_BTN: crColor = pAgeDlgData->crColors[pAgeDlgData->uCurrentTab]; pAgeDlgData->crColors[pAgeDlgData->uCurrentTab] = ShowColorDialog(hWnd, crColor); if (pAgeDlgData->crColors[pAgeDlgData->uCurrentTab] != crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_AGE_CLR_COM: if (uCodeNotify == CBN_SELCHANGE) { if (pAgeDlgData->uCombCur[pAgeDlgData->uCurrentTab] == ComboBox_GetCurSel(hWndCtl)) return FALSE; pAgeDlgData->uCombCur[pAgeDlgData->uCurrentTab] = ComboBox_GetCurSel(hWndCtl); pAgeDlgData->uFlags = pAgeDlgData->uFlags ^ (1 << (4 + pAgeDlgData->uCurrentTab)); EnableWindow(GetDlgItem(hWnd, IDC_AGE_CLR_BTN), pAgeDlgData->uCombCur[pAgeDlgData->uCurrentTab]); InvalidateRect(hWndCtl, NULL, FALSE); 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 AgeDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPAGEDLGDATA pAgeDlgData = (LPAGEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); return (SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pAgeDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE)); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPAGEDLGDATA pAgeDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pAgeDlgData = (LPAGEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pAgeDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); nRet = L_AgingBitmap(&pData->LeadBitmap, pAgeDlgData->uHorizontalNum, pAgeDlgData->uVerticalNum, pAgeDlgData->uMaximumLength, pAgeDlgData->uDustDensity, pAgeDlgData->uPitsDensity, pAgeDlgData->uMaximumSize, pAgeDlgData->crColors[0], pAgeDlgData->crColors[1], pAgeDlgData->crColors[2], pAgeDlgData->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 ; } } }