#include "ImgPF.h" static L_BOOL HSBDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID HSBDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, UINT CodeNotify); static L_VOID HSBDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID HSBDlg_OnTimer (HWND hWnd, L_INT nID); L_BOOL CALLBACK HSBDlgProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { HANDLE_MSG(hWnd, WM_INITDIALOG, HSBDlg_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, HSBDlg_OnCommand); HANDLE_MSG(hWnd, WM_HSCROLL, HSBDlg_OnHScroll); HANDLE_MSG(hWnd, WM_TIMER, HSBDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL HSBDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { HWND hListBox; LPHSBDLGDATA pHsbDlgData; L_INT nCounter; pCHILDDATA pData; HWND hWndParent; L_INT nSlider; L_INT nRangeMax[] = {180, 100, 100, 359, 359, 359, 359}; L_INT nRangeMin[] = {-180, -100, -100, 0, 0, 0, 0}; L_INT nPosInit [] = {0, 0, 0, 0, 359, 90, 180}; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pHsbDlgData = (LPHSBDLGDATA)lParam; MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_HSB_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pHsbDlgData->LeadBitmap); pHsbDlgData->nSldBaseID = IDC_HSB_HUE_SLD; pHsbDlgData->nEdtBaseID = IDC_HSB_HUE_EDT; pHsbDlgData->nSlideNum = 7; hListBox = (HWND) GetDlgItem(hWnd, IDC_HSB_OTPT_COM); ComboBox_InsertString (hListBox, 0, TEXT("Master")); ComboBox_InsertString (hListBox, 1, TEXT("Color 1")); ComboBox_InsertString (hListBox, 2, TEXT("Color 2")); ComboBox_InsertString (hListBox, 3, TEXT("Color 3")); ComboBox_InsertString (hListBox, 4, TEXT("Color 4")); ComboBox_InsertString (hListBox, 5, TEXT("Color 5")); ComboBox_InsertString (hListBox, 6, TEXT("Color 6")); ComboBox_SetCurSel(hListBox, 0); for(nCounter = 0; nCounter <= 6; nCounter++) { pHsbDlgData->pHsb[nCounter].nIntensity = pHsbDlgData->pHsb[nCounter].nSaturation = pHsbDlgData->pHsb[nCounter].nHue = 0; pHsbDlgData->pHsb[nCounter].nOuterLow = nPosInit[3]; pHsbDlgData->pHsb[nCounter].nOuterHigh = nPosInit[4]; pHsbDlgData->pHsb[nCounter].nInnerLow = nPosInit[5]; pHsbDlgData->pHsb[nCounter].nInnerHigh = nPosInit[6]; pHsbDlgData->bNeg[nCounter] = FALSE; } SetWindowLong(hWnd, GWL_USERDATA, (LONG)pHsbDlgData); for (nSlider = 0; nSlider < pHsbDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + nSlider), TRUE, nPosInit[nSlider]); SetNumericEditBox(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); } EnableWindow(GetDlgItem(hWnd, IDC_HSB_NGT_CHK), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 3), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 4), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 5), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 6), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 3), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 4), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 5), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 6), FALSE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return TRUE; } static L_VOID HSBDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID HSBDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPHSBDLGDATA pHsbDlgData; L_UINT uCurrentColor; L_INT nValue; pCHILDDATA pData; HWND hCtl; HWND hWndParent; L_INT nRangeMax[] = {180, 100, 100, 359, 359, 359 , 359}; L_INT nRangeMin[] = {-180, -100, -100, 0, 0, 0, 0}; L_INT nIndex; pHsbDlgData = (LPHSBDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); uCurrentColor = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_HSB_OTPT_COM)); nRangeMax[3] = min(pHsbDlgData->pHsb[uCurrentColor].nOuterHigh - 1, pHsbDlgData->pHsb[uCurrentColor].nInnerLow - 1); nRangeMin[4] = max(pHsbDlgData->pHsb[uCurrentColor].nOuterLow + 1, pHsbDlgData->pHsb[uCurrentColor].nInnerHigh + 1); nRangeMin[5] = pHsbDlgData->pHsb[uCurrentColor].nOuterLow + 1; nRangeMax[6] = pHsbDlgData->pHsb[uCurrentColor].nOuterHigh - 1; nRangeMax[5] = pHsbDlgData->pHsb[uCurrentColor].nInnerHigh - 1; nRangeMin[6] = pHsbDlgData->pHsb[uCurrentColor].nInnerLow + 1; switch (nID) { case IDC_HSB_NGT_CHK: if(Button_GetCheck(GetDlgItem(hWnd, IDC_HSB_NGT_CHK))) { if(pHsbDlgData->bNeg[uCurrentColor]) break; SetWindowText(GetDlgItem(hWnd, IDC_HSB_OOTR_GRP), TEXT("Inner Range")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_IITR_GRP), TEXT("Outer Range")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_OLOW_TXT), TEXT("High")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_OHIG_TXT), TEXT("Low")) ; SetWindowText(GetDlgItem(hWnd, IDC_HSB_ILOW_TXT), TEXT("High")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_IHIG_TXT), TEXT("Low")) ; pHsbDlgData->bNeg[uCurrentColor] = TRUE; L_ApplyFilter (hWnd); } else { if(!(pHsbDlgData->bNeg[uCurrentColor])) break; SetWindowText(GetDlgItem(hWnd, IDC_HSB_OOTR_GRP), TEXT("Outer Range")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_IITR_GRP), TEXT("Inner Range")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_OLOW_TXT), TEXT("Low")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_OHIG_TXT), TEXT("High")) ; SetWindowText(GetDlgItem(hWnd, IDC_HSB_ILOW_TXT), TEXT("Low")); SetWindowText(GetDlgItem(hWnd, IDC_HSB_IHIG_TXT), TEXT("High")) ; pHsbDlgData->bNeg[uCurrentColor] = 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; case IDC_HSB_OTPT_COM: if (uCodeNotify == CBN_SELCHANGE) { if(uCurrentColor == 0) { EnableWindow(GetDlgItem(hWnd, IDC_HSB_NGT_CHK), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 3), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 4), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 5), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 6), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 3), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 4), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 5), FALSE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 6), FALSE); } else { EnableWindow(GetDlgItem(hWnd, IDC_HSB_NGT_CHK), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 3), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 4), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 5), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nEdtBaseID + 6), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 3), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 4), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 5), TRUE); EnableWindow(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 6), TRUE); } if(pHsbDlgData->bNeg[uCurrentColor]) { Button_SetCheck(GetDlgItem(hWnd, IDC_HSB_NGT_CHK), TRUE); } else { Button_SetCheck(GetDlgItem(hWnd, IDC_HSB_NGT_CHK), FALSE); } SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 0, pHsbDlgData->pHsb[uCurrentColor].nHue , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 1, pHsbDlgData->pHsb[uCurrentColor].nSaturation , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 2, pHsbDlgData->pHsb[uCurrentColor].nIntensity , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 3, pHsbDlgData->pHsb[uCurrentColor].nOuterLow , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 4, pHsbDlgData->pHsb[uCurrentColor].nOuterHigh , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 5, pHsbDlgData->pHsb[uCurrentColor].nInnerLow , TRUE); SetDlgItemInt(hWnd, pHsbDlgData->nEdtBaseID + 6, pHsbDlgData->pHsb[uCurrentColor].nInnerHigh , TRUE); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 0), TRUE, pHsbDlgData->pHsb[uCurrentColor].nHue); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 1), TRUE, pHsbDlgData->pHsb[uCurrentColor].nSaturation); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 2), TRUE, pHsbDlgData->pHsb[uCurrentColor].nIntensity); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 3), TRUE, pHsbDlgData->pHsb[uCurrentColor].nOuterLow ); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 4), TRUE, pHsbDlgData->pHsb[uCurrentColor].nOuterHigh ); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 5), TRUE, pHsbDlgData->pHsb[uCurrentColor].nInnerLow ); Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + 6), TRUE, pHsbDlgData->pHsb[uCurrentColor].nInnerHigh ); InvalidateRect(hWndCtl, NULL, FALSE); } break; } if (nID >= pHsbDlgData->nEdtBaseID && nID < pHsbDlgData->nEdtBaseID + pHsbDlgData->nSlideNum) { if ((uCodeNotify == EN_CHANGE)) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); hCtl = GetDlgItem(hWnd, nID + pHsbDlgData->nSlideNum); nIndex = nID - pHsbDlgData->nEdtBaseID; Trackbar_SetPos(hCtl, TRUE, nValue); if (nValue < nRangeMin[nIndex]) { nValue = nRangeMin[nIndex]; SetDlgItemInt(hWnd, nID, nRangeMin[nIndex], TRUE); } if (nValue > nRangeMax[nIndex]) { nValue = nRangeMax[nIndex]; SetDlgItemInt(hWnd, nID, nRangeMax[nIndex], TRUE); } switch(nIndex) { case 0: if (pHsbDlgData->pHsb[uCurrentColor].nHue == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nHue = nValue; break; case 1: if (pHsbDlgData->pHsb[uCurrentColor].nSaturation == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nSaturation = nValue; break; case 2: if (pHsbDlgData->pHsb[uCurrentColor].nIntensity == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nIntensity = nValue; break; case 3: if (pHsbDlgData->pHsb[uCurrentColor].nOuterLow == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nOuterLow = nValue; break; case 4: if (pHsbDlgData->pHsb[uCurrentColor].nOuterHigh == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nOuterHigh = nValue; break; case 5: if (pHsbDlgData->pHsb[uCurrentColor].nInnerLow == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nInnerLow = nValue; break; case 6: if (pHsbDlgData->pHsb[uCurrentColor].nInnerHigh == nValue) return; pHsbDlgData->pHsb[uCurrentColor].nInnerHigh = nValue; break; } Trackbar_SetPos(GetDlgItem(hWnd, pHsbDlgData->nSldBaseID + nIndex), TRUE, nValue); L_ApplyFilter (hWnd); } } } static L_VOID HSBDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPHSBDLGDATA pHsbDlgData = (LPHSBDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pHsbDlgData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0, i; HWND hWndParent; LPHSBDLGDATA pHsbDlgData; HSIDATA HsiData[6]; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pHsbDlgData = (LPHSBDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pHsbDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); HsiData[0].uStructSize = sizeof(HSIDATA); for(i = 0; i < 6; i++) { HsiData[i].nHue = pHsbDlgData->pHsb[i + 1].nHue * 100; HsiData[i].nSaturation = pHsbDlgData->pHsb[i + 1].nSaturation * 10; HsiData[i].nIntensity = pHsbDlgData->pHsb[i + 1].nIntensity * 10; if(pHsbDlgData->bNeg[i + 1]) { HsiData[i].nOuterLow = pHsbDlgData->pHsb[i + 1].nInnerHigh; HsiData[i].nOuterHigh = pHsbDlgData->pHsb[i + 1].nInnerLow; HsiData[i].nInnerLow = pHsbDlgData->pHsb[i + 1].nOuterHigh; HsiData[i].nInnerHigh = pHsbDlgData->pHsb[i + 1].nOuterLow; } else { HsiData[i].nOuterLow = pHsbDlgData->pHsb[i + 1].nOuterLow; HsiData[i].nOuterHigh = pHsbDlgData->pHsb[i + 1].nOuterHigh; HsiData[i].nInnerLow = pHsbDlgData->pHsb[i + 1].nInnerLow; HsiData[i].nInnerHigh = pHsbDlgData->pHsb[i + 1].nInnerHigh; } } nRet = L_ChangeHueSatIntBitmap(&pData->LeadBitmap, pHsbDlgData->pHsb[0].nHue * 100, pHsbDlgData->pHsb[0].nSaturation * 10, pHsbDlgData->pHsb[0].nIntensity * 10, HsiData, 6); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }