/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL FpbDlg_OnPaint (HWND); static L_BOOL FpbDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL FpbDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL FpbDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL FpbDlg_OnLButtonUp (HWND, L_INT, L_INT, UINT); static L_BOOL FpbDlg_OnLButtonDown(HWND, BOOL , L_INT, L_INT, UINT); static L_BOOL FpbDlg_OnMouseMove (HWND hWnd, L_INT x, L_INT y, UINT keyFlags); static L_VOID FpbDlg_OnTimer (HWND hWnd, L_INT ID); static L_BOOL ChangeUserPoints (L_INT, L_INT, L_INT, LPFPBDLGDATA); static L_VOID DeleteUserPoint (L_INT, L_INT, L_INT, LPFPBDLGDATA ); static L_VOID GetShearBuf (HWND hWnd, LPFPBDLGDATA pFpbDlgData); static L_VOID AddPoint (L_INT x, L_INT y, LPFPBDLGDATA pFpbDlgData); static L_VOID InitUserPoint (HWND hWnd, LPFPBDLGDATA pFpbDlgData); static L_VOID L_ApplyFilter (HWND hWnd); #define FPB_CURVE 0x0000 #define FPB_LINE 0x0001 #define GUB_CURVE 0x0000 #define GUB_LINEAR 0x0001 L_BOOL CALLBACK FreePlanBndDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, FpbDlg_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, FpbDlg_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, FpbDlg_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, FpbDlg_OnPaint); HANDLE_MSG (hWnd, WM_MOUSEMOVE, FpbDlg_OnMouseMove); HANDLE_MSG (hWnd, WM_LBUTTONDOWN,FpbDlg_OnLButtonDown); HANDLE_MSG (hWnd, WM_LBUTTONUP, FpbDlg_OnLButtonUp); HANDLE_MSG (hWnd, WM_TIMER, FpbDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static L_BOOL FpbDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPFPBDLGDATA pFpbDlgData; HWND hWndParent; pCHILDDATA pData; RECT Rect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pFpbDlgData = (LPFPBDLGDATA)lParam; SetWindowLong(hWnd,GWL_USERDATA,(LONG) pFpbDlgData); MoveDialogToMiddle(hWnd); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pFpbDlgData->Bitmap); L_CopyBitmap(&pFpbDlgData->Bitmap, &pData->LeadBitmap, sizeof(BITMAPHANDLE)); MakeRectangleWindow(hWnd, IDC_XYM_WAVSH_TXT); //MoveWindow (GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT),280,12, 145, 145,TRUE); Trackbar_SetRange(GetDlgItem(hWnd, IDC_XYM_SCALE_SLD), FALSE, 0,100); Trackbar_SetPos (GetDlgItem(hWnd, IDC_XYM_SCALE_SLD), TRUE, 50); Button_SetCheck(GetDlgItem(hWnd, IDC_XYM_FILLCOLOR_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_XYM_VERT_RAD), TRUE); ComboBox_AddString(GetDlgItem(hWnd,IDC_XYM_WAVSH_COM), TEXT("Curve")); ComboBox_AddString(GetDlgItem(hWnd,IDC_XYM_WAVSH_COM), TEXT("Line")); ComboBox_SetCurSel(GetDlgItem(hWnd,IDC_XYM_WAVSH_COM), 0); 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_XYM_PROG); GetClientRect(GetDlgItem(hWnd , IDC_XYM_WAVSH_TXT), &Rect); pFpbDlgData->pShrCrvelm = (L_INT L_FAR *)malloc((Rect.right - Rect.left + 1)* sizeof(L_INT)); pFpbDlgData->pBuf = (L_INT L_FAR *)malloc((Rect.right - Rect.left + 1)* sizeof(L_INT)); pFpbDlgData->pShrCrvPnt = (LPPOINT)malloc((Rect.right - Rect.left + 1)* 2 * sizeof(long)); pFpbDlgData->nUserPntCnt= 2; InitUserPoint(hWnd, pFpbDlgData); GetShearBuf(hWnd, pFpbDlgData); SetDlgItemInt(hWnd, IDC_XYM_SCALE_EDT, 50, FALSE); SetNumericEditBox(GetDlgItem(hWnd, IDC_XYM_SCALE_EDT), 0, 100, 1, 0, FALSE); Trackbar_SetPos (GetDlgItem(hWnd, IDC_XYM_SCALE_SLD), TRUE, 50); pFpbDlgData->uScale = 50; pFpbDlgData->uFreq = 0; pFpbDlgData->nAngle = 0; pFpbDlgData->uModFlag = FALSE; pFpbDlgData->bDel = FALSE; pFpbDlgData->bAdd = FALSE; pFpbDlgData->bChange = FALSE; pFpbDlgData->uColFlag = FILL_CLR | FPB_VERT; pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return ( TRUE ); } static L_VOID FpbDlg_OnTimer (HWND hWnd, L_INT ID) { Dialog_Timer(ID); } static L_BOOL FpbDlg_OnPaint (HWND hWnd) { PAINTSTRUCT ps; HDC hdc,hdcMemo; RECT Rect; L_INT cxClient, cyClient; HBITMAP hBitmap; HPEN hPen, hPen1; HBRUSH hbrush; L_INT nCount; LPFPBDLGDATA pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_XYM_WAVSH_TXT), &Rect); cxClient = Rect.right - Rect.left; cyClient = Rect.bottom - Rect.top; hdc = BeginPaint(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT),&ps); hBitmap = CreateCompatibleBitmap(hdc, cxClient, cyClient); hdcMemo = CreateCompatibleDC(hdc); SelectObject(hdcMemo,hBitmap); FillRect(hdcMemo, &Rect,(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) pFpbDlgData->nUserPntCnt;nCount++) { if(pFpbDlgData->uModFlag) Ellipse(hdcMemo, cxClient - pFpbDlgData->UserPoint[nCount].y - 3, pFpbDlgData->UserPoint[nCount].x - 3, cxClient - pFpbDlgData->UserPoint[nCount].y + 3, pFpbDlgData->UserPoint[nCount].x + 3); else Ellipse(hdcMemo, pFpbDlgData->UserPoint[nCount].x - 3, pFpbDlgData->UserPoint[nCount].y - 3, pFpbDlgData->UserPoint[nCount].x + 3, pFpbDlgData->UserPoint[nCount].y + 3); } hPen1 = CreatePen(PS_SOLID,0,RGB(255, 255, 255)); SelectObject(hdcMemo,hPen1); if(pFpbDlgData->uModFlag) { for(nCount = 0; nCount <= cxClient; nCount++) { pFpbDlgData->pShrCrvPnt[nCount].y = nCount; pFpbDlgData->pShrCrvPnt[nCount].x = cxClient - (L_INT) pFpbDlgData->pShrCrvelm[nCount]; } } else { for(nCount = 0; nCount <= cxClient; nCount++) { pFpbDlgData->pShrCrvPnt[nCount].x = nCount; pFpbDlgData->pShrCrvPnt[nCount].y = (L_INT) pFpbDlgData->pShrCrvelm[nCount]; } } Polyline(hdcMemo, pFpbDlgData->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_XYM_WAVSH_TXT), &ps); GetClientRect(GetDlgItem(hWnd , IDC_XYM_COLOR_TXT), &Rect); hdc = BeginPaint(GetDlgItem(hWnd, IDC_XYM_COLOR_TXT),&ps); hbrush = CreateSolidBrush( pFpbDlgData->crColor); FillRect(hdc, &Rect, Button_GetCheck(GetDlgItem(hWnd, IDC_XYM_FILLCOLOR_RAD)) ? hbrush : (HBRUSH) COLOR_WINDOW); DeleteBrush(hbrush); EndPaint(GetDlgItem(hWnd, IDC_XYM_COLOR_TXT), &ps); return FALSE; } static L_BOOL FpbDlg_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT uCodeNotify) { LPFPBDLGDATA pFpbDlgData; HWND hWndParent; L_INT nRangeMax[] = {100}; L_INT nRangeMin[] = {0}; HWND hCtl; pCHILDDATA pData; L_INT nValue; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if ((uCodeNotify == CBN_SELCHANGE ) && (id == IDC_XYM_WAVSH_COM)) { if (pFpbDlgData->uFlag != ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_XYM_WAVSH_COM))) { pFpbDlgData->uFlag = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_XYM_WAVSH_COM)); GetShearBuf(hWnd, pFpbDlgData); InvalidateRect(hWnd, NULL,FALSE); L_ApplyFilter(hWnd); } } switch (id) { case IDC_XYM_SCALE_EDT: if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, id, NULL,FALSE); if(nValue >= nRangeMin[0] && nValue <= nRangeMax[0]) { hCtl = GetDlgItem(hWnd,id + 1); Trackbar_SetPos (hCtl, TRUE, nValue); } else { hCtl = GetDlgItem(hWnd, id); nValue = Trackbar_GetPos(hCtl); } if( pFpbDlgData->uScale == (L_UINT)nValue) return TRUE; pFpbDlgData->uScale = nValue; L_ApplyFilter(hWnd); } break; case IDC_XYM_COLOR_BTN: crColor = pFpbDlgData->crColor; pFpbDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pFpbDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_FILLCOLOR_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFFF0) | FILL_CLR)) { EnableWindow(GetDlgItem(hWnd, IDC_XYM_COLOR_BTN), TRUE); pFpbDlgData->uColFlag &= 0xFFFFFFF0; pFpbDlgData->uColFlag |= FILL_CLR; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_REPTCOLOR_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFFF0) | FILL_RPT)) { EnableWindow(GetDlgItem(hWnd, IDC_XYM_COLOR_BTN), FALSE); pFpbDlgData->uColFlag &= 0xFFFFFFF0; pFpbDlgData->uColFlag |= FILL_RPT; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_VERT_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFF0F) | FPB_VERT)) { pFpbDlgData->uColFlag &= 0xFFFFFF0F; pFpbDlgData->uColFlag |= FPB_VERT; pFpbDlgData->uModFlag = FALSE; InvalidateRect(hWnd,NULL,FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_HORZ_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFF0F) | FPB_HORZ)) { pFpbDlgData->uColFlag &= 0xFFFFFF0F; pFpbDlgData->uColFlag |= FPB_HORZ; pFpbDlgData->uModFlag = FALSE; InvalidateRect(hWnd,NULL,FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_BOTH_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFF0F) | FPB_VRHZ)) { pFpbDlgData->uColFlag &= 0xFFFFFF0F; pFpbDlgData->uColFlag |= FPB_VRHZ; pFpbDlgData->uModFlag = FALSE; InvalidateRect(hWnd,NULL,FALSE); L_ApplyFilter(hWnd); } break; case IDC_XYM_NOCHANGE_RAD: if (pFpbDlgData->uColFlag != ((pFpbDlgData->uColFlag & 0xFFFFFFF0) | FILL_NOCHG)) { EnableWindow(GetDlgItem(hWnd, IDC_XYM_COLOR_BTN), FALSE); pFpbDlgData->uColFlag &= 0xFFFFFFF0; pFpbDlgData->uColFlag |= FILL_NOCHG; InvalidateRect(hWnd, NULL, 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; } return TRUE; } L_BOOL FpbDlg_OnLButtonUp (HWND hWnd, L_INT x, L_INT y, UINT keyFlags) { LPFPBDLGDATA pFpbDlgData; pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); ReleaseCapture(); if( pFpbDlgData->bChange || pFpbDlgData->bAdd || pFpbDlgData->bDel) { SetCursor(LoadCursor(NULL, IDC_SIZEALL)); pFpbDlgData->bChange = FALSE; pFpbDlgData->bAdd = FALSE; pFpbDlgData->bDel = FALSE; L_ApplyFilter(hWnd); } return TRUE; } L_BOOL FpbDlg_OnLButtonDown (HWND hWnd, BOOL fDoubleClick, L_INT x, L_INT y,UINT keyFlags) { POINT TmpPoint; RECT Rect; L_INT nyPos; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nTemp; LPFPBDLGDATA pFpbDlgData; pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; TmpPoint.x = x; TmpPoint.y = y; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &TmpPoint); if(pFpbDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&Rect, TmpPoint)) { nyPos = (L_INT) pFpbDlgData->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) pFpbDlgData->nUserPntCnt;nCount++) { SetRect(&Rect, pFpbDlgData->UserPoint[nCount].x - 5, pFpbDlgData->UserPoint[nCount].y - 30, pFpbDlgData->UserPoint[nCount].x + 5, pFpbDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint)) { pFpbDlgData->bChange = TRUE; pFpbDlgData->nPoint = nCount; if(TmpPoint.x < pFpbDlgData->UserPoint[0].x) { pFpbDlgData->nPoint= nCount; } if(TmpPoint.x > pFpbDlgData->UserPoint[ pFpbDlgData->nUserPntCnt - 1].x) pFpbDlgData->nPoint= pFpbDlgData->nUserPntCnt - 1; if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pFpbDlgData->nPoint, pFpbDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pFpbDlgData->nPoint, pFpbDlgData); GetShearBuf(hWnd, pFpbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); return TRUE; } } pFpbDlgData->nUserPntCnt++; AddPoint(TmpPoint.x, TmpPoint.y, pFpbDlgData); GetShearBuf(hWnd, pFpbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); return TRUE; } } return FALSE; } L_BOOL FpbDlg_OnMouseMove (HWND hWnd, L_INT x, L_INT y, UINT keyFlags) { POINT TmpPoint; RECT Rect; L_INT nyPos; L_INT cxClient; L_INT cyClient; L_INT nCount, nTemp; L_BOOL bCurs = FALSE; LPFPBDLGDATA pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; TmpPoint.x = x; TmpPoint.y = y; ClientToScreen(hWnd, &TmpPoint); ScreenToClient(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &TmpPoint); if(pFpbDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&Rect, TmpPoint)) { nyPos = (L_INT) pFpbDlgData->pShrCrvelm[TmpPoint.x]; if(TmpPoint.y < nyPos + 30 && TmpPoint.y > nyPos - 30) { SetCursor(LoadCursor(NULL, IDC_CROSS)); } for(nCount = 0; nCount <= (L_INT) pFpbDlgData->nUserPntCnt; nCount++) { SetRect(&Rect, pFpbDlgData->UserPoint[nCount].x - 5, pFpbDlgData->UserPoint[nCount].y - 30, pFpbDlgData->UserPoint[nCount].x + 5, pFpbDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint)) { bCurs = TRUE; break; } } if(bCurs) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); if( pFpbDlgData->bChange) { if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pFpbDlgData->nPoint, pFpbDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pFpbDlgData->nPoint, pFpbDlgData); GetShearBuf(hWnd, pFpbDlgData); InvalidateRect(hWnd, NULL,FALSE); //L_ApplyFilter(hWnd); } return FALSE; } return FALSE; } static L_BOOL FpbDlg_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { SetDlgItemInt(hWnd, IDC_XYM_SCALE_EDT, Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPFPBDLGDATA pFpbDlgData; RECT Rect; L_INT cxClient, cyClient, i; L_INT L_FAR * pBuf = NULL; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pFpbDlgData = (LPFPBDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &Rect); pBuf = (L_INT L_FAR *)malloc((Rect.right - Rect.left + 1)* sizeof(L_INT)); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; for(i = 0; i <= cxClient; i++) { pBuf[i] = min(1000, max( -1000, pFpbDlgData->pBuf[i] / ((cyClient)/2))); } FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pFpbDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_FreePlaneBendBitmap(&pData->LeadBitmap, pBuf, cxClient + 1, pFpbDlgData->uScale, pFpbDlgData->crColor, pFpbDlgData->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 x, L_INT y, L_INT Point, LPFPBDLGDATA pFpbDlgData) { if(Point == 0 || Point == (L_INT) pFpbDlgData->nUserPntCnt - 1) { if(Point == (L_INT) pFpbDlgData->nUserPntCnt-1 && x < pFpbDlgData->UserPoint[ pFpbDlgData->nUserPntCnt - 2].x + 5) return TRUE; if(Point == 0 && x > pFpbDlgData->UserPoint[1].x - 5) return TRUE; pFpbDlgData->UserPoint[Point].y = y; return TRUE; } if(x <= pFpbDlgData->UserPoint[Point-1].x || x >= pFpbDlgData->UserPoint[Point+1].x) return FALSE; pFpbDlgData->UserPoint[Point].x = x; pFpbDlgData->UserPoint[Point].y = y; return TRUE; } static L_VOID DeleteUserPoint(L_INT x, L_INT y, L_INT Point, LPFPBDLGDATA pFpbDlgData) { L_INT nCount; if (Point == 0 || Point == (L_INT) pFpbDlgData->nUserPntCnt) return; pFpbDlgData->bDel = TRUE; for(nCount = Point; nCount < (L_INT) pFpbDlgData->nUserPntCnt; nCount++) { pFpbDlgData->UserPoint[nCount].x = pFpbDlgData->UserPoint[nCount+1].x; pFpbDlgData->UserPoint[nCount].y = pFpbDlgData->UserPoint[nCount+1].y; } pFpbDlgData->bChange = FALSE; pFpbDlgData->nUserPntCnt--; } L_VOID GetShearBuf(HWND hWnd, LPFPBDLGDATA pFpbDlgData) { RECT Rect; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nPtCurveNo; GetClientRect(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; L_GetCurvePoints( pFpbDlgData->pBuf, pFpbDlgData->UserPoint, pFpbDlgData->nUserPntCnt, &nPtCurveNo, pFpbDlgData->uFlag); for(nCount = 0;nCount <= nPtCurveNo;nCount++) { pFpbDlgData->pBuf[nCount] = min((cyClient) * 1000, max(0, pFpbDlgData->pBuf[nCount])); pFpbDlgData->pShrCrvelm[nCount] = min((cyClient), max(0, pFpbDlgData->pBuf[nCount]/1000)); pFpbDlgData->pBuf[nCount] = (cyClient/2) * 1000 - pFpbDlgData->pBuf[nCount]; } } L_VOID AddPoint(L_INT x, L_INT y, LPFPBDLGDATA pFpbDlgData) { L_INT nCount; L_INT nShift; for(nCount = 0;nCount < (L_INT) pFpbDlgData->nUserPntCnt;nCount++) { if (x < pFpbDlgData->UserPoint[nCount].x) break; } for(nShift = pFpbDlgData->nUserPntCnt - 1;nShift > nCount;nShift--) { pFpbDlgData->UserPoint[nShift].x = pFpbDlgData->UserPoint[nShift - 1].x; pFpbDlgData->UserPoint[nShift].y = pFpbDlgData->UserPoint[nShift - 1].y; } pFpbDlgData->UserPoint[nCount].x = x; pFpbDlgData->UserPoint[nCount].y = y; pFpbDlgData->nPoint = nCount; pFpbDlgData->bChange= TRUE; pFpbDlgData->bAdd= FALSE; } L_VOID InitUserPoint(HWND hWnd, LPFPBDLGDATA pFpbDlgData) { L_INT nCount; RECT Rect; GetClientRect(GetDlgItem(hWnd, IDC_XYM_WAVSH_TXT), &Rect); for(nCount = 0; nCount <= 3; nCount++) { pFpbDlgData->UserPoint[0].x = 0; pFpbDlgData->UserPoint[0].y = (Rect.bottom - Rect.top)/2; pFpbDlgData->UserPoint[1].x = (Rect.right - Rect.left); pFpbDlgData->UserPoint[1].y = (Rect.bottom - Rect.top)/2; } }