/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL StarDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL StarDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL StarDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL StarDlg_OnPaint (HWND hWnd); static L_VOID StarDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK StarDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, StarDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, StarDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, StarDlg_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, StarDlg_OnPaint); HANDLE_MSG (hWnd, WM_TIMER, StarDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static LRESULT CALLBACK Mouse(L_INT nCode, WPARAM wParam, LPARAM lParam) { LPSTRDLGDATA pStrDlgData; LPMOUSEHOOKSTRUCT pMouseHook; HWND hWndParent; pCHILDDATA pData; RECT rcRect; POINT TmpPoint; DWORD dwStyle; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pStrDlgData = (LPSTRDLGDATA)GetWindowLong(hGlobalWnd, GWL_USERDATA); pMouseHook = (LPMOUSEHOOKSTRUCT)lParam; GetWindowRect(hGlobalWnd, &rcRect); if (PtInRect(&rcRect, pMouseHook->pt)) return 0; switch(LOWORD(wParam)) { case WM_NCMOUSEMOVE: TmpPoint = pMouseHook->pt; if (PtInRect(&rcRect, TmpPoint)) break; if (pStrDlgData->bPushed) { PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); } else { dwStyle = GetWindowLong (hWndParent, GWL_STYLE); if ((WS_VSCROLL & dwStyle) || (WS_HSCROLL & dwStyle)) PostMessage(hWndParent, WM_USER_CHANGECURSOR, (WPARAM)hInst, (LONG)MAKEINTRESOURCE(IDC_CURS11)); ScreenToClient(hWndParent, &pMouseHook->pt); GetClientRect(hGlobalWnd, &rcRect); if (!PtInRect(&rcRect, pMouseHook->pt)) SendMessage((hWndParent), WM_MOUSEMOVE, wParam, MAKELPARAM((pMouseHook->pt.x), (pMouseHook->pt.y))); } break; case WM_NCLBUTTONDOWN: TmpPoint = pMouseHook->pt; if (PtInRect(&rcRect, TmpPoint)) break; if (pStrDlgData->bPushed) { PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); ScreenToClient(hWndParent, &pMouseHook->pt); GetClientRect(hWndParent, &rcRect); if (PtInRect(&pData->rcView, pMouseHook->pt)) { if (L_BitmapHasRgn(&pData->LeadBitmap)) { L_GetBitmapRgnBounds(&pData->LeadBitmap, NULL, &rcRect); TmpPoint.x = pMouseHook->pt.x + pData->nHScrollPos; TmpPoint.y = pMouseHook->pt.y + pData->nVScrollPos; if (!PtInRect(&rcRect, TmpPoint)) return CallNextHookEx(pStrDlgData->hMouseHook , nCode, wParam, lParam); } pData->ptCenter.x = pStrDlgData->StarInfo.pCenter.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptCenter.y = pStrDlgData->StarInfo.pCenter.y = pMouseHook->pt.y + pData->nVScrollPos; SetDlgItemInt(hGlobalWnd, IDC_STR_XPO_EDT, pStrDlgData->StarInfo.pCenter.x, TRUE); SetDlgItemInt(hGlobalWnd, IDC_STR_YPO_EDT, pStrDlgData->StarInfo.pCenter.y, TRUE); InvalidateRect(hWndParent, NULL, FALSE); L_ApplyFilter (hGlobalWnd); PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); } else { PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_ARROW); } } else { dwStyle = GetWindowLong (hWndParent, GWL_STYLE); if ((WS_VSCROLL & dwStyle) || (WS_HSCROLL & dwStyle)) PostMessage(hWndParent, WM_USER_CHANGECURSOR, (WPARAM)hInst, (LONG)MAKEINTRESOURCE(IDC_CURS11)); ScreenToClient(hWndParent, &pMouseHook->pt); SendMessage(hWndParent, WM_LBUTTONDOWN, wParam, MAKELPARAM((pMouseHook->pt.x), (pMouseHook->pt.y))); } break; case WM_NCLBUTTONUP: TmpPoint = pMouseHook->pt; if (PtInRect(&rcRect, TmpPoint)) break; if (pStrDlgData->bPushed) { PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); } else { dwStyle = GetWindowLong (hWndParent, GWL_STYLE); if ((WS_VSCROLL & dwStyle) || (WS_HSCROLL & dwStyle)) PostMessage(hWndParent, WM_USER_CHANGECURSOR, (WPARAM)hInst, (LONG)MAKEINTRESOURCE(IDC_CURS11)); ScreenToClient(hWndParent, &pMouseHook->pt); GetClientRect(hGlobalWnd, &rcRect); if (!PtInRect(&rcRect, pMouseHook->pt)) SendMessage(hWndParent, WM_LBUTTONUP, wParam, MAKELPARAM((pMouseHook->pt.x), (pMouseHook->pt.y))); } break; } if (pStrDlgData) { if (LOWORD(wParam) >= WM_NCMOUSEMOVE && LOWORD(wParam) <= WM_NCMBUTTONDBLCLK) return TRUE; else return CallNextHookEx(pStrDlgData->hMouseHook , nCode, wParam, lParam); } else return FALSE; } static L_BOOL StarDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPSTRDLGDATA pStrDlgData; HWND hWndParent; pCHILDDATA pData; L_INT nRangeMax[] = { 100, 50, 100, 100, 100, 0, 0, 100, 360, 360, 100, 0, 0}; L_INT nRangeMin[] = { 0 , 1 , -100, -100, 0 , 0, 0, -100, 0, 0, 0 , 0, 0}; L_INT nPosInit [] = { 50 , 9 , 0 , 0 , 100, 0, 0, 0 , 0 , 0, 100, 0, 0}; L_INT nSlider; RECT rcRgn; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pStrDlgData = (LPSTRDLGDATA)lParam; hGlobalWnd = hWnd; pData->bCross = TRUE; MoveDialogToMiddle(hWnd); SetWindowLong (hWnd, GWL_USERDATA, (LONG)pStrDlgData); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_STR_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pStrDlgData->Bitmap); L_GetBitmapRgnBoundsClip(&pStrDlgData->Bitmap, NULL, &rcRgn); pStrDlgData->nSlideNum = 13; pStrDlgData->nEdtBaseID = IDC_STR_SIZ_EDT; pStrDlgData->nSldBaseID = IDC_STR_SIZ_SLD; nRangeMax[5] = (rcRgn.right - rcRgn.left); nRangeMax[6] = (rcRgn.bottom - rcRgn.top); nRangeMax[11] = (rcRgn.right - rcRgn.left) + rcRgn.left; nRangeMax[12] = (rcRgn.bottom - rcRgn.top) + rcRgn.top; nRangeMin[5] = 0; nRangeMin[6] = 0; nRangeMin[11] = rcRgn.left; nRangeMin[12] = rcRgn.top; nPosInit[5] = (nRangeMax[5] + nRangeMin[5] ) >> 1; nPosInit[6] = (nRangeMax[6] + nRangeMin[6] ) >> 1; nPosInit[11] = (nRangeMax[11] + nRangeMin[11]) >> 1; nPosInit[12] = (nRangeMax[12] + nRangeMin[12]) >> 1; pStrDlgData->StarInfo.uHoleSize = nPosInit[0]; pStrDlgData->StarInfo.nSpokeDiv = nPosInit[2]; pStrDlgData->StarInfo.nAngleOpac = nPosInit[3]; pStrDlgData->StarInfo.nDistOpac = nPosInit[7]; pStrDlgData->StarInfo.nPhase = nPosInit[8]; pStrDlgData->StarInfo.nAngle = nPosInit[9]; pStrDlgData->StarInfo.uStarWidth = nPosInit[5]; pStrDlgData->StarInfo.uStarHeight = nPosInit[6]; pStrDlgData->StarInfo.pCenter.x = pData->ptCenter.x = nPosInit[11]; pStrDlgData->StarInfo.pCenter.y = pData->ptCenter.y = nPosInit[12]; pStrDlgData->StarInfo.nBorderOpac = nPosInit[10]; pStrDlgData->StarInfo.uOpacity = nPosInit[4]; pStrDlgData->StarInfo.uSpoke = nPosInit[1]; pStrDlgData->StarInfo.crFillUpper = RGB(255, 0, 0); pStrDlgData->StarInfo.crFillLower = RGB(0, 0, 255); pStrDlgData->StarInfo.uStructSize = sizeof(STARINFO); EnableWindow(GetDlgItem(hWnd, IDC_STR_INR_CHK), FALSE); Button_SetCheck(GetDlgItem(hWnd, IDC_STR_INS_RAD), TRUE); CreateAngleControl(GetDlgItem(hWnd, IDC_STR_ANG_SLD), IDC_STR_ANG_EDT, FROM_0_TO_360, 1, APPLY_ON_MOVE); CreateAngleControl(GetDlgItem(hWnd, IDC_STR_PHS_SLD), IDC_STR_PHS_EDT, FROM_0_TO_360, 1, APPLY_ON_MOVE); for (nSlider = 0; nSlider < pStrDlgData->nSlideNum; nSlider++) { if ((nSlider != 8) && (nSlider != 9)) Trackbar_SetTheRange(GetDlgItem(hWnd, pStrDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pStrDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pStrDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); pStrDlgData->bPushed = FALSE; pStrDlgData->hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_MOUSE)); SendMessage(GetDlgItem(hWnd, IDC_STR_POS_BUT), BM_SETIMAGE, IMAGE_ICON, (LPARAM)(HICON)pStrDlgData->hIcon); pStrDlgData->hMouseHook = SetWindowsHookEx(WH_MOUSE, Mouse, hInst, GetCurrentThreadId()); UpdateWindow(hWnd); ShowWindow (hWnd, SW_SHOW); L_ApplyFilter(hWnd); return ( TRUE ); } static L_VOID StarDlg_OnTimer(HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL StarDlg_OnPaint(HWND hWnd) { HDC hDC; PAINTSTRUCT ps; RECT Rect; HBRUSH hBrush; LPSTRDLGDATA pStrDlgData; pStrDlgData = (LPSTRDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_STR_CLR1_TXT), &Rect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_STR_CLR1_TXT),&ps); hBrush = CreateSolidBrush(pStrDlgData->StarInfo.crFillUpper); FillRect(hDC, &Rect,hBrush); DeleteObject (hBrush); EndPaint(GetDlgItem(hWnd, IDC_STR_CLR1_TXT), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_STR_CLR2_TXT),&ps); GetClientRect(GetDlgItem(hWnd , IDC_STR_CLR2_TXT), &Rect); hBrush = CreateSolidBrush(pStrDlgData->StarInfo.crFillLower); FillRect(hDC, &Rect,hBrush); DeleteObject (hBrush); EndPaint(GetDlgItem(hWnd, IDC_STR_CLR2_TXT), &ps); return FALSE; } static L_BOOL StarDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPSTRDLGDATA pStrDlgData; HWND hWndParent; L_INT nRangeMax[] = { 100, 50, 100, 100, 100, 0, 0, 100, 360, 360, 100, 0, 0}; L_INT nRangeMin[] = { 0 , 0 ,-100,-100, 0 , 0, 0,-100,-360,-360, 0 , 0, 0}; pCHILDDATA pData; L_INT nValue; L_INT nIndex; RECT rcRgn; COLORREF crColor; L_BOOL bInner; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pStrDlgData = (LPSTRDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); L_GetBitmapRgnBoundsClip(&pStrDlgData->Bitmap, NULL, &rcRgn); nRangeMax[5] = (rcRgn.right - rcRgn.left); nRangeMax[6] = (rcRgn.bottom - rcRgn.top); nRangeMax[11] = (rcRgn.right - rcRgn.left) + rcRgn.left; nRangeMax[12] = (rcRgn.bottom - rcRgn.top) + rcRgn.top; nRangeMin[5] = 0; nRangeMin[6] = 0; nRangeMin[11] = rcRgn.left; nRangeMin[12] = rcRgn.top; switch (nID) { case IDC_STR_PHS_EDT: nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); if ((uCodeNotify == EN_CHANGE) && nValue != pStrDlgData->StarInfo.nPhase) { pStrDlgData->StarInfo.nPhase = nValue; DrawAngleControl(GetDlgItem(hWnd, IDC_STR_PHS_SLD), nValue); L_ApplyFilter(hWnd); } return TRUE; case IDC_STR_ANG_EDT: nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); if ((uCodeNotify == EN_CHANGE) && nValue != pStrDlgData->StarInfo.nAngle) { pStrDlgData->StarInfo.nAngle = nValue; DrawAngleControl(GetDlgItem(hWnd, IDC_STR_ANG_SLD), nValue); L_ApplyFilter(hWnd); } return TRUE; case IDC_STR_POS_BUT: pStrDlgData->bPushed = Button_GetCheck(hWndCtl); break; case IDC_STR_INS_RAD: EnableWindow(GetDlgItem(hWnd, IDC_STR_INR_CHK), FALSE); pStrDlgData->StarInfo.uFlag = STR_INSIDE; L_ApplyFilter(hWnd); break; case IDC_STR_OUT_RAD: EnableWindow(GetDlgItem(hWnd, IDC_STR_INR_CHK), TRUE); case IDC_STR_INR_CHK: bInner = Button_GetCheck(GetDlgItem(hWnd, IDC_STR_INR_CHK)); if(bInner) pStrDlgData->StarInfo.uFlag = STR_OUTSIDE | STR_INNER; else pStrDlgData->StarInfo.uFlag = STR_OUTSIDE; L_ApplyFilter(hWnd); break; case IDC_STR_CLR1_BUT: crColor = pStrDlgData->StarInfo.crFillUpper; pStrDlgData->StarInfo.crFillUpper = ShowColorDialog(hWnd, crColor); if (crColor != pStrDlgData->StarInfo.crFillUpper) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_STR_CLR2_BUT: crColor = pStrDlgData->StarInfo.crFillLower; pStrDlgData->StarInfo.crFillLower = ShowColorDialog(hWnd, crColor); if (crColor != pStrDlgData->StarInfo.crFillLower) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDCANCEL: pData->bCross = FALSE; StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; UnhookWindowsHookEx(pStrDlgData->hMouseHook); DestroyIcon(pStrDlgData->hIcon); EndDialog(hWnd, FALSE); break; case IDOK: pData->bCross = FALSE; ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; UnhookWindowsHookEx(pStrDlgData->hMouseHook); DestroyIcon(pStrDlgData->hIcon); EndDialog(hWnd, TRUE); break; } if (nID >= pStrDlgData->nEdtBaseID && nID < (pStrDlgData->nEdtBaseID + pStrDlgData->nSlideNum)) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pStrDlgData->nEdtBaseID; Trackbar_SetPos (GetDlgItem(hWnd, nID + pStrDlgData->nSlideNum), TRUE, nValue); switch (nIndex) { case 0: if(pStrDlgData->StarInfo.uHoleSize == (L_UINT)nValue) return TRUE; pStrDlgData->StarInfo.uHoleSize = nValue; break; case 1: if(pStrDlgData->StarInfo.uSpoke == (L_UINT)nValue) return TRUE; pStrDlgData->StarInfo.uSpoke = nValue; break; case 2: if(pStrDlgData->StarInfo.nSpokeDiv == nValue) return TRUE; pStrDlgData->StarInfo.nSpokeDiv = nValue; break; case 3: if(pStrDlgData->StarInfo.nAngleOpac == nValue) return TRUE; pStrDlgData->StarInfo.nAngleOpac = nValue; break; case 4: if(pStrDlgData->StarInfo.uOpacity == (L_UINT)nValue) return TRUE; pStrDlgData->StarInfo.uOpacity = nValue; break; case 5: if(pStrDlgData->StarInfo.uStarWidth == (L_UINT)nValue) return TRUE; pStrDlgData->StarInfo.uStarWidth = nValue; break; case 6: if(pStrDlgData->StarInfo.uStarHeight == (L_UINT)nValue) return TRUE; pStrDlgData->StarInfo.uStarHeight = nValue; break; case 7: if(pStrDlgData->StarInfo.nDistOpac== nValue) return TRUE; pStrDlgData->StarInfo.nDistOpac = nValue; break; case 10: if(pStrDlgData->StarInfo.nBorderOpac == nValue) return TRUE; pStrDlgData->StarInfo.nBorderOpac = nValue; break; case 11: if(pStrDlgData->StarInfo.pCenter.x == nValue) return TRUE; pStrDlgData->StarInfo.pCenter.x = nValue; pData->ptCenter.x = nValue; break; case 12: if(pStrDlgData->StarInfo.pCenter.y == nValue) return TRUE; pStrDlgData->StarInfo.pCenter.y = nValue; pData->ptCenter.y = nValue; break; ; } L_ApplyFilter(hWnd); } } return TRUE; } static L_BOOL StarDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPSTRDLGDATA pStrDlgData = (LPSTRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); return SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pStrDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); } static L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPSTRDLGDATA pStrDlgData; STARINFO StarInfo; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pStrDlgData = (LPSTRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pStrDlgData->Bitmap, sizeof(BITMAPHANDLE)); StarInfo = pStrDlgData->StarInfo; StarInfo.nAngle *= 100; StarInfo.nPhase *= 100; nRet = L_DrawStarBitmap(&pData->LeadBitmap, &StarInfo); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }