/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL NumDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify); static L_BOOL NumDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL NumDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID NumDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK MathmaticalDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, NumDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, NumDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, NumDlg_OnHScroll); HANDLE_MSG (hWnd, WM_TIMER, NumDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static L_BOOL NumDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPNUMDLGDATA pNumDlgData; HWND hWndParent; pCHILDDATA pData; RECT rcRgn; L_INT nRangeMax[] = {255}; L_INT nRangeMin[] = {0}; L_INT nPosInit [] = {50}; L_TCHAR * cTypeString[] ={TEXT("AND"), TEXT("OR"), TEXT("XOR"), TEXT("ADD"), TEXT("Subtract Factor"), TEXT("Subtract Value"), TEXT("Differance"), TEXT("Multiply"), TEXT("Divide factor"), TEXT("Divide Value"), TEXT("Avarge"), TEXT("MIN"), TEXT("MAX")}; L_TCHAR * cInOutString[] = {TEXT("NOP"), TEXT("NOT"), TEXT("ZERO"), TEXT("ONE")}; L_TCHAR * cChnString[] = {TEXT("Master"), TEXT("Red"), TEXT("Green"), TEXT("Blue")}; L_INT nSlider; MoveDialogToMiddle(hWnd); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pNumDlgData = (LPNUMDLGDATA)lParam; if (Is16Bit(&pData->LeadBitmap)) { if (pData->LeadBitmap.BitsPerPixel == 12) { nRangeMax[0] = 0xFFF; nPosInit[0] = 50 * 16; } else { nRangeMax[0] = 0xFFFF; nPosInit[0] = 50 * 257; } } if(pData->LeadBitmap.pLUT && pData->LeadBitmap.Flags.UseLUT) { nRangeMax[0] = 0xFF; nPosInit[0] = 50; } pNumDlgData->nCurPos = 3; pNumDlgData->nPos[0] = pNumDlgData->nPos[1] = pNumDlgData->nPos[2] = pNumDlgData->nPos[3] = nPosInit[0]; SetWindowLong(hWnd,GWL_USERDATA,(LONG)pNumDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pNumDlgData->Bitmap); L_GetBitmapRgnBoundsClip(&pNumDlgData->Bitmap, NULL, &rcRgn); for (nSlider = 0; nSlider < 13; nSlider++) ComboBox_AddString(GetDlgItem(hWnd, IDC_NUM_TYPE_COM), cTypeString[nSlider]); for (nSlider = 0; nSlider < 4; nSlider++) { ComboBox_AddString(GetDlgItem(hWnd, IDC_NUM_INP_COM), cInOutString[nSlider]); ComboBox_AddString(GetDlgItem(hWnd, IDC_NUM_OUT_COM), cInOutString[nSlider]); ComboBox_AddString(GetDlgItem(hWnd, IDC_NUM_CHN_COM), cChnString[nSlider]); } for (nSlider = IDC_NUM_TYPE_COM; nSlider < IDC_NUM_TYPE_COM + 4; nSlider++) { ComboBox_SetCurSel(GetDlgItem(hWnd, nSlider), 0); } StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_NUM_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); pNumDlgData->nSldBaseID = IDC_NUM_FAC_SLD; pNumDlgData->nEdtBaseID = IDC_NUM_FAC_EDT; pNumDlgData->nSlideNum = 1; pNumDlgData->uFactor = 1; pNumDlgData->uFlag = 0; for (nSlider = 0; nSlider < pNumDlgData->nSlideNum; nSlider++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pNumDlgData->nSldBaseID + nSlider), FALSE, nRangeMin[nSlider],nRangeMax[nSlider]); SetDlgItemInt(hWnd, pNumDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], FALSE); SetNumericEditBox(GetDlgItem(hWnd, pNumDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return ( TRUE ); } static L_VOID NumDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL NumDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT codeNotify) { HWND hWndParent; L_INT nRangeMax[] = {255}; L_INT nRangeMin[] = {1}; HWND hCtl; pCHILDDATA pData; L_INT nValue; L_INT nIndex; LPNUMDLGDATA pNumDlgData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pNumDlgData = (LPNUMDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if (Is16Bit(&pData->LeadBitmap)) { if (pData->LeadBitmap.BitsPerPixel == 12) nRangeMax[0] = 0xFFF; else nRangeMax[0] = 0xFFFF; } if(pData->LeadBitmap.pLUT && pData->LeadBitmap.Flags.UseLUT) { nRangeMax[0] = 0xFF; } if (nID >= pNumDlgData->nEdtBaseID && nID < pNumDlgData->nEdtBaseID + pNumDlgData->nSlideNum) { if(codeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL,FALSE); hCtl = GetDlgItem(hWnd,nID + pNumDlgData->nSlideNum); nIndex = nID - pNumDlgData->nEdtBaseID; Trackbar_SetPos (hCtl, TRUE, nValue); switch (nIndex) { case 0: if(pNumDlgData->uFactor == (L_UINT)nValue) return TRUE; pNumDlgData->uFactor = pNumDlgData->nPos[pNumDlgData->nCurPos] = nValue; break; } L_ApplyFilter(hWnd); } } switch (nID) { case IDC_NUM_CHN_COM: if (codeNotify == CBN_SELCHANGE) { pNumDlgData->uFlag &= 0x0000FFF0; nIndex = ComboBox_GetCurSel(hWndCtl) << 0; pNumDlgData->uFlag |= nIndex; InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_NUM_TYPE_COM: if (codeNotify == CBN_SELCHANGE) { switch(ComboBox_GetCurSel(hWndCtl)) { case 7: pNumDlgData->nCurPos = 0; pNumDlgData->uFactor = pNumDlgData->nPos[pNumDlgData->nCurPos]; Trackbar_SetTheRange(GetDlgItem(hWnd, IDC_NUM_FAC_SLD), TRUE, 0, 100 * nRangeMax[0]); SetDlgItemInt(hWnd, IDC_NUM_FAC_EDT, pNumDlgData->uFactor, TRUE); EditNumericEditBox(GetDlgItem(hWnd, IDC_NUM_FAC_EDT), 0, 100 * nRangeMax[0], 1, 0, FALSE, EDT_MODFY_MAX | EDT_MODFY_MIN); break; case 8: pNumDlgData->nCurPos = 1; pNumDlgData->uFactor = pNumDlgData->nPos[pNumDlgData->nCurPos]; Trackbar_SetTheRange(GetDlgItem(hWnd, IDC_NUM_FAC_SLD), TRUE, 1, 100 * nRangeMax[0]); SetDlgItemInt(hWnd, IDC_NUM_FAC_EDT, pNumDlgData->uFactor, TRUE); EditNumericEditBox(GetDlgItem(hWnd, IDC_NUM_FAC_EDT), 1, 100 * nRangeMax[0], 1, 0, FALSE, EDT_MODFY_MAX | EDT_MODFY_MIN); break; case 4: case 6: case 10: pNumDlgData->nCurPos = 2; pNumDlgData->uFactor = pNumDlgData->nPos[pNumDlgData->nCurPos]; Trackbar_SetTheRange(GetDlgItem(hWnd, IDC_NUM_FAC_SLD), TRUE, 0, 2 * nRangeMax[0]); SetDlgItemInt(hWnd, IDC_NUM_FAC_EDT, pNumDlgData->uFactor, TRUE); EditNumericEditBox(GetDlgItem(hWnd, IDC_NUM_FAC_EDT), 0, 2 * nRangeMax[0], 1, 0, FALSE, EDT_MODFY_MAX | EDT_MODFY_MIN); break; default: pNumDlgData->nCurPos = 3; pNumDlgData->uFactor = pNumDlgData->nPos[pNumDlgData->nCurPos]; Trackbar_SetTheRange(GetDlgItem(hWnd, IDC_NUM_FAC_SLD), TRUE, 0, nRangeMax[0]); SetDlgItemInt(hWnd, IDC_NUM_FAC_EDT, pNumDlgData->uFactor, TRUE); EditNumericEditBox(GetDlgItem(hWnd, IDC_NUM_FAC_EDT), 0, nRangeMax[0], 1, 0, FALSE, EDT_MODFY_MAX | EDT_MODFY_MIN); break; } pNumDlgData->uFlag &= 0x0000F0FF; nIndex = ComboBox_GetCurSel(hWndCtl) << 8; pNumDlgData->uFlag |= nIndex; InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_NUM_OUT_COM: if (codeNotify == CBN_SELCHANGE) { pNumDlgData->uFlag &= 0x00000FFF; nIndex = ComboBox_GetCurSel(hWndCtl) << 12; pNumDlgData->uFlag |= nIndex; InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_NUM_INP_COM: if (codeNotify == CBN_SELCHANGE) { pNumDlgData->uFlag &= 0x00000F0F; nIndex = ComboBox_GetCurSel(hWndCtl) << 4; pNumDlgData->uFlag |= nIndex; 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 NumDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPNUMDLGDATA pNumDlgData = (LPNUMDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); return (SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pNumDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE)); } static L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPNUMDLGDATA pNumDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pNumDlgData = (LPNUMDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pNumDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_ApplyMathLogicBitmap(&pData->LeadBitmap, pNumDlgData->uFactor, pNumDlgData->uFlag); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }