/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL CubismDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL CubismDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL CubismDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID CubismDialog_OnTimer (HWND hWnd, L_INT nID); static L_BOOL CubismDialog_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); L_INT nSpaceRange; L_BOOL CALLBACK CubismDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, CubismDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, CubismDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, CubismDialog_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, CubismDialog_OnPaint); HANDLE_MSG (hWnd, WM_TIMER, CubismDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL CubismDialog_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPCUBISMDATA pCubData; pCHILDDATA pData; HWND hWndParent; RECT rcRgn; L_INT nRangeMin[] = {1, 2, -1000, -360}; L_INT nRangeMax[] = {500, 500, 1000, 360}; L_INT nPosInit [] = {90, 200, 0, 0}; L_INT nWidthRange; L_INT nHeightRange; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pCubData = (LPCUBISMDATA) lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pCubData); ///Width controls StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_CBS_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pCubData->Bitmap); pCubData->uSpace = nPosInit[0]; pCubData->uLength = nPosInit[1]; pCubData->nBrightness = nPosInit[2]; pCubData->nAngle = nPosInit[3]; pCubData->crColor = RGB(0,0,0); pCubData->uFlags = CUB_BKG | CUB_SQR | CUB_RAND; L_GetBitmapRgnBounds(&pData->LeadBitmap,NULL, &rcRgn); nWidthRange = (rcRgn.right - rcRgn.left - 1); nHeightRange = (rcRgn.bottom - rcRgn.top - 1); nRangeMax[0] = min(nWidthRange, nHeightRange); pCubData->nSlideNum = 4; pCubData->nSldBaseID = IDC_CBS_SPC_SLD; pCubData->nEdtBaseID = IDC_CBS_SPC_EDT; pCubData->nRdoBaseID = IDC_CBS_SQR_RAD; CreateAngleControl(GetDlgItem(hWnd, IDC_CBS_ANGL_SLD), IDC_CBS_ANGL_EDT, FROM_0_TO_360, 1, APPLY_ON_MOVE); for (nSlider = 0; nSlider < pCubData->nSlideNum; nSlider ++) { if (nSlider != 3) Trackbar_SetRange(GetDlgItem(hWnd, pCubData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pCubData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pCubData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } Button_SetCheck(GetDlgItem(hWnd, IDC_CBS_BKG_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_CBS_SQR_RAD), TRUE); EnableWindow(GetDlgItem(hWnd, IDC_CBS_ANGL_EDT), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_CBS_ANGL_SLD), FALSE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); L_ApplyFilter (hWnd); return TRUE; } static L_VOID CubismDialog_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL CubismDialog_OnPaint(HWND hWnd) { HDC hdc; PAINTSTRUCT ps; RECT Rect; HBRUSH hbrush; LPCUBISMDATA pCubData; pCubData = (LPCUBISMDATA) GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_CBS_BKG_TXT), &Rect); hdc = BeginPaint(GetDlgItem(hWnd, IDC_CBS_BKG_TXT),&ps); hbrush = CreateSolidBrush(pCubData->crColor); FillRect(hdc, &Rect,hbrush); DeleteObject (hbrush); EndPaint(GetDlgItem(hWnd, IDC_CBS_BKG_TXT), &ps); return FALSE; } static L_BOOL CubismDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPCUBISMDATA pCubData = (LPCUBISMDATA) GetWindowLong(hWnd, GWL_USERDATA); pCHILDDATA pData; HWND hWndParent; L_INT nValue; L_INT nRangeMin [] = {1, 2, -1000, -360}; L_INT nRangeMax [] = {0, 500, 1000, 360}; L_INT nIndex; RECT rcRgn; L_INT nWidthRange; L_INT nHeightRange; L_BOOL bOri; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pCubData = (LPCUBISMDATA) GetWindowLong(hWnd, GWL_USERDATA); pData = LOCKCHILDDATA (hWndParent); L_GetBitmapRgnBounds(&pData->LeadBitmap,NULL, &rcRgn); nWidthRange = (rcRgn.right - rcRgn.left - 1); nHeightRange = (rcRgn.bottom - rcRgn.top - 1); nRangeMax[0] = min(nWidthRange, nHeightRange); switch(nID) { case IDC_CBS_ANGL_EDT: nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); if ((uCodeNotify == EN_CHANGE) && nValue != pCubData->nAngle) { pCubData->nAngle = nValue; DrawAngleControl(GetDlgItem(hWnd, IDC_CBS_ANGL_SLD), nValue); L_ApplyFilter(hWnd); } break; case IDC_CBS_CLR_BTN: crColor = pCubData->crColor; pCubData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pCubData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDC_CBS_ORI_CHK: bOri = Button_GetCheck(GetDlgItem(hWnd, IDC_CBS_ORI_CHK)); pCubData->uFlags = ((pCubData->uFlags & 0xF0FF) | (bOri ? CUB_ORNT : CUB_RAND)); EnableWindow(GetDlgItem(hWnd, IDC_CBS_ANGL_EDT), bOri); EnableWindow(GetDlgItem(hWnd, IDC_CBS_ANGL_SLD), bOri); 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; } if (nID >= pCubData->nEdtBaseID && nID < pCubData->nEdtBaseID + pCubData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd,nID, NULL, TRUE); nIndex = nID - pCubData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nID + pCubData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if (nValue == (L_INT)pCubData->uSpace) return FALSE; pCubData->uSpace = nValue; break; case 1: if (nValue == (L_INT)pCubData->uLength) return FALSE; pCubData->uLength = nValue; break; case 2: if (nValue == pCubData->nBrightness) return FALSE; pCubData->nBrightness = nValue; break; case 3: if (nValue == pCubData->nAngle) return FALSE; pCubData->nAngle = nValue; break; } L_ApplyFilter (hWnd); } } if (nID >= pCubData->nRdoBaseID && nID < pCubData->nRdoBaseID + pCubData->nSlideNum ) { nIndex = nID - pCubData->nRdoBaseID; switch(nIndex) { case 0: if (pCubData->uFlags == ((pCubData->uFlags & 0xFF0F) | CUB_SQR)) return FALSE; pCubData->uFlags = ((pCubData->uFlags & 0xFF0F) | CUB_SQR); break; case 1: if (pCubData->uFlags == ((pCubData->uFlags & 0xFF0F) | CUB_RECT)) return FALSE; pCubData->uFlags = ((pCubData->uFlags & 0xFF0F) | CUB_RECT); break; case 2: EnableWindow(GetDlgItem(hWnd, IDC_CBS_CLR_BTN), FALSE); if (pCubData->uFlags == ((pCubData->uFlags & 0xFFF0) | CUB_BKG)) return FALSE; pCubData->uFlags = ((pCubData->uFlags & 0xFFF0) | CUB_BKG); break; case 3: EnableWindow(GetDlgItem(hWnd, IDC_CBS_CLR_BTN), TRUE); if (pCubData->uFlags == ((pCubData->uFlags & 0xFFF0) | CUB_COLOR)) return FALSE; pCubData->uFlags = ((pCubData->uFlags & 0xFFF0) | CUB_COLOR); break; } L_ApplyFilter (hWnd); } return TRUE; } static L_BOOL CubismDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPCUBISMDATA pCubData = (LPCUBISMDATA) GetWindowLong(hWnd,GWL_USERDATA); return (SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pCubData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE)); } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPCUBISMDATA pCubData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pCubData = (LPCUBISMDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pCubData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_CubismBitmap(&pData->LeadBitmap, pCubData->uSpace, pCubData->uLength, pCubData->nBrightness, pCubData->nAngle * 100, pCubData->crColor, pCubData->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 ; } } }