/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL BumpDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL BumpDialog_OnPaint (HWND hWnd); static L_BOOL BumpDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL BumpDialog_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags); static L_BOOL BumpDialog_OnLButtonDown(HWND hWnd, BOOL fDoubleClick, L_INT nX, L_INT nY,UINT uKeyFlags); static L_BOOL BumpDialog_OnLButtonUp (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags); static L_BOOL BumpDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL BumpDialog_OnVScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_VOID BumpDialog_OnTimer (HWND hWnd, L_INT nID); static L_VOID GetFunctinalTable (HWND hWnd, L_BOOL bInit, LPBMPDLGDATA pBmpDlgData); static L_VOID InitPolygon (HWND hWnd, LPBMPDLGDATA pBmpDlgData); static L_VOID GetLookTable (HWND hWnd, LPBMPDLGDATA pBmpDlgData); static L_VOID AddArrayPoint (L_INT nX, L_INT nY, LPBMPDLGDATA pBmpDlgData); static L_BOOL ChangeUserPoints (L_INT nX, L_INT nY, L_INT Point, LPBMPDLGDATA pBmpDlgData); static L_VOID DeleteUserPoint (L_INT nX, L_INT nY, L_INT Point, LPBMPDLGDATA pBmpDlgData); static L_VOID GetTable (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_BOOL CALLBACK BumpsEnum (HWND hWnd, LPARAM lParam); static L_VOID GetBumpImages (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK BumpDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_INITDIALOG, BumpDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_PAINT, BumpDialog_OnPaint); HANDLE_MSG (hWnd, WM_COMMAND, BumpDialog_OnCommand); HANDLE_MSG (hWnd, WM_MOUSEMOVE, BumpDialog_OnMouseMove); HANDLE_MSG (hWnd, WM_LBUTTONDOWN,BumpDialog_OnLButtonDown); HANDLE_MSG (hWnd, WM_LBUTTONUP, BumpDialog_OnLButtonUp); HANDLE_MSG (hWnd, WM_HSCROLL, BumpDialog_OnHScroll); HANDLE_MSG (hWnd, WM_VSCROLL, BumpDialog_OnVScroll); HANDLE_MSG (hWnd, WM_TIMER, BumpDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL BumpDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPBMPDLGDATA pBmpDlgData; HWND hWndParent; pCHILDDATA pData; RECT rcRect, ElvRect, rcButton; L_INT nRangeMax[] = { 100 , 100 , 100, 0, 0, 0, 1000, 1000}; L_INT nRangeMin[] = { 1, 1 , 1, 0, 0, 0, -1000, -1000}; L_INT nPosInit [] = { 1, 1, 0, 0, 0, 0, 0, 0}; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pBmpDlgData = (LPBMPDLGDATA)lParam; MoveDialogToMiddle(hWnd); MakeRectangleWindow(hWnd, IDC_BMP_CRV_TXT); //MoveWindow (GetDlgItem(hWnd, IDC_BMP_CRV_TXT), 20, 325, 160, 160,TRUE); SetWindowLong(hWnd,GWL_USERDATA,(LONG)pBmpDlgData); pBmpDlgData->bAdvance = TRUE; GetBumpImages(hWnd); GetClientRect(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &ElvRect); StatusProc.bKillProgress = FALSE; StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_BMP_PROG); GetWindowRect(GetDlgItem(hWnd, IDC_BMP_INV_TXT), &rcRect); GetWindowRect(GetDlgItem(hWnd, IDOK), &rcButton); pBmpDlgData->nDistance = rcButton.top - rcRect.bottom; Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pBmpDlgData->Bitmap); pBmpDlgData->nSlideNum = 8; pBmpDlgData->nSldBaseID = IDC_BMP_FAC_SLD; pBmpDlgData->nEdtBaseID = IDC_BMP_FAC_EDT; nRangeMax[2] = pBmpDlgData->Bitmap.Width; nRangeMax[3] = pBmpDlgData->Bitmap.Height; nRangeMax[4] = pBmpDlgData->Bitmap.Width; nRangeMax[5] = pBmpDlgData->Bitmap.Height; nRangeMin[2] = - 1 * pBmpDlgData->Bitmap.Width; nRangeMin[3] = - 1 * pBmpDlgData->Bitmap.Height; nRangeMin[4] = - 1 * pBmpDlgData->Bitmap.Width; nRangeMin[5] = - 1 * pBmpDlgData->Bitmap.Height; pBmpDlgData->nFactor = 1; pBmpDlgData->BumpData.uDepth = 1; pBmpDlgData->BumpData.nXOffset = 0; pBmpDlgData->BumpData.nYOffset = 0; pBmpDlgData->BumpData.nXDst = 0; pBmpDlgData->BumpData.nYDst = 0; pBmpDlgData->BumpData.nBright = 0; pBmpDlgData->BumpData.nIntensity = 0; pBmpDlgData->BumpData.nAzimuth = 0; pBmpDlgData->BumpData.uElevation = 10; pBmpDlgData->nEleExt = 0; pBmpDlgData->nAzmPnt.x = ElvRect.right; pBmpDlgData->nAzmPnt.y = ElvRect.bottom / 2; InitPolygon(hWnd, pBmpDlgData); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &rcRect); pBmpDlgData->BumpData.pLut = NULL; pBmpDlgData->pCurveTable = (L_UINT L_FAR *)malloc((rcRect.right - rcRect.left + 1) * sizeof(L_UINT)); pBmpDlgData->uLUTLen = 255; pBmpDlgData->BumpData.pLut = (L_UINT L_FAR *)malloc((pBmpDlgData->uLUTLen + 1) * sizeof(L_UINT)); pBmpDlgData->bEleChange = FALSE; pBmpDlgData->bChange = FALSE; pBmpDlgData->bOper = TRUE; pBmpDlgData->nFactor = 1; pBmpDlgData->aptCurve = (POINT L_FAR *)malloc((rcRect.right - rcRect.left + 1) * 2 *sizeof(LONG)); pBmpDlgData->nUserPntCnt = 2; pBmpDlgData->nPostionV = 0; ComboBox_AddString(GetDlgItem(hWnd, IDC_BMP_OPR_COM), TEXT("Exp")); ComboBox_AddString(GetDlgItem(hWnd, IDC_BMP_OPR_COM), TEXT("Ln")); ComboBox_AddString(GetDlgItem(hWnd, IDC_BMP_OPR_COM), TEXT("Linear")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_BMP_OPR_COM), 0); GetFunctinalTable(hWnd, TRUE, pBmpDlgData); BumpDialog_OnCommand(hWnd, IDC_BMP_ADV_BTN, GetDlgItem(hWnd, IDC_BMP_ADV_BTN), 0); UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); SetDlgItemInt(hWnd, IDC_BMP_AZM_EDT, pBmpDlgData->BumpData.nAzimuth, FALSE); SetNumericEditBox(GetDlgItem(hWnd, IDC_BMP_AZM_EDT), -360, 360, 1, 0, FALSE); SetDlgItemInt(hWnd, IDC_BMP_ELV_EDT, pBmpDlgData->BumpData.uElevation, FALSE); SetNumericEditBox(GetDlgItem(hWnd, IDC_BMP_ELV_EDT), 0, 180, 1, 0, FALSE); for (nSlider = 0; nSlider < pBmpDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pBmpDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); Trackbar_SetPos(GetDlgItem(hWnd, pBmpDlgData->nSldBaseID + nSlider), TRUE, nPosInit[nSlider]); SetNumericEditBox(GetDlgItem(hWnd, pBmpDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); SetDlgItemInt(hWnd, pBmpDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); Trackbar_SetPageSize(GetDlgItem(hWnd, pBmpDlgData->nSldBaseID + nSlider), max(1, (nRangeMax[nSlider] - nRangeMin[nSlider] + 5)/10)); Trackbar_SetLineSize(GetDlgItem(hWnd, pBmpDlgData->nSldBaseID + nSlider), max(1, (nRangeMax[nSlider] - nRangeMin[nSlider] + 50)/100)); } pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont) ; #endif// UNICODE InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); return ( TRUE ); } static L_VOID BumpDialog_OnTimer(HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL BumpDialog_OnPaint(HWND hWnd) { LPBMPDLGDATA pBmpDlgData; HWND hWndParent; pCHILDDATA pData; pBITMAPHANDLE pThumb; HPALETTE hPalette, hSavedPalette; RECT rcImage; PAINTSTRUCT ps; HDC hdc, hdcMemo; RECT Rect; L_INT cxClient, cyClient; HBITMAP hBitmap; HPEN hPen, hPen1; HBRUSH hbrush; L_INT nCount; L_INT nIndex; pCHILDDATA pBumpImgData = NULL; L_INT nRet; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hdc = BeginPaint(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &ps); GetClientRect(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &rcImage); Rectangle(hdc, rcImage.left, rcImage.top, rcImage.right, rcImage.bottom); nRet = Ellipse(hdc, rcImage.left, rcImage.bottom - rcImage.bottom/6, rcImage.right, rcImage.bottom); cxClient = rcImage.right - rcImage.left; cyClient = rcImage.bottom - rcImage.top; MoveToEx(hdc, cxClient/2, cyClient - cyClient/12, NULL); LineTo(hdc, cxClient/2, cyClient/4); MoveToEx(hdc, cxClient/2, (cyClient - cyClient/12), NULL); LineTo(hdc, pBmpDlgData->nELePnt.x, pBmpDlgData->nELePnt.y); EndPaint(GetDlgItem(hWnd, IDC_BMP_ELV_TXT),&ps); hdc = BeginPaint(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &ps); GetClientRect(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &rcImage); nRet = Ellipse(hdc, rcImage.left, rcImage.top, rcImage.right, rcImage.bottom); cxClient = rcImage.right - rcImage.left; cyClient = rcImage.bottom - rcImage.top; MoveToEx(hdc, cxClient/2, cyClient/2, NULL); LineTo(hdc, pBmpDlgData->nAzmPnt.x, pBmpDlgData->nAzmPnt.y); EndPaint(GetDlgItem(hWnd, IDC_BMP_AZM_TXT),&ps); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); cxClient = Rect.right - Rect.left; cyClient = Rect.bottom - Rect.top; hdc = BeginPaint(GetDlgItem(hWnd, IDC_BMP_CRV_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(30,130,30)); SelectObject(hdcMemo,hPen); for(nCount = 0;nCount <= 8; nCount++) { MoveToEx(hdcMemo, 1,nCount * (cyClient-1)/8, NULL); LineTo(hdcMemo,nCount * (cxClient-1), nCount * cyClient/8); } for(nCount = 0; nCount <= 8; nCount++) { MoveToEx(hdcMemo, nCount * (cxClient-1)/8, 0, NULL); LineTo(hdcMemo, nCount * (cxClient-1)/8, cyClient); } hbrush = CreateSolidBrush(RGB(255, 255, 0)); SelectObject(hdcMemo, hbrush); if(!pBmpDlgData->bOper) { for(nCount=0;nCount < pBmpDlgData->nUserPntCnt; nCount++) { Ellipse(hdcMemo, pBmpDlgData->UserPoint[nCount].x - 3, pBmpDlgData->UserPoint[nCount].y - 3, pBmpDlgData->UserPoint[nCount].x + 3, pBmpDlgData->UserPoint[nCount].y + 3); } } hPen1 = CreatePen(PS_DOT, 0, RGB(0, 0, 0)); SelectObject(hdcMemo, hPen1); Polyline(hdcMemo, pBmpDlgData->aptCurve,cxClient + 1); StretchBlt(hdc, 0, 0, cxClient, cyClient, hdcMemo, 0, 0, cxClient, cyClient, SRCCOPY); DeleteDC(hdcMemo); DeleteObject (hBitmap); DeleteObject (hPen1); DeleteObject (hbrush); DeleteObject (hPen); EndPaint(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &ps); nIndex = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_BMP_IMG_COM)); pBumpImgData= (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_BMP_IMG_COM), nIndex); if(&pData->LeadBitmap == &pBumpImgData->LeadBitmap) pThumb = &pBmpDlgData->Bitmap; else pThumb = &pBumpImgData->LeadBitmap; if(pBumpImgData) { hdc = BeginPaint(GetDlgItem(hWnd, IDC_BMP_IMG_TXT), &ps); hPalette = L_CreatePaintPalette(hdc, pThumb); if (hPalette) { hSavedPalette = SelectPalette (hdc, hPalette, FALSE); RealizePalette (hdc); } GetClientRect(GetDlgItem(hWnd, IDC_BMP_IMG_TXT), &rcImage); FillRect(hdc, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, pThumb, &Rect); L_PaintDC(hdc, pThumb, NULL, NULL, &Rect, &ps.rcPaint,SRCCOPY); if (hSavedPalette) SelectPalette (hdc, hSavedPalette, FALSE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_BMP_IMG_TXT),&ps); } return FALSE; } static L_BOOL BumpDialog_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags) { pCHILDDATA pData; HWND hWndParent; POINT TmpPoint; RECT Rect; L_INT nTempint; L_INT cxClient; L_INT cyClient; L_INT nCount; L_BOOL bCurs = FALSE; L_DOUBLE dTheta; L_INT nAngle; LPBMPDLGDATA pBmpDlgData; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &TmpPoint); if (PtInRect(&Rect, TmpPoint) && !pBmpDlgData->bOper) { nTempint = pBmpDlgData->aptCurve[TmpPoint.x].y; if(TmpPoint.y < nTempint + 30 && TmpPoint.y > nTempint - 30) { SetCursor(LoadCursor(NULL, IDC_CROSS)); } for(nCount = 0; nCount <= (L_INT)pBmpDlgData->nUserPntCnt; nCount++) { SetRect(&Rect, pBmpDlgData->UserPoint[nCount].x - 5, pBmpDlgData->UserPoint[nCount].y - 30, pBmpDlgData->UserPoint[nCount].x + 5, pBmpDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint)) { bCurs = TRUE; break; } } if(bCurs) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); if(pBmpDlgData->bChange) { if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pBmpDlgData->nPoint, pBmpDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pBmpDlgData->nPoint, pBmpDlgData); GetLookTable(hWnd, pBmpDlgData); GetTable(hWnd); InvalidateRect(hWnd, NULL,FALSE); } UNLOCKCHILDDATA(hWndParent); return FALSE; } else { pBmpDlgData->bChange = FALSE; pBmpDlgData->bAdd = FALSE; } TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &TmpPoint); GetClientRect(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; if (PtInRect(&Rect, TmpPoint) && pBmpDlgData->bAzmChange) { dTheta = atan2((TmpPoint.y - cyClient/2.0) , (TmpPoint.x - cxClient/2.0)); pBmpDlgData->nAzmPnt.x = (L_INT)(cxClient/2 * cos(dTheta)) + cxClient/2; pBmpDlgData->nAzmPnt.y = (L_INT)(cyClient/2 * sin(dTheta)) + cyClient/2; pBmpDlgData->bAzmChange = TRUE; nAngle = (360 - (L_INT)((180 * dTheta)/3.14)) % 360; InvalidateRect(hWnd, NULL,FALSE); SetDlgItemInt(hWnd, IDC_BMP_AZM_EDT, nAngle, TRUE); } TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &TmpPoint); GetClientRect(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; if (PtInRect(&Rect, TmpPoint) && pBmpDlgData->bEleChange) { dTheta = atan2((TmpPoint.y - (cyClient - cyClient/12)) , (TmpPoint.x - cxClient/2.0)); nAngle = (360 - (L_INT)((180 * dTheta)/3.14)) % 360; if(nAngle <= 180) { pBmpDlgData->nELePnt.x = (L_INT)(cxClient/2 * cos(dTheta)) + cxClient/2; pBmpDlgData->nELePnt.y = (L_INT)((cyClient/2) * sin(dTheta)) + (cyClient - cyClient/12); pBmpDlgData->bEleChange = TRUE; InvalidateRect(hWnd, NULL,FALSE); SetDlgItemInt(hWnd, IDC_BMP_ELV_EDT, nAngle, TRUE); } } return FALSE; } static L_BOOL BumpDialog_OnLButtonDown (HWND hWnd, BOOL fDoubleClick, L_INT nX, L_INT nY,UINT uKeyFlags) { pCHILDDATA pData; HWND hWndParent; POINT TmpPoint; RECT Rect; L_INT nTempint; L_INT cxClient; L_INT cyClient; L_INT nCount; L_DOUBLE dTheta; L_INT nAngle; LPBMPDLGDATA pBmpDlgData; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &TmpPoint); if (PtInRect(&Rect, TmpPoint) && !pBmpDlgData->bOper) { nTempint = pBmpDlgData->aptCurve[TmpPoint.x].y; if(TmpPoint.y < nTempint + 30 && TmpPoint.y > nTempint - 30) { SetCursor(LoadCursor(NULL, IDC_SIZEALL)); for(nCount=0; nCount <= (L_INT)pBmpDlgData->nUserPntCnt;nCount++) { SetRect(&Rect, pBmpDlgData->UserPoint[nCount].x - 5, pBmpDlgData->UserPoint[nCount].y - 30, pBmpDlgData->UserPoint[nCount].x + 5, pBmpDlgData->UserPoint[nCount].y + 30); if (PtInRect(&Rect, TmpPoint) || TmpPoint.x < pBmpDlgData->UserPoint[0].x|| TmpPoint.x > pBmpDlgData->UserPoint [pBmpDlgData->nUserPntCnt - 1].x) { pBmpDlgData->bChange = TRUE; pBmpDlgData->nPoint = nCount; if(TmpPoint.x < pBmpDlgData->UserPoint[0].x) { pBmpDlgData->nPoint = nCount; } if(TmpPoint.x > pBmpDlgData->UserPoint [pBmpDlgData->nUserPntCnt - 1].x) pBmpDlgData->nPoint = pBmpDlgData->nUserPntCnt - 1; if(!ChangeUserPoints(TmpPoint.x, TmpPoint.y, pBmpDlgData->nPoint, pBmpDlgData)) DeleteUserPoint(TmpPoint.x, TmpPoint.y, pBmpDlgData->nPoint, pBmpDlgData); GetLookTable(hWnd, pBmpDlgData); GetTable(hWnd); InvalidateRect(hWnd, NULL,FALSE); UNLOCKCHILDDATA(hWndParent); return TRUE; } } pBmpDlgData->nUserPntCnt++; AddArrayPoint(TmpPoint.x, TmpPoint.y, pBmpDlgData); GetLookTable(hWnd, pBmpDlgData); GetTable(hWnd); InvalidateRect(hWnd, NULL,FALSE); UNLOCKCHILDDATA(hWndParent); return TRUE; } } TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &TmpPoint); GetClientRect(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; if (PtInRect(&Rect, TmpPoint)) { dTheta = atan2((TmpPoint.y - cyClient/2.0) , (TmpPoint.x - cxClient/2.0)); pBmpDlgData->nAzmPnt.x = (L_INT)(cxClient/2 * cos(dTheta)) + cxClient/2; pBmpDlgData->nAzmPnt.y = (L_INT)(cyClient/2 * sin(dTheta)) + cyClient/2; pBmpDlgData->bAzmChange = TRUE; nAngle = (360 - (L_INT)((180 * dTheta)/3.14)) % 360; InvalidateRect(hWnd, NULL,FALSE); SetDlgItemInt(hWnd, IDC_BMP_AZM_EDT, nAngle, TRUE); } TmpPoint.x = nX; TmpPoint.y = nY; ClientToScreen(hWnd, &TmpPoint); ScreenToClient( GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &TmpPoint); GetClientRect(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; if (PtInRect(&Rect, TmpPoint)) { dTheta = atan2((TmpPoint.y - (cyClient - cyClient/12)) , (TmpPoint.x - cxClient/2.0)); nAngle = (360 - (L_INT)((180 * dTheta)/3.14)) % 360; if(nAngle <= 180) { pBmpDlgData->nELePnt.x = (L_INT)(cxClient/2 * cos(dTheta)) + cxClient/2; pBmpDlgData->nELePnt.y = (L_INT)((cyClient/2) * sin(dTheta)) + (cyClient - cyClient/12); pBmpDlgData->bEleChange = TRUE; InvalidateRect(hWnd, NULL,FALSE); SetDlgItemInt(hWnd, IDC_BMP_ELV_EDT, nAngle, TRUE); } } return FALSE; } static L_BOOL BumpDialog_OnLButtonUp (HWND hWnd, L_INT nX, L_INT nY, UINT uKeyFlags) { LPBMPDLGDATA pBmpDlgData ; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pBmpDlgData->bChange = FALSE; pBmpDlgData->bEleChange = FALSE; pBmpDlgData->bAzmChange = FALSE; pBmpDlgData->bAdd = FALSE; if(pBmpDlgData->bChange || pBmpDlgData->bAdd) SetCursor(LoadCursor(NULL, IDC_SIZEALL)); return TRUE; } L_VOID ChangePos(HWND hWnd, L_INT ID, L_BOOL Flag, L_INT nDistance) { HWND hWndCtl; RECT rcRect; POINT TmpPoint; hWndCtl = GetDlgItem(hWnd, ID); GetWindowRect(hWndCtl, &rcRect); TmpPoint.x = rcRect.left; TmpPoint.y = rcRect.top; ScreenToClient(hWnd, &TmpPoint); MoveWindow(hWndCtl, TmpPoint.x, Flag ? TmpPoint.y + nDistance : TmpPoint.y - nDistance, RECTWIDTH(&rcRect), RECTHEIGHT(&rcRect), TRUE); } static L_BOOL BumpDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPBMPDLGDATA pBmpDlgData; HWND hWndParent; HWND hCtl; pCHILDDATA pData; L_INT nValue, nIndex; L_INT cxClient; RECT Rect; L_INT cyClient; L_INT nRangeMax[] = { 100 , 100 , 100, 0, 0, 0, 1000, 1000}; L_INT nRangeMin[] = { 1, 1 , 1, 0, 0, 0, -1000, -1000}; L_INT nRangeMaxV[] = { 99 , 99}; L_INT nRangeMinV[] = { 0, 0 }; RECT rcRect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); nRangeMax[2] = pBmpDlgData->Bitmap.Width; nRangeMax[3] = pBmpDlgData->Bitmap.Height; nRangeMax[4] = pBmpDlgData->Bitmap.Width; nRangeMax[5] = pBmpDlgData->Bitmap.Height; nRangeMin[2] = -1 * pBmpDlgData->Bitmap.Width; nRangeMin[3] = -1 * pBmpDlgData->Bitmap.Height; nRangeMin[4] = -1 * pBmpDlgData->Bitmap.Width; nRangeMin[5] = -1 * pBmpDlgData->Bitmap.Height; if(pBmpDlgData->nOper == 0) { nRangeMin[0] = -100; } if ((uCodeNotify == CBN_SELCHANGE ) && (nID == IDC_BMP_IMG_COM)) { L_ApplyFilter (hWnd); InvalidateRect(hWnd, NULL,FALSE); } if ((uCodeNotify == CBN_SELCHANGE ) && (nID == IDC_BMP_OPR_COM)) { if(nID != 0 && pBmpDlgData->nFactor < 0) { SetDlgItemInt(hWnd, IDC_BMP_FAC_EDT, 0, TRUE); } GetFunctinalTable(hWnd, FALSE, pBmpDlgData); InvalidateRect(hWnd, NULL,FALSE); } if (nID >= pBmpDlgData->nEdtBaseID && nID < pBmpDlgData->nEdtBaseID + pBmpDlgData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); hCtl = GetDlgItem(hWnd,nID + pBmpDlgData->nSlideNum); nIndex = nID - pBmpDlgData->nEdtBaseID; if(nValue >= nRangeMin[nIndex] && nValue <= nRangeMax[nIndex]) { Trackbar_SetPos(hCtl, TRUE, nValue); } else { if(nValue > nRangeMax[nIndex]) { SetDlgItemInt(hWnd, nID, nRangeMax[nIndex], TRUE); nValue = nRangeMax[nIndex]; } else { if(nValue == 0) return TRUE; else { SetDlgItemInt(hWnd, nID, nRangeMin[nIndex], TRUE); nValue = nRangeMin[nIndex]; } } } switch (nIndex) { case 0: if(pBmpDlgData->nFactor == nValue) return TRUE; pBmpDlgData->nFactor = nValue; GetFunctinalTable(hWnd, FALSE, pBmpDlgData); InvalidateRect(hWnd, NULL, FALSE); break; case 1: if(pBmpDlgData->BumpData.uDepth == (L_UINT)nValue) return TRUE; pBmpDlgData->BumpData.uDepth = nValue; L_ApplyFilter (hWnd); break; case 2: if(pBmpDlgData->BumpData.nXOffset == nValue) return TRUE; pBmpDlgData->BumpData.nXOffset = nValue; L_ApplyFilter (hWnd); break; case 3: if(pBmpDlgData->BumpData.nYOffset == nValue) return TRUE; pBmpDlgData->BumpData.nYOffset = nValue; L_ApplyFilter (hWnd); break; case 4: if(pBmpDlgData->BumpData.nXDst == nValue) return TRUE; pBmpDlgData->BumpData.nXDst = nValue; L_ApplyFilter (hWnd); break; case 5: if(pBmpDlgData->BumpData.nYDst == nValue) return TRUE; pBmpDlgData->BumpData.nYDst = nValue; L_ApplyFilter (hWnd); break; case 6: if(pBmpDlgData->BumpData.nBright == nValue) return TRUE; pBmpDlgData->BumpData.nBright = nValue; L_ApplyFilter (hWnd); break; case 7: if(pBmpDlgData->BumpData.nIntensity == nValue) return TRUE; pBmpDlgData->BumpData.nIntensity = nValue; L_ApplyFilter (hWnd); break; } } } switch (nID) { case IDC_BMP_AZM_EDT: if(uCodeNotify == EN_CHANGE) { GetClientRect(GetDlgItem(hWnd, IDC_BMP_AZM_TXT), &Rect); cxClient = Rect.right - Rect.left; cyClient = Rect.bottom - Rect.top; nValue = GetDlgItemInt(hWnd, IDC_BMP_AZM_EDT, NULL, TRUE); if(nValue < 0) { SetDlgItemInt(hWnd, IDC_BMP_AZM_EDT, 180, TRUE); nValue = 0; } pBmpDlgData->nAzmPnt.x = (L_INT)(cxClient/2 * cos(nValue * -3.14/180.0)) + cxClient/2; pBmpDlgData->nAzmPnt.y = (L_INT)((cyClient/2) * sin(nValue * -3.14/180.0)) + (cyClient/2); if(pBmpDlgData->BumpData.nAzimuth == nValue) break; pBmpDlgData->BumpData.nAzimuth = nValue; InvalidateRect(hWnd, NULL,FALSE); L_ApplyFilter (hWnd); } return TRUE; case IDC_BMP_ELV_EDT: if(uCodeNotify == EN_CHANGE) { GetClientRect(GetDlgItem(hWnd, IDC_BMP_ELV_TXT), &Rect); cxClient = Rect.right - Rect.left; cyClient = Rect.bottom - Rect.top; nValue = GetDlgItemInt(hWnd, IDC_BMP_ELV_EDT, NULL, TRUE); if(nValue > 180) { SetDlgItemInt(hWnd, IDC_BMP_ELV_EDT, 180, TRUE); nValue = 180; } pBmpDlgData->nELePnt.x = (L_INT)((cxClient/2) * cos(nValue * -3.14/180.0)) + cxClient/2; pBmpDlgData->nELePnt.y = (L_INT)((cyClient/2) * sin(nValue * -3.14/180.0)) + (cyClient - cyClient/12); if((L_INT)pBmpDlgData->BumpData.uElevation == nValue) break; pBmpDlgData->BumpData.uElevation = nValue; InvalidateRect(hWnd, NULL,FALSE); L_ApplyFilter (hWnd); } break; case IDC_BMP_USER_CHK: if(!Button_GetCheck(GetDlgItem(hWnd, IDC_BMP_USER_CHK))) { pBmpDlgData->bOper = TRUE; ComboBox_Enable(GetDlgItem(hWnd, IDC_BMP_OPR_COM), TRUE); Edit_Enable (GetDlgItem(hWnd, IDC_BMP_FAC_SLD), TRUE); GetFunctinalTable(hWnd, FALSE, pBmpDlgData); } else { pBmpDlgData->bOper = FALSE; ComboBox_Enable(GetDlgItem(hWnd, IDC_BMP_OPR_COM), FALSE); Edit_Enable(GetDlgItem(hWnd, IDC_BMP_FAC_SLD), FALSE); GetLookTable(hWnd, pBmpDlgData); GetTable(hWnd); } InvalidateRect(hWnd, NULL,FALSE); break; case IDC_BMP_TILE_CHK: if(Button_GetCheck(GetDlgItem(hWnd, IDC_BMP_TILE_CHK))) { pBmpDlgData->BumpData.bTile = 1; } else pBmpDlgData->BumpData.bTile = 0; L_ApplyFilter (hWnd); break; case IDC_BMP_ADV_BTN: pBmpDlgData->bAdvance = !pBmpDlgData->bAdvance; SetWindowText(GetDlgItem(hWnd, nID), pBmpDlgData->bAdvance ? TEXT("<<") : TEXT(">>")); ShowWindow(GetDlgItem(hWnd, IDC_BMP_MAP_FRM), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_MAP2_FRM), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_ABP_FRM), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_INT_EDT), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_INT_SLD), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_BRG_EDT), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_BRG_SLD), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_FAC_SLD), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_FAC_EDT), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_USER_CHK), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_OPR_COM), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_FAC_LBL), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_INT_LBL), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_OPR_LBL), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hWnd, IDC_BMP_BRG_LBL), pBmpDlgData->bAdvance ? SW_SHOW : SW_HIDE); ChangePos(hWnd, IDOK, pBmpDlgData->bAdvance, pBmpDlgData->nDistance); ChangePos(hWnd, IDCANCEL, pBmpDlgData->bAdvance, pBmpDlgData->nDistance); ChangePos(hWnd, IDC_BMP_PROG, pBmpDlgData->bAdvance, pBmpDlgData->nDistance); ChangePos(hWnd, IDC_BMP_ADV_BTN, pBmpDlgData->bAdvance, pBmpDlgData->nDistance); GetWindowRect(hWnd, &rcRect); MoveWindow(hWnd, rcRect.left, rcRect.top , RECTWIDTH(&rcRect), (pBmpDlgData->bAdvance ? RECTHEIGHT(&rcRect) + pBmpDlgData->nDistance : RECTHEIGHT(&rcRect) - pBmpDlgData->nDistance), TRUE); break; case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; if(pBmpDlgData->pCurveTable) free(pBmpDlgData->pCurveTable); if(pBmpDlgData->BumpData.pLut) free(pBmpDlgData->BumpData.pLut); if(pBmpDlgData->aptCurve) free(pBmpDlgData->aptCurve); EndDialog(hWnd, FALSE); break; case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; } return TRUE; } static L_BOOL BumpDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { L_INT nCtrlID; LPBMPDLGDATA pBmpDlgData; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); nCtrlID = GetWindowLong (hWndCtl, GWL_ID) - pBmpDlgData->nSlideNum; SetDlgItemInt(hWnd, nCtrlID, Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } static L_BOOL BumpDialog_OnVScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { L_INT nCtrlID; LPBMPDLGDATA pBmpDlgData; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); nCtrlID = GetWindowLong (hWndCtl, GWL_ID) ; return TRUE; } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPBMPDLGDATA pBmpDlgData; pCHILDDATA pImgBumpData; L_INT nIndex; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pBmpDlgData->Bitmap, sizeof(BITMAPHANDLE)); nIndex = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_BMP_IMG_COM)); pImgBumpData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_BMP_IMG_COM), nIndex); pBmpDlgData->BumpData.uStructSize = sizeof(BUMPDATA); KillTimer(hWnd, 1); nRet = L_BumpMapBitmap(&pData->LeadBitmap, &pImgBumpData->LeadBitmap, &pBmpDlgData->BumpData); SetTimer(hWnd, 1, 100, NULL); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } } L_VOID GetFunctinalTable(HWND hWnd, L_BOOL bInit, LPBMPDLGDATA pBmpDlgData) { L_INT i; L_INT nPointno; RECT Rect; HWND hWndParent; pCHILDDATA pData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); pBmpDlgData->nOper = ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_BMP_OPR_COM)); pBmpDlgData->BumpData.pLut[0] = 0; pBmpDlgData->BumpData.pLut[pBmpDlgData->uLUTLen] = pBmpDlgData->uLUTLen; pBmpDlgData->pCurveTable[0] = 0; pBmpDlgData->pCurveTable[Rect.right - Rect.left] = Rect.right - Rect.left; L_GetFunctionalLookupTable(pBmpDlgData->BumpData.pLut, pBmpDlgData->uLUTLen + 1, 0, pBmpDlgData->uLUTLen, pBmpDlgData->nFactor, pBmpDlgData->nOper); L_GetFunctionalLookupTable(pBmpDlgData->pCurveTable, pBmpDlgData->uLUTLen + 1,0, Rect.right - Rect.left, pBmpDlgData->nFactor,pBmpDlgData->nOper); nPointno = Rect.right - Rect.left + 1; for(i=0; i < nPointno; i++) { pBmpDlgData->aptCurve[i].x = min(Rect.right- Rect.left - 1, i); pBmpDlgData->aptCurve[i].y = min( (Rect.bottom- Rect.top) - 2, (Rect.bottom- Rect.top) - (L_INT)pBmpDlgData->pCurveTable[i]); } if (!bInit) L_ApplyFilter (hWnd); UNLOCKCHILDDATA(hWndParent); } L_BOOL ChangeUserPoints(L_INT nX, L_INT nY, L_INT Point, LPBMPDLGDATA pBmpDlgData) { if(Point == 0 || Point == (L_INT)pBmpDlgData->nUserPntCnt -1) { if(Point == (L_INT)pBmpDlgData->nUserPntCnt -1 && nX < pBmpDlgData->UserPoint[pBmpDlgData->nUserPntCnt - 2].x + 5) return TRUE; if(Point == 0 && nX > pBmpDlgData->UserPoint[1].x - 5) return TRUE; pBmpDlgData->UserPoint[Point].x = nX; pBmpDlgData->UserPoint[Point].y = nY; return TRUE; } if(nX <= pBmpDlgData->UserPoint[Point - 1].x || nX >= pBmpDlgData->UserPoint[Point + 1].x) return FALSE; pBmpDlgData->UserPoint[Point].x = nX; pBmpDlgData->UserPoint[Point].y = nY; return TRUE; } L_VOID DeleteUserPoint(L_INT nX, L_INT nY, L_INT Point, LPBMPDLGDATA pBmpDlgData) { L_INT nCount; if (Point == 0 || Point == (L_INT)pBmpDlgData->nUserPntCnt) return; for(nCount = Point; nCount < (L_INT)pBmpDlgData->nUserPntCnt; nCount++) { pBmpDlgData->UserPoint[nCount].x = pBmpDlgData->UserPoint[nCount+1].x; pBmpDlgData->UserPoint[nCount].y = pBmpDlgData->UserPoint[nCount+1].y; } pBmpDlgData->bChange = FALSE; pBmpDlgData->nUserPntCnt--; } L_VOID GetLookTable(HWND hWnd, LPBMPDLGDATA pBmpDlgData) { RECT Rect; L_INT cxClient; L_INT cyClient; L_INT nCount; L_INT nPtCurveNo; GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; L_GetUserLookUpTable(pBmpDlgData->pCurveTable, pBmpDlgData->uLUTLen + 1, pBmpDlgData->UserPoint, pBmpDlgData->nUserPntCnt, &nPtCurveNo); for(nCount = 0;nCount <= cxClient;nCount++) { pBmpDlgData->aptCurve[nCount].x = min(cxClient, nCount); pBmpDlgData->aptCurve[nCount].y = min(cyClient - 2,(L_INT)pBmpDlgData->pCurveTable[nCount]); } for(nCount = 0;nCount < pBmpDlgData->UserPoint[0].x; nCount++) { pBmpDlgData->aptCurve[nCount].x = nCount; pBmpDlgData->aptCurve[nCount].y = max(0,min (cyClient - 2, pBmpDlgData->UserPoint[0].y)); } for(nCount += nPtCurveNo;nCount <= cxClient; nCount++) { pBmpDlgData->aptCurve[nCount].x = nCount; pBmpDlgData->aptCurve[nCount].y = max(0,min (cyClient - 2,pBmpDlgData->UserPoint [pBmpDlgData->nUserPntCnt - 1].y)); } } L_VOID GetTable(HWND hWnd) { RECT Rect; L_INT cxClient; L_INT cyClient; L_INT nCount; HWND hWndParent; POINT TablePoint[22]; pCHILDDATA pData; L_INT nPntCnt; LPBMPDLGDATA pBmpDlgData; pBmpDlgData = (LPBMPDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); cxClient= Rect.right - Rect.left; cyClient= Rect.bottom - Rect.top; for(nCount = 0; nCount < (L_INT)pBmpDlgData->nUserPntCnt; nCount++) { TablePoint[nCount].x = (pBmpDlgData->uLUTLen * pBmpDlgData->UserPoint[nCount].x)/cxClient; TablePoint[nCount].y = pBmpDlgData->uLUTLen - (pBmpDlgData->uLUTLen * pBmpDlgData->UserPoint[nCount].y)/cyClient; } L_GetUserLookUpTable(pBmpDlgData->BumpData.pLut, pBmpDlgData->uLUTLen + 1, TablePoint, pBmpDlgData->nUserPntCnt, &nPntCnt); for(nCount = 0;nCount < TablePoint[0].x; nCount++) { pBmpDlgData->BumpData.pLut[nCount] = (L_UCHAR)TablePoint[0].y; } for(nCount += nPntCnt; nCount <= (L_INT)pBmpDlgData->uLUTLen; nCount++) { pBmpDlgData->BumpData.pLut[nCount] = max(0,min ((L_INT)pBmpDlgData->uLUTLen,TablePoint [pBmpDlgData->nUserPntCnt - 1].y)); } L_ApplyFilter (hWnd); UNLOCKCHILDDATA(hWndParent); } L_VOID AddArrayPoint(L_INT nX, L_INT nY, LPBMPDLGDATA pBmpDlgData) { L_INT nCount; L_INT nShift; for(nCount = 0;nCount < (L_INT)pBmpDlgData->nUserPntCnt;nCount++) { if (nX < pBmpDlgData->UserPoint[nCount].x) break; } for(nShift = pBmpDlgData->nUserPntCnt - 1;nShift >nCount;nShift--) { pBmpDlgData->UserPoint[nShift].x = pBmpDlgData->UserPoint[nShift-1].x; pBmpDlgData->UserPoint[nShift].y = pBmpDlgData->UserPoint[nShift-1].y; } pBmpDlgData->UserPoint [nCount].x = nX; pBmpDlgData-> UserPoint[nCount].y = nY; pBmpDlgData->nPoint = nCount; pBmpDlgData->bChange= TRUE; pBmpDlgData->bAdd= FALSE; } L_VOID InitPolygon(HWND hWnd, LPBMPDLGDATA pBmpDlgData) { RECT Rect; GetClientRect(GetDlgItem(hWnd, IDC_BMP_CRV_TXT), &Rect); pBmpDlgData->UserPoint[0].x = 0; pBmpDlgData->UserPoint[0].y = (Rect.bottom - Rect.top); pBmpDlgData->UserPoint[1].x = (Rect.right - Rect.left); pBmpDlgData->UserPoint[1].y = 0; } L_VOID GetBumpImages(HWND hWnd) { EnumChildWindows (hWndClient, BumpsEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_BMP_IMG_COM), 0); } L_BOOL CALLBACK BumpsEnum(HWND hWnd, LPARAM lParam) { pCHILDDATA pData; HWND hDlg; L_TCHAR StripName[255]; L_INT nCount; hDlg = (HWND)lParam; pData = (pCHILDDATA) GetWindowLong(hWnd, GWL_USERDATA); if (!pData) return FALSE; memset(StripName, 0, sizeof(StripName)); Strip(StripName, pData->pszTitle); nCount = ComboBox_GetCount(GetDlgItem(hDlg, IDC_BMP_IMG_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_BMP_IMG_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_BMP_IMG_COM), nCount, (LONG)pData); return TRUE; }