#include "ImgPF.h" static L_BOOL RmnMsc_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID RmnMsc_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_VOID RmnMsc_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_VOID RmnMsc_OnTimer (HWND hWnd, L_INT nID); static L_BOOL RmnMsc_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK RmnMscDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG(hWnd, WM_INITDIALOG, RmnMsc_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, RmnMsc_OnCommand); HANDLE_MSG(hWnd, WM_PAINT, RmnMsc_OnPaint); HANDLE_MSG(hWnd, WM_HSCROLL, RmnMsc_OnHScroll); HANDLE_MSG(hWnd, WM_TIMER, RmnMsc_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static L_BOOL RmnMsc_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM Data) { HWND hWndParent; pCHILDDATA pData; LPRMNMSCDLGDATA pRmnmscDlgData; L_INT nIndex; L_INT nRangeMax[] = {0, 0, 15, 0xff}; L_INT nRangeMin[] = {1, 1, 1, 0}; L_INT nPosInit[] = {0, 0, 3, 0}; RECT rcRect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pRmnmscDlgData = (LPRMNMSCDLGDATA)(Data); memset(pRmnmscDlgData, 0, sizeof(RMNMSCDLGDATA)); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pRmnmscDlgData); MemorizeAndCopyBitmap (hWndParent, &pRmnmscDlgData->LeadBitmap); MoveDialogToMiddle(hWnd); L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRect); if (Is16Bit(&pData->LeadBitmap)) nRangeMax[3] = 0xffff; nRangeMax[0] = /*RECTWIDTH(&rcRect) / 2;*/ nRangeMax[1] = /*RECTHEIGHT(&rcRect) / 2; //*/(L_INT)sqrt(RECTWIDTH(&rcRect) * RECTWIDTH(&rcRect) + RECTHEIGHT(&rcRect) * RECTHEIGHT(&rcRect)) / 4; nPosInit[0] = max(1, nRangeMax[0] / 10); nPosInit[1] = max(1, nRangeMax[1] / 10); pRmnmscDlgData->nEdtBaseID = IDC_RMNMSC_WDT_EDT; pRmnmscDlgData->nSldBaseID = IDC_RMNMSC_WDT_SLD; pRmnmscDlgData->nSlideNum = 4; pRmnmscDlgData->uRomanType = RMN_BOTH; pRmnmscDlgData->uShadowType = (MSCT_SHADOWGRAY >> 4); pRmnmscDlgData->crColor = RGB(0, 0, 0); pRmnmscDlgData->uShadowAngle = SHADOW_SE; pRmnmscDlgData->uTileHeight = nPosInit[0]; pRmnmscDlgData->uTileWidth = nPosInit[1]; pRmnmscDlgData->uBorderWidth = nPosInit[2]; pRmnmscDlgData->uShadowThreshold = nPosInit[3]; StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bKillProgress = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_RMNMSC_PROG); Progress_SetRange(GetDlgItem(hWnd, IDC_RMNMSC_PROG), 0, 100); Progress_SetPos (GetDlgItem(hWnd, IDC_RMNMSC_PROG), 0); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHP_COM), TEXT("Rectangle")); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHP_COM), TEXT("Circle")); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHP_COM), TEXT("Both")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_RMNMSC_SHP_COM), 2); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_COM), TEXT("None")); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_COM), TEXT("Colored")); ComboBox_AddString(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_COM), TEXT("Gray")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_COM), 2); for(nIndex = 0; nIndex < pRmnmscDlgData->nSlideNum; nIndex++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pRmnmscDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nIndex], nRangeMax[nIndex]); SetNumericEditBox(GetDlgItem(hWnd, pRmnmscDlgData->nEdtBaseID + nIndex), nRangeMin[nIndex], nRangeMax[nIndex], 1, 0, FALSE); SetDlgItemInt(hWnd, pRmnmscDlgData->nEdtBaseID + nIndex, nPosInit[nIndex], FALSE); } CreateAngleControl(GetDlgItem(hWnd, IDC_RMNMSC_ANG_TXT), IDC_RMNMSC_ANG_EDT, FROM_0_TO_8, 1, APPLY_ON_MOVE); SetDlgItemInt(hWnd, IDC_RMNMSC_ANG_EDT, 7, TRUE); DrawAngleControl(GetDlgItem(hWnd, IDC_RMNMSC_ANG_TXT), 7); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); L_ApplyFilter(hWnd); return TRUE; } static L_VOID RmnMsc_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID RmnMsc_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { HWND hWndParent; LPRMNMSCDLGDATA pRmnmscDlgData; pCHILDDATA pData; L_INT nValue, nIndex; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pRmnmscDlgData = (LPRMNMSCDLGDATA)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; case IDC_RMNMSC_ANG_EDT: nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); if (nValue == 8) nValue = 0; if ((uCodeNotify == EN_CHANGE) && ((L_UINT)nValue != pRmnmscDlgData->uShadowAngle)) { pRmnmscDlgData->uShadowAngle = nValue; DrawAngleControl(GetDlgItem(hWnd, IDC_RMNMSC_ANG_TXT), nValue); L_ApplyFilter(hWnd); } break; case IDC_RMNMSC_CLR_BTN: crColor = pRmnmscDlgData->crColor; pRmnmscDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pRmnmscDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_RMNMSC_SHDW_COM: if(uCodeNotify == CBN_SELCHANGE) { nIndex = ComboBox_GetCurSel(hWndCtl); if(pRmnmscDlgData->uShadowType == (L_UINT)nIndex) return; EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_ANG_EDT ), nIndex); EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_ANG_TXT), nIndex); EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_EDT), nIndex); EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_SHDW_SLD), nIndex); pRmnmscDlgData->uShadowType = nIndex; L_ApplyFilter(hWnd); } break; case IDC_RMNMSC_SHP_COM: if(uCodeNotify == CBN_SELCHANGE) { nIndex = ComboBox_GetCurSel(hWndCtl); if(pRmnmscDlgData->uRomanType == (L_UINT)nIndex) return; EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_HGT_EDT), nIndex != 1); EnableWindow(GetDlgItem(hWnd, IDC_RMNMSC_HGT_SLD), nIndex != 1); pRmnmscDlgData->uRomanType = nIndex; L_ApplyFilter(hWnd); } break; } if(nID >= (L_INT)pRmnmscDlgData->nEdtBaseID && nID <(L_INT)(pRmnmscDlgData->nEdtBaseID + pRmnmscDlgData->nSlideNum)) { if(uCodeNotify == EN_CHANGE) { nIndex = nID - pRmnmscDlgData->nEdtBaseID; nValue = GetDlgItemInt(hWnd, nID, NULL, FALSE); Trackbar_SetPos(GetDlgItem(hWnd, nID + pRmnmscDlgData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if(pRmnmscDlgData->uTileWidth == (L_UINT)nValue) return; pRmnmscDlgData->uTileWidth = nValue; break; case 1: if(pRmnmscDlgData->uTileHeight == (L_UINT)nValue) return; pRmnmscDlgData->uTileHeight = nValue; break; case 2: if(pRmnmscDlgData->uBorderWidth == (L_UINT)nValue) return; pRmnmscDlgData->uBorderWidth = nValue; break; case 3: if(pRmnmscDlgData->uShadowThreshold == (L_UINT)nValue) return; pRmnmscDlgData->uShadowThreshold = nValue; break; } L_ApplyFilter(hWnd); } } } static L_BOOL RmnMsc_OnPaint(HWND hWnd) { HBRUSH hBrush; LPRMNMSCDLGDATA pRmnmscDlgData; PAINTSTRUCT ps; HDC hDC; RECT rcRect; pRmnmscDlgData = (LPRMNMSCDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_RMNMSC_CLR_TXT), &rcRect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_RMNMSC_CLR_TXT), &ps); hBrush = CreateSolidBrush(pRmnmscDlgData->crColor); FillRect(hDC, &rcRect, hBrush); DeleteBrush(hBrush); EndPaint(GetDlgItem(hWnd, IDC_RMNMSC_CLR_TXT), &ps); return FALSE; } static L_VOID RmnMsc_OnHScroll(HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPRMNMSCDLGDATA pRmnmscDlgData = (LPRMNMSCDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pRmnmscDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), FALSE); } static L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPRMNMSCDLGDATA pRmnmscDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pRmnmscDlgData = (LPRMNMSCDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = (pCHILDDATA)GetWindowLong(hWndParent, GWL_USERDATA); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pRmnmscDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); nRet = L_RomanMosaicBitmap(&pData->LeadBitmap, max(2, pRmnmscDlgData->uTileWidth), max(2, pRmnmscDlgData->uTileHeight), pRmnmscDlgData->uBorderWidth, pRmnmscDlgData->uShadowAngle, pRmnmscDlgData->uShadowThreshold, pRmnmscDlgData->crColor, pRmnmscDlgData->uRomanType | (pRmnmscDlgData->uShadowType << 4)); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, TRUE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }