/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL ShearDialog_OnPaint (HWND); static L_BOOL ShearDialog_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify); static L_BOOL ShearDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL ShearDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL ShearDialog_OnLButtonUp (HWND, L_INT, L_INT, UINT); static L_BOOL ShearDialog_OnLButtonDown(HWND, BOOL , L_INT, L_INT, UINT); static L_BOOL ShearDialog_OnMouseMove (HWND hWnd, L_INT x, L_INT y, UINT keyFlags); static L_VOID ShearDialog_OnTimer (HWND hWnd, L_INT ID); static L_BOOL ChangeUserPoints (L_INT, L_INT, L_INT, LPSHRDLGDATA); static L_VOID DeleteUserPoint (L_INT, L_INT, L_INT, LPSHRDLGDATA ); static L_VOID GetShearBuf (HWND hWnd, LPSHRDLGDATA pShrDlgData); static L_VOID AddPoint (L_INT x, L_INT y, LPSHRDLGDATA pShrDlgData); static L_VOID InitUserPoint (HWND hWnd, LPSHRDLGDATA pShrDlgData); static L_VOID L_ApplyFilter (HWND hWnd); #define SHR_CURVE 0x0000 #define SHR_LINE 0x0001 #define GUB_CURVE 0x0000 #define GUB_LINEAR 0x0001 #define SHR_HORZ 0x0000 #define SHR_VERT 0x0010 L_BOOL CALLBACK ShearDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, ShearDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, ShearDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, ShearDialog_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, ShearDialog_OnPaint); HANDLE_MSG (hWnd, WM_MOUSEMOVE, ShearDialog_OnMouseMove); HANDLE_MSG (hWnd, WM_LBUTTONDOWN,ShearDialog_OnLButtonDown); HANDLE_MSG (hWnd, WM_LBUTTONUP, ShearDialog_OnLButtonUp); HANDLE_MSG (hWnd, WM_TIMER, ShearDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL ShearDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPSHRDLGDATA pShrDlgData; HWND hWndParent; pCHILDDATA pData; RECT Rect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pShrDlgData = (LPSHRDLGDATA)lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd,GWL_USERDATA,(LONG) pShrDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pShrDlgData->Bitmap); MakeRectangleWindow (hWnd, IDC_SHR_WAVSH_TXT); // MoveWindow (GetDlgItem(hWnd, IDC_SHR_WAVSH_TXT),280,12, 145, 145,TRUE); Trackbar_SetRange(GetDlgItem(hWnd, IDC_SHR_SCALE_SLD), FALSE, 0,100); Trackbar_SetPos (GetDlgItem(hWnd, IDC_SHR_SCALE_SLD), TRUE, 50); Button_SetCheck(GetDlgItem(hWnd, IDC_SHR_FILLCOLOR_RAD), TRUE); Button_SetCheck(GetDlgItem(hWnd, IDC_SHR_VERT_RAD), TRUE); ComboBox_AddString(GetDlgItem(hWnd,IDC_SHR_WAVSH_COM), TEXT("Curve")); ComboBox_AddString(GetDlgItem(hWnd,IDC_SHR_WAVSH_COM), TEXT("Line")); ComboBox_SetCurSel(GetDlgItem(hWnd,IDC_SHR_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_SHR_PROG); GetClientRect(GetDlgItem(hWnd , IDC_SHR_WAVSH_TXT), &Rect); pShrDlgData->pShrCrvelm = (L_INT L_FAR *)malloc((Rect.right - Rect.left + 1)* sizeof(L_INT)); pShrDlgData->pBuf = (L_INT L_FAR *)malloc((Rect.right - Rect.left + 1)* sizeof(L_INT)); pShrDlgData->pShrCrvPnt = (LPPOINT)malloc((Rect.right - Rect.left + 1)* 2 * sizeof(long)); pShrDlgData->nUserPntCnt= 2; InitUserPoint(hWnd, pShrDlgData); GetShearBuf(hWnd, pShrDlgData); SetDlgItemInt(hWnd, IDC_SHR_SCALE_EDT, 50, FALSE); SetNumericEditBox(GetDlgItem(hWnd, IDC_SHR_SCALE_EDT), 0, 100, 1, 0, FALSE); pShrDlgData->nPostionH[0] = 50; Trackbar_SetPos (GetDlgItem(hWnd, IDC_SHR_SCALE_SLD), TRUE, 50); pShrDlgData->uScale = 50; pShrDlgData->uFreq = 0; pShrDlgData->nAngle = 0; pShrDlgData->uModFlag = FALSE; pShrDlgData->bDel = FALSE; pShrDlgData->bAdd = FALSE; pShrDlgData->bChange = FALSE; pShrDlgData->uColFlag = FILL_CLR | SHR_VERT; pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return ( TRUE ); } static L_VOID ShearDialog_OnTimer (HWND hWnd, L_INT ID) { Dialog_Timer(ID); } static L_BOOL ShearDialog_OnPaint (HWND hWnd) { PAINTSTRUCT ps; HDC hdc,hdcMemo; RECT Rect; L_INT cxClient, cyClient; HBITMAP hBitmap; HPEN hPen, hPen1; HBRUSH hbrush; L_INT nCount; LPSHRDLGDATA pShrDlgData; pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_SHR_WAVSH_TXT), &Rect); cxClient = Rect.right - Rect.left; cyClient = Rect.bottom - Rect.top; hdc = BeginPaint(GetDlgItem(hWnd, IDC_SHR_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) pShrDlgData->nUserPntCnt;nCount++) { if(pShrDlgData->uModFlag) Ellipse(hdcMemo, cxClient - pShrDlgData->UserPoint[nCount].y - 3, pShrDlgData->UserPoint[nCount].x - 3, cxClient - pShrDlgData->UserPoint[nCount].y + 3, pShrDlgData->UserPoint[nCount].x + 3); else Ellipse(hdcMemo, pShrDlgData->UserPoint[nCount].x - 3, pShrDlgData->UserPoint[nCount].y - 3, pShrDlgData->UserPoint[nCount].x + 3, pShrDlgData->UserPoint[nCount].y + 3); } hPen1 = CreatePen(PS_SOLID,0,RGB(255, 255, 255)); SelectObject(hdcMemo,hPen1); if(pShrDlgData->uModFlag) { for(nCount = 0; nCount <= cxClient; nCount++) { pShrDlgData->pShrCrvPnt[nCount].y = nCount; pShrDlgData->pShrCrvPnt[nCount].x = cxClient - (L_INT) pShrDlgData->pShrCrvelm[nCount]; } } else { for(nCount = 0; nCount <= cxClient; nCount++) { pShrDlgData->pShrCrvPnt[nCount].x = nCount; pShrDlgData->pShrCrvPnt[nCount].y = (L_INT) pShrDlgData->pShrCrvelm[nCount]; } } Polyline(hdcMemo, pShrDlgData->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_SHR_WAVSH_TXT), &ps); GetClientRect(GetDlgItem(hWnd , IDC_SHR_COLOR_TXT), &Rect); hdc = BeginPaint(GetDlgItem(hWnd, IDC_SHR_COLOR_TXT),&ps); hbrush = CreateSolidBrush( pShrDlgData->crColor); FillRect(hdc, &Rect, Button_GetCheck(GetDlgItem(hWnd, IDC_SHR_FILLCOLOR_RAD)) ? hbrush : (HBRUSH) COLOR_WINDOW); DeleteBrush(hbrush); EndPaint(GetDlgItem(hWnd, IDC_SHR_COLOR_TXT), &ps); return FALSE; } static L_BOOL ShearDialog_OnCommand (HWND hWnd, L_INT id, HWND hWndCtl, L_UINT codeNotify) { LPSHRDLGDATA pShrDlgData; 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); pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if ((codeNotify == CBN_SELCHANGE ) && (id == IDC_SHR_WAVSH_COM)) { if (pShrDlgData->uFlag != ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_SHR_WAVSH_COM))) { pShrDlgData->uFlag = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_SHR_WAVSH_COM)); GetShearBuf(hWnd, pShrDlgData); InvalidateRect(hWnd, NULL,FALSE); L_ApplyFilter (hWnd); } } switch (id) { case IDC_SHR_SCALE_EDT: if(codeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, id, NULL,FALSE); if(nValue >= nRangeMin[0] && nValue <= nRangeMax[0]) { hCtl = GetDlgItem(hWnd,id + 1); pShrDlgData->nPostionH[0] = nValue; Trackbar_SetPos (hCtl, TRUE, nValue); } else { hCtl = GetDlgItem(hWnd, id); nValue = Trackbar_GetPos(hCtl); } if( pShrDlgData->uScale == (L_UINT)nValue) return TRUE; pShrDlgData->uScale = nValue; L_ApplyFilter (hWnd); } break; case IDC_SHR_COLOR_BTN: crColor = pShrDlgData->crColor; pShrDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pShrDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDC_SHR_VERT_RAD: if (pShrDlgData->uColFlag != ((pShrDlgData->uColFlag & 0xFFFFFF0F) | SHR_VERT)) { pShrDlgData->uColFlag &= 0xFFFFFF0F; pShrDlgData->uColFlag |= SHR_VERT; pShrDlgData->uModFlag = FALSE; InvalidateRect(hWnd,NULL,FALSE); L_ApplyFilter (hWnd); } break; case IDC_SHR_HORZ_RAD: if (pShrDlgData->uColFlag != ((pShrDlgData->uColFlag & 0xFFFFFF0F) | SHR_HORZ)) { pShrDlgData->uColFlag &= 0xFFFFFF0F; pShrDlgData->uColFlag |= SHR_HORZ; pShrDlgData->uModFlag = TRUE; InvalidateRect(hWnd,NULL,FALSE); L_ApplyFilter (hWnd); } break; case IDC_SHR_FILLCOLOR_RAD: if (pShrDlgData->uColFlag != ((pShrDlgData->uColFlag & 0xFFFFFFF0) | FILL_CLR)) { EnableWindow(GetDlgItem(hWnd, IDC_SHR_COLOR_BTN), TRUE); pShrDlgData->uColFlag &= 0xFFFFFFF0; pShrDlgData->uColFlag |= FILL_CLR; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDC_SHR_REPTCOLOR_RAD: if (pShrDlgData->uColFlag != ((pShrDlgData->uColFlag & 0xFFFFFFF0) | FILL_RPT)) { EnableWindow(GetDlgItem(hWnd, IDC_SHR_COLOR_BTN), FALSE); pShrDlgData->uColFlag &= 0xFFFFFFF0; pShrDlgData->uColFlag |= FILL_RPT; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDC_SHR_NOCHANGE_RAD: if (pShrDlgData->uColFlag != ((pShrDlgData->uColFlag & 0xFFFFFFF0) | FILL_NOCHG)) { EnableWindow(GetDlgItem(hWnd, IDC_SHR_COLOR_BTN), FALSE); pShrDlgData->uColFlag &= 0xFFFFFFF0; pShrDlgData->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 ShearDialog_OnLButtonUp (HWND hWnd, L_INT x, L_INT y, UINT keyFlags) { LPSHRDLGDATA pShrDlgData; pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); ReleaseCapture(); if( pShrDlgData->bChange || pShrDlgData->bAdd || pShrDlgData->bDel) { SetCursor(LoadCursor(NULL, IDC_SIZEALL)); pShrDlgData->bChange = FALSE; pShrDlgData->bAdd = FALSE; pShrDlgData->bDel = FALSE; L_ApplyFilter (hWnd); } return TRUE; } L_BOOL ShearDialog_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; LPSHRDLGDATA pShrDlgData; pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_SHR_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_SHR_WAVSH_TXT), &TmpPoint); if(pShrDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&Rect, TmpPoint)) { nyPos = (L_INT) pShrDlgData->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) pShrDlgData->nUserPntCnt;nCount++) { SetRect(&Rect, pShrDlgData->UserPoint[nCount].x - 5, pShrDlgData->UserPoint[nCount].y - 30, pShrDlgData->UserPoint[nCount].x + 5, pShrDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint)) { pShrDlgData->bChange = TRUE; pShrDlgData->nPoint = nCount; if(TmpPoint.x < pShrDlgData->UserPoint[0].x) { pShrDlgData->nPoint= nCount; } if(TmpPoint.x > pShrDlgData->UserPoint[ pShrDlgData->nUserPntCnt - 1].x) pShrDlgData->nPoint= pShrDlgData->nUserPntCnt - 1; if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pShrDlgData->nPoint, pShrDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pShrDlgData->nPoint, pShrDlgData); GetShearBuf(hWnd, pShrDlgData); InvalidateRect(hWnd, NULL,FALSE); return TRUE; } } pShrDlgData->nUserPntCnt++; AddPoint(TmpPoint.x, TmpPoint.y, pShrDlgData); GetShearBuf(hWnd, pShrDlgData); InvalidateRect(hWnd, NULL,FALSE); return TRUE; } } return FALSE; } L_BOOL ShearDialog_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; LPSHRDLGDATA pShrDlgData; pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_SHR_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_SHR_WAVSH_TXT), &TmpPoint); if(pShrDlgData->uModFlag) { nTemp = cxClient - TmpPoint.x; TmpPoint.x = TmpPoint.y; TmpPoint.y = nTemp; } if (PtInRect(&Rect, TmpPoint)) { nyPos = (L_INT) pShrDlgData->pShrCrvelm[TmpPoint.x]; if(TmpPoint.y < nyPos + 30 && TmpPoint.y > nyPos - 30) { SetCursor(LoadCursor(NULL, IDC_CROSS)); } for(nCount = 0; nCount <= (L_INT) pShrDlgData->nUserPntCnt; nCount++) { SetRect(&Rect, pShrDlgData->UserPoint[nCount].x - 5, pShrDlgData->UserPoint[nCount].y - 30, pShrDlgData->UserPoint[nCount].x + 5, pShrDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint)) { bCurs = TRUE; break; } } if(bCurs) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); if( pShrDlgData->bChange) { if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pShrDlgData->nPoint, pShrDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pShrDlgData->nPoint, pShrDlgData); GetShearBuf(hWnd, pShrDlgData); InvalidateRect(hWnd, NULL,FALSE); } return FALSE; } return FALSE; } static L_BOOL ShearDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { SetDlgItemInt(hWnd, IDC_SHR_SCALE_EDT, Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPSHRDLGDATA pShrDlgData; RECT Rect; L_INT cxClient, cyClient, i; L_INT L_FAR * pBuf = NULL; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pShrDlgData = (LPSHRDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_SHR_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, pShrDlgData->pBuf[i] / ((cyClient)/2))); } FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pShrDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_FreeHandShearBitmap (&pData->LeadBitmap, pBuf, cxClient + 1, pShrDlgData->uScale, pShrDlgData->crColor, pShrDlgData->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, LPSHRDLGDATA pShrDlgData) { if(Point == 0 || Point == (L_INT) pShrDlgData->nUserPntCnt - 1) { if(Point == (L_INT) pShrDlgData->nUserPntCnt-1 && x < pShrDlgData->UserPoint[ pShrDlgData->nUserPntCnt - 2].x + 5) return TRUE; if(Point == 0 && x > pShrDlgData->UserPoint[1].x - 5) return TRUE; pShrDlgData->UserPoint[Point].y = y; return TRUE; } if(x <= pShrDlgData->UserPoint[Point-1].x || x >= pShrDlgData->UserPoint[Point+1].x) return FALSE; pShrDlgData->UserPoint[Point].x = x; pShrDlgData->UserPoint[Point].y = y; return TRUE; } static L_VOID DeleteUserPoint(L_INT x, L_INT y, L_INT Point, LPSHRDLGDATA pShrDlgData) { L_INT nCount; if (Point == 0 || Point == (L_INT) pShrDlgData->nUserPntCnt) return; pShrDlgData->bDel = TRUE; for(nCount = Point; nCount < (L_INT) pShrDlgData->nUserPntCnt; nCount++) { pShrDlgData->UserPoint[nCount].x = pShrDlgData->UserPoint[nCount+1].x; pShrDlgData->UserPoint[nCount].y = pShrDlgData->UserPoint[nCount+1].y; } pShrDlgData->bChange = FALSE; pShrDlgData->nUserPntCnt--; } L_VOID GetShearBuf(HWND hWnd, LPSHRDLGDATA pShrDlgData) { RECT Rect; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nPtCurveNo; GetClientRect(GetDlgItem(hWnd, IDC_SHR_WAVSH_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; L_GetCurvePoints( pShrDlgData->pBuf, pShrDlgData->UserPoint, pShrDlgData->nUserPntCnt, &nPtCurveNo, pShrDlgData->uFlag); for(nCount = 0;nCount <= nPtCurveNo;nCount++) { pShrDlgData->pBuf[nCount] = min((cyClient) * 1000, max(0, pShrDlgData->pBuf[nCount])); pShrDlgData->pShrCrvelm[nCount] = min((cyClient), max(0, pShrDlgData->pBuf[nCount]/1000)); pShrDlgData->pBuf[nCount] = (cyClient/2) * 1000 - pShrDlgData->pBuf[nCount]; } } L_VOID AddPoint(L_INT x, L_INT y, LPSHRDLGDATA pShrDlgData) { L_INT nCount; L_INT nShift; for(nCount = 0;nCount < (L_INT) pShrDlgData->nUserPntCnt;nCount++) { if (x < pShrDlgData->UserPoint[nCount].x) break; } for(nShift = pShrDlgData->nUserPntCnt - 1;nShift > nCount;nShift--) { pShrDlgData->UserPoint[nShift].x = pShrDlgData->UserPoint[nShift - 1].x; pShrDlgData->UserPoint[nShift].y = pShrDlgData->UserPoint[nShift - 1].y; } pShrDlgData->UserPoint[nCount].x = x; pShrDlgData->UserPoint[nCount].y = y; pShrDlgData->nPoint = nCount; pShrDlgData->bChange= TRUE; pShrDlgData->bAdd= FALSE; } L_VOID InitUserPoint(HWND hWnd, LPSHRDLGDATA pShrDlgData) { L_INT nCount; RECT Rect; GetClientRect(GetDlgItem(hWnd, IDC_SHR_WAVSH_TXT), &Rect); for(nCount = 0; nCount <= 3; nCount++) { pShrDlgData->UserPoint[0].x = 0; pShrDlgData->UserPoint[0].y = (Rect.bottom - Rect.top)/2; pShrDlgData->UserPoint[1].x = (Rect.right - Rect.left); pShrDlgData->UserPoint[1].y = (Rect.bottom - Rect.top)/2; } }