/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL FrbDlg_OnPaint (HWND hWnd); static L_BOOL FrbDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL FrbDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL FrbDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL FrbDlg_OnLButtonUp (HWND hWnd, L_INT, L_INT, UINT); static L_BOOL FrbDlg_OnLButtonDown(HWND hWnd, BOOL , L_INT, L_INT, UINT); static L_BOOL FrbDlg_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags); static L_VOID FrbDlg_OnTimer (HWND hWnd, L_INT nID); static L_BOOL ChangeUserPoints (L_INT, L_INT, L_INT, LPFRBDLGDATA); static L_VOID DeleteUserPoint (L_INT, L_INT, L_INT, LPFRBDLGDATA ); static L_VOID GetShearBuf (HWND hWnd, LPFRBDLGDATA pFrbDlgData); static L_VOID AddPoint (L_INT nX, L_INT nY, LPFRBDLGDATA pFrbDlgData); static L_VOID InitUserPoint (HWND hWnd, LPFRBDLGDATA pFrbDlgData); static L_VOID L_ApplyFilter (HWND hWnd); #define SHR_CURVE 0x0000 #define SHR_LINE 0x0001 #define GUB_CURVE 0x0000 #define GUB_LINEAR 0x0001 L_BOOL CALLBACK FreeRadBndDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, FrbDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, FrbDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, FrbDlg_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, FrbDlg_OnPaint); HANDLE_MSG (hWnd, WM_MOUSEMOVE, FrbDlg_OnMouseMove); HANDLE_MSG (hWnd, WM_LBUTTONDOWN,FrbDlg_OnLButtonDown); HANDLE_MSG (hWnd, WM_LBUTTONUP, FrbDlg_OnLButtonUp); HANDLE_MSG (hWnd, WM_TIMER, FrbDlg_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) { LPFRBDLGDATA pFrbDlgData; LPMOUSEHOOKSTRUCT pMouseHook; HWND hWndParent; pCHILDDATA pData; RECT rcRect; POINT TmpPoint; DWORD dwStyle; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pFrbDlgData = (LPFRBDLGDATA)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 (pFrbDlgData->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 (pFrbDlgData->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(pFrbDlgData->hMouseHook , nCode, wParam, lParam); } pData->ptCenter.x = pFrbDlgData->pCenter.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptCenter.y = pFrbDlgData->pCenter.y = pMouseHook->pt.y + pData->nVScrollPos; SetDlgItemInt(hGlobalWnd, IDC_RDM_XCT_EDT, pFrbDlgData->pCenter.x, TRUE); SetDlgItemInt(hGlobalWnd, IDC_RDM_YCT_EDT, pFrbDlgData->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 (pFrbDlgData->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 (pFrbDlgData) { if (LOWORD(wParam) >= WM_NCMOUSEMOVE && LOWORD(wParam) <= WM_NCMBUTTONDBLCLK) return TRUE; else return CallNextHookEx(pFrbDlgData->hMouseHook , nCode, wParam, lParam); } else return FALSE; } static L_BOOL FrbDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPFRBDLGDATA pFrbDlgData; HWND hWndParent; pCHILDDATA pData; RECT rcRect; L_INT nRangeMax[] = { 100 , 0, 0}; L_INT nRangeMin[] = { 0, 0, 0}; L_INT nPosInit [] = { 50 , 0, 0}; RECT rcRgn; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pFrbDlgData = (LPFRBDLGDATA)lParam; hGlobalWnd = hWnd; pData->bCross = TRUE; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd,GWL_USERDATA,(LONG) pFrbDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pFrbDlgData->Bitmap); L_CopyBitmap(&pFrbDlgData->Bitmap, &pData->LeadBitmap, sizeof(BITMAPHANDLE)); //MoveWindow (GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT),280,12, 145, 145 , TRUE); MakeRectangleWindow(hWnd, IDC_RDM_WAVSH_TXT); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); StatusProc.bProgress = TRUE; StatusProc.DlgWnd = hWnd; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_RDM_PROG); GetClientRect(GetDlgItem(hWnd , IDC_RDM_WAVSH_TXT), &rcRect); L_GetBitmapRgnBoundsClip(&pFrbDlgData->Bitmap, NULL, &rcRgn); nRangeMax[1] = (rcRgn.right - rcRgn.left) + rcRgn.left; nRangeMax[2] = (rcRgn.bottom - rcRgn.top) + rcRgn.top; nRangeMin[1] = rcRgn.left; nRangeMin[2] = rcRgn.top; nPosInit[1] = (nRangeMax[1] + nRangeMin[1]) >> 1; nPosInit[2] = (nRangeMax[2] + nRangeMin[2]) >> 1; pFrbDlgData->nSlideNum = 3; pFrbDlgData->nEdtBaseID = IDC_RDM_SCALE_EDT; pFrbDlgData->nSldBaseID = IDC_RDM_SCALE_SLD; pFrbDlgData->pShrCrvelm = (L_INT L_FAR *)malloc((rcRect.right - rcRect.left + 1)* sizeof(L_INT)); pFrbDlgData->pBuf = (L_INT L_FAR *)malloc((rcRect.right - rcRect.left + 1)* sizeof(L_INT)); pFrbDlgData->pShrCrvPnt = (LPPOINT)malloc((rcRect.right - rcRect.left + 1)* 2 * sizeof(long)); pFrbDlgData->nUserPntCnt = 2; InitUserPoint(hWnd, pFrbDlgData); GetShearBuf(hWnd, pFrbDlgData); pFrbDlgData->uScale = 50; pFrbDlgData->uFreq = 0; pFrbDlgData->nAngle = 0; pFrbDlgData->uModFlag = FALSE; pFrbDlgData->bDel = FALSE; pFrbDlgData->bAdd = FALSE; pFrbDlgData->bChange = FALSE; pFrbDlgData->uColFlag = FILL_CLR | FILL_WOUTROT; pFrbDlgData->pCenter.x = pData->ptCenter.x = nPosInit[1]; pFrbDlgData->pCenter.y = pData->ptCenter.y = nPosInit[2]; for (nSlider = 0; nSlider < pFrbDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pFrbDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pFrbDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pFrbDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, 0); } Button_SetCheck(GetDlgItem(hWnd, IDC_RDM_FILLCOLOR_RAD), TRUE); ComboBox_AddString(GetDlgItem(hWnd,IDC_RDM_WAVSH_COM), TEXT("Curve")); ComboBox_AddString(GetDlgItem(hWnd,IDC_RDM_WAVSH_COM), TEXT("Line")); ComboBox_SetCurSel(GetDlgItem(hWnd,IDC_RDM_WAVSH_COM), 0); pFrbDlgData->bPushed = FALSE; pFrbDlgData->hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_MOUSE)); SendMessage(GetDlgItem(hWnd, IDC_RDM_POS_BUT), BM_SETIMAGE, IMAGE_ICON, (LPARAM)(HICON)pFrbDlgData->hIcon); pFrbDlgData->hMouseHook = SetWindowsHookEx(WH_MOUSE, Mouse, hInst, GetCurrentThreadId()); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return ( TRUE ); } static L_VOID FrbDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL FrbDlg_OnPaint (HWND hWnd) { PAINTSTRUCT ps; HDC hdc,hdcMemo; RECT rcRect; L_INT cxClient, cyClient; HBITMAP hBitmap; HPEN hPen, hPen1; HBRUSH hbrush; L_INT nCount; LPFRBDLGDATA pFrbDlgData; pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_RDM_WAVSH_TXT), &rcRect); cxClient = rcRect.right - rcRect.left; cyClient = rcRect.bottom - rcRect.top; hdc = BeginPaint(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT),&ps); hBitmap = CreateCompatibleBitmap(hdc, cxClient, cyClient); hdcMemo = CreateCompatibleDC(hdc); SelectObject(hdcMemo,hBitmap); FillRect(hdcMemo, &rcRect,(HBRUSH) (COLOR_WINDOW + 2)); hPen = CreatePen(PS_SOLID,0,RGB(150,100,130)); SelectObject(hdcMemo,hPen); for(nCount=0 ; nCount <= 4; nCount++) { MoveToEx(hdcMemo,1,nCount*(cyClient-1)/4,NULL); LineTo(hdcMemo,nCount*(cxClient-1),nCount*cyClient/4); } for(nCount=0;nCount<= 4;nCount++) { MoveToEx(hdcMemo,nCount*(cxClient-1)/4, 0,NULL); LineTo(hdcMemo,nCount*(cxClient-1)/4,cyClient); } hbrush = CreateSolidBrush(RGB(255,255,0)); SelectObject(hdcMemo,hbrush); for(nCount=0;nCount<(L_INT) pFrbDlgData->nUserPntCnt;nCount++) { if(pFrbDlgData->uModFlag) Ellipse(hdcMemo, cxClient - pFrbDlgData->UserPoint[nCount].y - 3, pFrbDlgData->UserPoint[nCount].x - 3, cxClient - pFrbDlgData->UserPoint[nCount].y + 3, pFrbDlgData->UserPoint[nCount].x + 3); else Ellipse(hdcMemo, pFrbDlgData->UserPoint[nCount].x - 3, pFrbDlgData->UserPoint[nCount].y - 3, pFrbDlgData->UserPoint[nCount].x + 3, pFrbDlgData->UserPoint[nCount].y + 3); } hPen1 = CreatePen(PS_SOLID,0,RGB(255, 255, 255)); SelectObject(hdcMemo,hPen1); if(pFrbDlgData->uModFlag) { for(nCount = 0; nCount <= cxClient; nCount++) { pFrbDlgData->pShrCrvPnt[nCount].y = nCount; pFrbDlgData->pShrCrvPnt[nCount].x = cxClient - (L_INT) pFrbDlgData->pShrCrvelm[nCount]; } } else { for(nCount = 0; nCount <= cxClient; nCount++) { pFrbDlgData->pShrCrvPnt[nCount].x = nCount; pFrbDlgData->pShrCrvPnt[nCount].y = (L_INT) pFrbDlgData->pShrCrvelm[nCount]; } } Polyline(hdcMemo, pFrbDlgData->pShrCrvPnt,cxClient + 1); StretchBlt(hdc,0,0,cxClient,cyClient,hdcMemo,0,0,cxClient,cyClient,SRCCOPY); DeleteDC(hdcMemo); DeleteBitmap(hBitmap); DeletePen(hPen); DeleteBrush(hbrush); DeletePen(hPen1); EndPaint(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &ps); GetClientRect(GetDlgItem(hWnd , IDC_RDM_COLOR_TXT), &rcRect); hdc = BeginPaint(GetDlgItem(hWnd, IDC_RDM_COLOR_TXT),&ps); hbrush = CreateSolidBrush( pFrbDlgData->crColor); FillRect(hdc, &rcRect, Button_GetCheck(GetDlgItem(hWnd, IDC_RDM_FILLCOLOR_RAD)) ? hbrush : (HBRUSH) COLOR_WINDOW); DeleteBrush(hbrush); EndPaint(GetDlgItem(hWnd, IDC_RDM_COLOR_TXT), &ps); return FALSE; } static L_BOOL FrbDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPFRBDLGDATA pFrbDlgData; HWND hWndParent; L_INT nRangeMax[] = { 100 , 0, 0}; L_INT nRangeMin[] = { 0, 0, 0}; pCHILDDATA pData; L_INT nValue; COLORREF crColor; L_INT nIndex; RECT rcRgn; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); L_GetBitmapRgnBoundsClip(&pFrbDlgData->Bitmap, NULL, &rcRgn); nRangeMax[1] = (rcRgn.right - rcRgn.left) + rcRgn.left; nRangeMax[2] = (rcRgn.bottom - rcRgn.top) + rcRgn.top; nRangeMin[1] = rcRgn.left; nRangeMin[2] = rcRgn.top; if ((uCodeNotify == CBN_SELCHANGE ) && (nID == IDC_RDM_WAVSH_COM)) { if (pFrbDlgData->uFlag != ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_RDM_WAVSH_COM))) { pFrbDlgData->uFlag = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_RDM_WAVSH_COM)); GetShearBuf(hWnd, pFrbDlgData); InvalidateRect(hWnd, NULL,FALSE); L_ApplyFilter(hWnd); } } if (nID >= pFrbDlgData->nEdtBaseID && nID < (pFrbDlgData->nEdtBaseID + pFrbDlgData->nSlideNum)) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); nIndex = nID - pFrbDlgData->nEdtBaseID; Trackbar_SetPos(GetDlgItem(hWnd, nID + pFrbDlgData->nSlideNum), TRUE, nValue); switch (nIndex) { case 0: if(pFrbDlgData->uScale == (L_UINT)nValue) return TRUE; pFrbDlgData->uScale = nValue; break; case 1: if(pFrbDlgData->pCenter.x == nValue) return TRUE; pFrbDlgData->pCenter.x = nValue; pData->ptCenter.x = nValue; break; case 2: if(pFrbDlgData->pCenter.y == nValue) return TRUE; pFrbDlgData->pCenter.y = nValue; pData->ptCenter.y = nValue; break; } L_ApplyFilter(hWnd); } } switch (nID) { case IDC_RDM_POS_BUT: pFrbDlgData->bPushed = Button_GetCheck(hWndCtl); break; case IDC_RDM_ROT_CHK: pFrbDlgData->uColFlag = pFrbDlgData->uColFlag & 0xFFFFFF0F; pFrbDlgData->uColFlag = pFrbDlgData->uColFlag | (!Button_GetCheck(hWndCtl) << 4); L_ApplyFilter(hWnd); break; case IDC_RDM_COLOR_BTN: crColor = pFrbDlgData->crColor; pFrbDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pFrbDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_RDM_FILLCOLOR_RAD: if (pFrbDlgData->uColFlag != ((pFrbDlgData->uColFlag & 0xFFFFFFF0) | FILL_CLR)) { EnableWindow(GetDlgItem(hWnd, IDC_RDM_COLOR_BTN), TRUE); pFrbDlgData->uColFlag &= 0xFFFFFFF0; pFrbDlgData->uColFlag |= FILL_CLR; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_RDM_REPTCOLOR_RAD: if (pFrbDlgData->uColFlag != ((pFrbDlgData->uColFlag & 0xFFFFFFF0) | FILL_RPT)) { EnableWindow(GetDlgItem(hWnd, IDC_RDM_COLOR_BTN), FALSE); pFrbDlgData->uColFlag &= 0xFFFFFFF0; pFrbDlgData->uColFlag |= FILL_RPT; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_RDM_NOCHANGE_RAD: if (pFrbDlgData->uColFlag != ((pFrbDlgData->uColFlag & 0xFFFFFFF0) | FILL_NOCHG)) { EnableWindow(GetDlgItem(hWnd, IDC_RDM_COLOR_BTN), FALSE); pFrbDlgData->uColFlag &= 0xFFFFFFF0; pFrbDlgData->uColFlag |= FILL_NOCHG; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDCANCEL: pData->bCross = FALSE; StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; UnhookWindowsHookEx(pFrbDlgData->hMouseHook); DestroyIcon(pFrbDlgData->hIcon); EndDialog(hWnd, FALSE); break; case IDOK: pData->bCross = FALSE; ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; UnhookWindowsHookEx(pFrbDlgData->hMouseHook); DestroyIcon(pFrbDlgData->hIcon); EndDialog(hWnd, TRUE); break; } return TRUE; } L_BOOL FrbDlg_OnLButtonUp (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags) { LPFRBDLGDATA pFrbDlgData; pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); ReleaseCapture(); if( pFrbDlgData->bChange || pFrbDlgData->bAdd || pFrbDlgData->bDel) { SetCursor(LoadCursor(NULL, IDC_SIZEALL)); pFrbDlgData->bChange = FALSE; pFrbDlgData->bAdd = FALSE; pFrbDlgData->bDel = FALSE; L_ApplyFilter(hWnd); } return TRUE; } L_BOOL FrbDlg_OnLButtonDown (HWND hWnd, BOOL fDoubleClick, L_INT nX, L_INT nY,UINT uKeyFlags) { POINT TmpPoint; RECT rcRect; L_INT nyPos; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nTemp; LPFRBDLGDATA pFrbDlgData; pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &rcRect); cxClient= rcRect.right - rcRect.left; cyClient= rcRect.bottom - rcRect.top; TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &TmpPoint); if(pFrbDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&rcRect, TmpPoint)) { nyPos = (L_INT) pFrbDlgData->pShrCrvelm[TmpPoint.x]; SetCapture(hWnd); if(TmpPoint.y < nyPos + 30 && TmpPoint.y > nyPos - 30) { SetCursor(LoadCursor(NULL, IDC_SIZEALL)); for(nCount=0; nCount <= (L_INT) pFrbDlgData->nUserPntCnt;nCount++) { SetRect(&rcRect, pFrbDlgData->UserPoint[nCount].x - 5, pFrbDlgData->UserPoint[nCount].y - 30, pFrbDlgData->UserPoint[nCount].x + 5, pFrbDlgData->UserPoint[nCount].y + 30); if (PtInRect(&rcRect, TmpPoint)) { pFrbDlgData->bChange = TRUE; pFrbDlgData->nPoint = nCount; if(TmpPoint.x < pFrbDlgData->UserPoint[0].x) { pFrbDlgData->nPoint= nCount; } if(TmpPoint.x > pFrbDlgData->UserPoint[ pFrbDlgData->nUserPntCnt - 1].x) pFrbDlgData->nPoint= pFrbDlgData->nUserPntCnt - 1; if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pFrbDlgData->nPoint, pFrbDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pFrbDlgData->nPoint, pFrbDlgData); GetShearBuf(hWnd, pFrbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); return TRUE; } } pFrbDlgData->nUserPntCnt++; AddPoint(TmpPoint.x, TmpPoint.y, pFrbDlgData); GetShearBuf(hWnd, pFrbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); return TRUE; } } return FALSE; } L_BOOL FrbDlg_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags) { POINT TmpPoint; RECT rcRect; L_INT nyPos; L_INT cxClient; L_INT cyClient; L_INT nCount, nTemp; L_BOOL bCurs = FALSE; LPFRBDLGDATA pFrbDlgData; pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &rcRect); cxClient= rcRect.right - rcRect.left; cyClient= rcRect.bottom - rcRect.top; TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &TmpPoint); if(pFrbDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&rcRect, TmpPoint)) { nyPos = (L_INT) pFrbDlgData->pShrCrvelm[TmpPoint.x]; if(TmpPoint.y < nyPos + 30 && TmpPoint.y > nyPos - 30) { SetCursor(LoadCursor(NULL, IDC_CROSS)); } for(nCount = 0; nCount <= (L_INT) pFrbDlgData->nUserPntCnt; nCount++) { SetRect(&rcRect, pFrbDlgData->UserPoint[nCount].x - 5, pFrbDlgData->UserPoint[nCount].y - 30, pFrbDlgData->UserPoint[nCount].x + 5, pFrbDlgData->UserPoint[nCount].y + 30); if (PtInRect(&rcRect, TmpPoint)) { bCurs = TRUE; break; } } if(bCurs) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); if( pFrbDlgData->bChange) { if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pFrbDlgData->nPoint, pFrbDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pFrbDlgData->nPoint, pFrbDlgData); GetShearBuf(hWnd, pFrbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); } return FALSE; } return FALSE; } static L_BOOL FrbDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPFRBDLGDATA pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pFrbDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPFRBDLGDATA pFrbDlgData; RECT rcRect; L_INT cxClient, cyClient, i; L_INT L_FAR * pBuf = NULL; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pFrbDlgData = (LPFRBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &rcRect); pBuf = (L_INT L_FAR *)malloc((rcRect.right - rcRect.left + 1)* sizeof(L_INT)); cxClient= rcRect.right - rcRect.left; cyClient= rcRect.bottom - rcRect.top; for(i = 0; i <= cxClient; i++) { pBuf[i] = min(1000, max( -1000, pFrbDlgData->pBuf[i] / ((cyClient)/2))); } FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pFrbDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_FreeRadBendBitmap(&pData->LeadBitmap, pBuf, cxClient + 1, pFrbDlgData->uScale, pFrbDlgData->pCenter, pFrbDlgData->crColor, pFrbDlgData->uColFlag); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } if(pBuf) free(pBuf); } static L_BOOL ChangeUserPoints(L_INT nX, L_INT nY, L_INT Point, LPFRBDLGDATA pFrbDlgData) { if(Point == 0 || Point == (L_INT) pFrbDlgData->nUserPntCnt - 1) { if(Point == (L_INT) pFrbDlgData->nUserPntCnt-1 && nX < pFrbDlgData->UserPoint[ pFrbDlgData->nUserPntCnt - 2].x + 5) return TRUE; if(Point == 0 && nX > pFrbDlgData->UserPoint[1].x - 5) return TRUE; pFrbDlgData->UserPoint[Point].y = nY; return TRUE; } if(nX <= pFrbDlgData->UserPoint[Point-1].x || nX >= pFrbDlgData->UserPoint[Point+1].x) return FALSE; pFrbDlgData->UserPoint[Point].x = nX; pFrbDlgData->UserPoint[Point].y = nY; return TRUE; } static L_VOID DeleteUserPoint(L_INT nX, L_INT nY, L_INT Point, LPFRBDLGDATA pFrbDlgData) { L_INT nCount; if (Point == 0 || Point == (L_INT) pFrbDlgData->nUserPntCnt) return; pFrbDlgData->bDel = TRUE; for(nCount = Point; nCount < (L_INT) pFrbDlgData->nUserPntCnt; nCount++) { pFrbDlgData->UserPoint[nCount].x = pFrbDlgData->UserPoint[nCount+1].x; pFrbDlgData->UserPoint[nCount].y = pFrbDlgData->UserPoint[nCount+1].y; } pFrbDlgData->bChange = FALSE; pFrbDlgData->nUserPntCnt--; } L_VOID GetShearBuf(HWND hWnd, LPFRBDLGDATA pFrbDlgData) { RECT rcRect; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nPtCurveNo; GetClientRect(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &rcRect); cxClient= rcRect.right - rcRect.left; cyClient= rcRect.bottom - rcRect.top; L_GetCurvePoints( pFrbDlgData->pBuf, pFrbDlgData->UserPoint, pFrbDlgData->nUserPntCnt, &nPtCurveNo, pFrbDlgData->uFlag); for(nCount = 0;nCount <= nPtCurveNo;nCount++) { pFrbDlgData->pBuf[nCount] = min((cyClient) * 1000, max(0, pFrbDlgData->pBuf[nCount])); pFrbDlgData->pShrCrvelm[nCount] = min((cyClient), max(0, pFrbDlgData->pBuf[nCount]/1000)); pFrbDlgData->pBuf[nCount] = (cyClient/2) * 1000 - pFrbDlgData->pBuf[nCount]; } } L_VOID AddPoint(L_INT nX, L_INT nY, LPFRBDLGDATA pFrbDlgData) { L_INT nCount; L_INT nShift; for(nCount = 0;nCount < (L_INT) pFrbDlgData->nUserPntCnt;nCount++) { if (nX < pFrbDlgData->UserPoint[nCount].x) break; } for(nShift = pFrbDlgData->nUserPntCnt - 1;nShift > nCount;nShift--) { pFrbDlgData->UserPoint[nShift].x = pFrbDlgData->UserPoint[nShift - 1].x; pFrbDlgData->UserPoint[nShift].y = pFrbDlgData->UserPoint[nShift - 1].y; } pFrbDlgData->UserPoint[nCount].x = nX; pFrbDlgData->UserPoint[nCount].y = nY; pFrbDlgData->nPoint = nCount; pFrbDlgData->bChange = TRUE; pFrbDlgData->bAdd = FALSE; } L_VOID InitUserPoint(HWND hWnd, LPFRBDLGDATA pFrbDlgData) { L_INT nCount; RECT rcRect; GetClientRect(GetDlgItem(hWnd, IDC_RDM_WAVSH_TXT), &rcRect); for(nCount = 0; nCount <= 3; nCount++) { pFrbDlgData->UserPoint[0].x = 0; pFrbDlgData->UserPoint[0].y = (rcRect.bottom - rcRect.top)/2; pFrbDlgData->UserPoint[1].x = (rcRect.right - rcRect.left); pFrbDlgData->UserPoint[1].y = (rcRect.bottom - rcRect.top)/2; } }