/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL LnProfDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL LnProfDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL LnProfDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL LnProfPlot_OnPaint (HWND hWnd); static L_VOID LnProfPlot_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, L_UINT uKeyFlage); static L_VOID L_ApplyFilter (HWND hWnd); static LRESULT CALLBACK Mouse (L_INT nCode, WPARAM wParam, LPARAM lParam); WNDPROC OldLnProfPlotProc; LRESULT CALLBACK LnProfPlotProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { LPLNPROFDLGDATA pLnProfDlgData; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); switch(uMessage) { HANDLE_MSG(hWnd, WM_PAINT, LnProfPlot_OnPaint); HANDLE_MSG(hWnd, WM_MOUSEMOVE, LnProfPlot_OnMouseMove); } return TRUE; } L_BOOL CALLBACK LnProfDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { LPLNPROFDLGDATA pLnProfDlgData; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, LnProfDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, LnProfDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, LnProfDialog_OnHScroll); case WM_NOTIFY: if (pLnProfDlgData) { if (pLnProfDlgData->nTabPos == TabCtrl_GetCurSel(GetDlgItem(hWnd, wParam))) return FALSE; pLnProfDlgData->nTabPos = TabCtrl_GetCurSel(GetDlgItem(hWnd, wParam)); InvalidateRect(GetDlgItem(hWnd, IDC_LHS_DISP_TXT), NULL, FALSE); } break; } return FALSE; } L_VOID GetPosition(L_INT Xstart,L_INT Ystart,L_INT Xend,L_INT Yend,L_INT index,L_INT *X,L_INT *Y) { L_FLOAT nSlope; L_FLOAT nConst; L_INT Xmin = 0,Xmax = 0,Ymin = 0,Ymax = 0; Xmin = min(Xstart,Xend); Xmax = max(Xend,Xstart); Ymin = min(Ystart,Yend); Ymax = max(Ystart,Yend); if((Xmax - Xmin) > (Ymax - Ymin)) { nSlope = ((L_FLOAT)(Yend - Ystart)) / (Xend - Xstart); nConst = Ystart - nSlope * Xstart; if(Xstart != Xmin) { *X = Xmax - index; *Y = (L_INT)(nSlope * (Xmax - index) + nConst); } else { *X = index + Xmin; *Y = (L_INT)(nSlope * (index + Xmin) + nConst); } } else { if(!(Xend - Xstart)) { if(Ystart != Ymin) { *X = Xend; *Y = Ymax - index; } else { *X = Xend; *Y = index + Ymin; } } else { nSlope = ((L_FLOAT)(Xend - Xstart)) / (Yend - Ystart); nConst = Xstart - Ystart * nSlope; if(Ystart != Ymin) { *X = (L_INT)((Ymax - index) * nSlope + nConst); *Y = Ymax - index; } else { *X = (L_INT)((index + Ymin) * nSlope + nConst); *Y = index + Ymin; } } } } L_VOID ComputeMaxMin(HWND hWnd, L_INT L_FAR * pArray, L_INT nChannel) { L_INT nCounter; L_INT nMaxValue; L_INT nMinValue; LPLNPROFDLGDATA pLnProfDlgData; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); nMaxValue = pArray[0]; nMinValue = pArray[0]; for (nCounter = 0; nCounter < pLnProfDlgData->nCount; nCounter++) { if (pArray[nCounter] > nMaxValue) nMaxValue = pArray[nCounter]; if (pArray[nCounter] < nMinValue) nMinValue = pArray[nCounter]; } switch(nChannel) { case 1: pLnProfDlgData->nMaxRed = nMaxValue; pLnProfDlgData->nMinRed = nMinValue; break; case 2: pLnProfDlgData->nMaxGreen = nMaxValue; pLnProfDlgData->nMinGreen = nMinValue; break; case 3: pLnProfDlgData->nMaxBlue = nMaxValue; pLnProfDlgData->nMinBlue = nMinValue; break; } } LRESULT CALLBACK Mouse(L_INT nCode, WPARAM wParam, LPARAM lParam) { LPLNPROFDLGDATA pLnProfDlgData; LPMOUSEHOOKSTRUCT pMouseHook; HWND hWndParent; pCHILDDATA pData; RECT rcRect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pLnProfDlgData = (LPLNPROFDLGDATA)GetWindowLong(hGlobalWnd, GWL_USERDATA); pMouseHook = (LPMOUSEHOOKSTRUCT)lParam; GetWindowRect(hGlobalWnd, &rcRect); if (PtInRect(&rcRect, pMouseHook->pt)) { pLnProfDlgData->bDrag = FALSE; return 0; } ScreenToClient(hWndParent, &pMouseHook->pt); switch(LOWORD(wParam)) { case WM_NCMOUSEMOVE: if (PtInRect(&pData->rcView, pMouseHook->pt)) { PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); SetDlgItemInt(hGlobalWnd, IDC_LHS_XPOS_TXT, pMouseHook->pt.x - pData->rcView.left, TRUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_YPOS_TXT, pMouseHook->pt.y - pData->rcView.top, TRUE); } if (pLnProfDlgData->bDrag) { if (pLnProfDlgData->bBeg) { pData->ptBegLn.x = pLnProfDlgData->ptStart.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptBegLn.y = pLnProfDlgData->ptStart.y = pMouseHook->pt.y + pData->nVScrollPos; } else { pData->ptEndLn.x = pLnProfDlgData->ptEnd.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptEndLn.y = pLnProfDlgData->ptEnd.y = pMouseHook->pt.y + pData->nVScrollPos; } pLnProfDlgData->nCount = max(abs(pData->ptEndLn.x - pData->ptBegLn.x), abs(pData->ptEndLn.y - pData->ptBegLn.y)); pLnProfDlgData->nCount++; SetDlgItemInt(hGlobalWnd, IDC_LHS_PXLN_TXT, pLnProfDlgData->nCount, FALSE); InvalidateRect(hWndParent, NULL, FALSE); L_ApplyFilter (hGlobalWnd); PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); } break; case WM_NCLBUTTONDOWN: if (PtInRect(&pData->rcView, pMouseHook->pt)) { pLnProfDlgData->bDrag = TRUE; pData->bLineHistogram = TRUE; if (pData->bDetails) { rcRect.left = pData->ptBegLn.x - pData->nHScrollPos - 15; rcRect.right = pData->ptBegLn.x - pData->nHScrollPos + 15; rcRect.top = pData->ptBegLn.y - pData->nVScrollPos - 15; rcRect.bottom = pData->ptBegLn.y - pData->nVScrollPos + 15; if (PtInRect(&rcRect, pMouseHook->pt)) { pLnProfDlgData->bBeg = TRUE; pLnProfDlgData->nSldPos = 0; Trackbar_SetPos(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_SLD), TRUE, 0); return TRUE; } else { rcRect.left = pData->ptEndLn.x - pData->nHScrollPos - 15; rcRect.right = pData->ptEndLn.x - pData->nHScrollPos + 15; rcRect.top = pData->ptEndLn.y - pData->nVScrollPos - 15; rcRect.bottom = pData->ptEndLn.y - pData->nVScrollPos + 15; if (PtInRect(&rcRect, pMouseHook->pt)) { pLnProfDlgData->nSldPos = 0; Trackbar_SetPos(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_SLD), TRUE, 0); return TRUE; } } } pData->ptBegLn.x = pData->ptEndLn.x = pLnProfDlgData->ptStart.x = pLnProfDlgData->ptEnd.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptBegLn.y = pData->ptEndLn.y = pLnProfDlgData->ptStart.y = pLnProfDlgData->ptEnd.y = pMouseHook->pt.y + pData->nVScrollPos; SetDlgItemInt(hGlobalWnd, IDC_LHS_XBEG_EDT, pLnProfDlgData->ptStart.x, TRUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_YBEG_EDT, pLnProfDlgData->ptStart.y, TRUE); InvalidateRect(hWndParent, NULL, FALSE); PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_CROSS); pLnProfDlgData->nSldPos = 0; Trackbar_SetPos(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_SLD), TRUE, 0); } else PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_ARROW); break; case WM_NCLBUTTONUP: if (!pLnProfDlgData->bDrag) return CallNextHookEx(pLnProfDlgData->hMouseHook , nCode, wParam, lParam); if (pLnProfDlgData->bBeg) { pData->ptBegLn.x = pLnProfDlgData->ptStart.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptBegLn.y = pLnProfDlgData->ptStart.y = pMouseHook->pt.y + pData->nVScrollPos; SetDlgItemInt(hGlobalWnd, IDC_LHS_XBEG_EDT, pLnProfDlgData->ptStart .x, TRUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_YBEG_EDT, pLnProfDlgData->ptStart.y, TRUE); pLnProfDlgData->bBeg = FALSE; } else { pData->ptEndLn.x = pLnProfDlgData->ptEnd.x = pMouseHook->pt.x + pData->nHScrollPos; pData->ptEndLn.y = pLnProfDlgData->ptEnd.y = pMouseHook->pt.y + pData->nVScrollPos; SetDlgItemInt(hGlobalWnd, IDC_LHS_XEND_EDT, pLnProfDlgData->ptEnd.x, TRUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_YEND_EDT, pLnProfDlgData->ptEnd.y, TRUE); } pLnProfDlgData->nCount = max(abs(pData->ptEndLn.x - pData->ptBegLn.x), abs(pData->ptEndLn.y - pData->ptBegLn.y)); pLnProfDlgData->nCount++; SetDlgItemInt(hGlobalWnd, IDC_LHS_PXLN_TXT, pLnProfDlgData->nCount, TRUE); pLnProfDlgData->bDrag = FALSE; L_ApplyFilter (hGlobalWnd); GetClientRect(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_TXT), &rcRect); Trackbar_SetRange(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_SLD), TRUE, 0, pLnProfDlgData->nCount - (rcRect.right - rcRect.left)); ShowWindow(GetDlgItem(hGlobalWnd, IDC_LHS_DISP_SLD), (pLnProfDlgData->nCount - (rcRect.right - rcRect.left)) > 0 ? SW_SHOW: SW_HIDE); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pRed, CHANNEL_RED); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pGreen, CHANNEL_GREEN); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pBlue, CHANNEL_BLUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXR_TXT, pLnProfDlgData->nMaxRed, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXG_TXT, pLnProfDlgData->nMaxGreen, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXB_TXT, pLnProfDlgData->nMaxBlue, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MINR_TXT, pLnProfDlgData->nMinRed, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MING_TXT, pLnProfDlgData->nMinGreen, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MINB_TXT, pLnProfDlgData->nMinBlue, FALSE); if (!PtInRect(&pData->rcView, pMouseHook->pt)) PostMessage (hWndParent, WM_USER_CHANGECURSOR, 0, (LONG)IDC_ARROW); InvalidateRect(hWndParent, NULL, FALSE); break; case WM_NCRBUTTONUP: ShowWindow(hGlobalWnd, IsMinimized(hGlobalWnd) ? SW_RESTORE : SW_MINIMIZE); break; } if (pLnProfDlgData) { if (LOWORD(wParam) >= WM_NCMOUSEMOVE && LOWORD(wParam) <= WM_NCMBUTTONDBLCLK) return TRUE; else return CallNextHookEx(pLnProfDlgData->hMouseHook , nCode, wParam, lParam); } else return FALSE; } static L_BOOL LnProfDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPLNPROFDLGDATA pLnProfDlgData = (LPLNPROFDLGDATA)lParam; HWND hWndParent; pCHILDDATA pData; TCITEM tcTabItem; HWND hWndChild; hWndChild = GetDlgItem ( hWnd, IDC_LHS_DISP_TXT ) ; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); hGlobalWnd = hWnd; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pLnProfDlgData); pData->ptBegLn.x = pLnProfDlgData->ptStart.x = 0; pData->ptBegLn.y = pLnProfDlgData->ptStart.y = 0; pData->ptEndLn.x = pLnProfDlgData->ptEnd.x = 0; pData->ptEndLn.y = pLnProfDlgData->ptEnd.y = 0; pData->bDetails = FALSE; UpdateWindow(hWnd); ShowWindow(hWnd, SW_SHOW); pLnProfDlgData->nSldPos = 0; pLnProfDlgData->nEdtBaseID = IDC_LHS_XBEG_EDT; pLnProfDlgData->nEditNum = 4; pLnProfDlgData->nTabPos = 0; pLnProfDlgData->bBeg = FALSE; pLnProfDlgData->hMouseHook = SetWindowsHookEx(WH_MOUSE, Mouse, hInst, GetCurrentThreadId()); SetNumericEditBox(GetDlgItem(hWnd, pLnProfDlgData->nEdtBaseID + 0), 0, BITMAPWIDTH(&pData->LeadBitmap) - 1, 1, 0, FALSE); SetNumericEditBox(GetDlgItem(hWnd, pLnProfDlgData->nEdtBaseID + 1), 0, BITMAPHEIGHT(&pData->LeadBitmap) - 1, 1, 0, FALSE); SetNumericEditBox(GetDlgItem(hWnd, pLnProfDlgData->nEdtBaseID + 2), 0, BITMAPWIDTH(&pData->LeadBitmap) - 1, 1, 0, FALSE); SetNumericEditBox(GetDlgItem(hWnd, pLnProfDlgData->nEdtBaseID + 3), 0, BITMAPHEIGHT(&pData->LeadBitmap) - 1, 1, 0, FALSE); InvalidateRect(hWndParent, NULL, FALSE); EnableWindow(GetDlgItem(hWnd, IDC_LHS_BLUE_EDT), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_LHS_RED_EDT), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_LHS_GREEN_EDT), FALSE); SetDlgItemInt(hWnd, IDC_LHS_XBEG_EDT, 0, FALSE); SetDlgItemInt(hWnd, IDC_LHS_XEND_EDT, 0, FALSE); SetDlgItemInt(hWnd, IDC_LHS_YBEG_EDT, 0, FALSE); SetDlgItemInt(hWnd, IDC_LHS_YEND_EDT, 0, FALSE); tcTabItem.mask = TCIF_TEXT | TCIF_IMAGE; tcTabItem.iImage = -1; tcTabItem.pszText = TEXT("All"); TabCtrl_InsertItem(GetDlgItem(hWnd, IDC_LHS_DISP_TAB), 0, &tcTabItem); tcTabItem.pszText = TEXT("Red"); TabCtrl_InsertItem(GetDlgItem(hWnd, IDC_LHS_DISP_TAB), 1, &tcTabItem); tcTabItem.pszText = TEXT("Green"); TabCtrl_InsertItem(GetDlgItem(hWnd, IDC_LHS_DISP_TAB), 2, &tcTabItem); tcTabItem.pszText = TEXT("Blue"); TabCtrl_InsertItem(GetDlgItem(hWnd, IDC_LHS_DISP_TAB), 3, &tcTabItem); OldLnProfPlotProc = (WNDPROC)GetWindowLong(hWndChild, GWL_WNDPROC); SetWindowLong(hWndChild, GWL_WNDPROC, (long)LnProfPlotProc); return ( TRUE ); } L_VOID DrawHistogram(HWND hWnd, HDC hDCMemo, LPRECT Rect, L_INT L_FAR * pArray, L_INT nSldPos, L_INT nCount, L_INT nShift) { L_INT nFactor; L_INT nCounter; nFactor = ((Rect->bottom - Rect->top - 12) * 1000) / 256; if (pArray) MoveToEx(hDCMemo, 0, Rect->bottom - Rect->top - ((pArray[nSldPos] >> nShift) * nFactor / 1000), NULL); if (!Button_GetCheck(GetDlgItem(hWnd, IDC_LHS_FILL_CHK))) { for (nCounter = 0; nCounter < min(Rect->right - Rect->left, nCount); nCounter++) { LineTo(hDCMemo, nCounter, (Rect->bottom - Rect->top) - ((pArray[nCounter + nSldPos] >> nShift) * nFactor / 1000) ); } } else { for (nCounter = 0; nCounter < min(Rect->right - Rect->left, nCount); nCounter++) { MoveToEx(hDCMemo, nCounter, (Rect->bottom - Rect->top), NULL); LineTo(hDCMemo, nCounter, (Rect->bottom - Rect->top) - ((pArray[nCounter + nSldPos] >> nShift) * nFactor / 1000) ); } } } static L_BOOL LnProfDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { HWND hWndParent; L_INT nRangeMax[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; L_INT nRangeMin[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; pCHILDDATA pData; L_INT nValue; L_INT nIndex; LPLNPROFDLGDATA pLnProfDlgData; RECT rcRect; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); nRangeMax[0] = nRangeMax[2] = nRangeMax[4] = BITMAPWIDTH(&pData->LeadBitmap) - 1; nRangeMax[1] = nRangeMax[3] = nRangeMax[5] = BITMAPHEIGHT(&pData->LeadBitmap) - 1; GetClientRect(GetDlgItem(hWnd, IDC_LHS_DISP_TXT), &rcRect); if (nID >= pLnProfDlgData->nEdtBaseID && nID < pLnProfDlgData->nEdtBaseID + pLnProfDlgData->nEditNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL,FALSE); nIndex = nID - pLnProfDlgData->nEdtBaseID; if(nValue > nRangeMax[nIndex]) { SetDlgItemInt(hWnd, nID, nRangeMax[nIndex], TRUE); return FALSE; } if(nValue < nRangeMin[nIndex]) { SetDlgItemInt(hWnd, nID, nRangeMin[nIndex], TRUE); return FALSE; } switch(nIndex) { case 0: if (pLnProfDlgData->ptStart.x == nValue) return FALSE; pLnProfDlgData->ptStart.x = nValue; pData->ptBegLn.x = nValue; break; case 1: if (pLnProfDlgData->ptStart.y == nValue) return FALSE; pLnProfDlgData->ptStart.y = nValue; pData->ptBegLn.y = nValue; break; case 2: if (pLnProfDlgData->ptEnd.x == nValue) return FALSE ; pLnProfDlgData->ptEnd.x = nValue; pData->ptEndLn.x = nValue; break; case 3: if (pLnProfDlgData->ptEnd.y == nValue) return FALSE; pLnProfDlgData->ptEnd.y = nValue; pData->ptEndLn.y = nValue; break; } pLnProfDlgData->nCount = max(abs(pData->ptEndLn.x - pData->ptBegLn.x), abs(pData->ptEndLn.y - pData->ptBegLn.y)); pLnProfDlgData->nCount++; Trackbar_SetPos(GetDlgItem(hWnd, IDC_LHS_DISP_SLD), TRUE, 0); pLnProfDlgData->nSldPos = 0; Trackbar_SetRange(GetDlgItem(hWnd, IDC_LHS_DISP_SLD), TRUE, 0, pLnProfDlgData->nCount - (rcRect.right - rcRect.left)); ShowWindow( GetDlgItem(hWnd, IDC_LHS_DISP_SLD), (pLnProfDlgData->nCount - (rcRect.right - rcRect.left)) > 0 ? SW_SHOW: SW_HIDE); SetDlgItemInt(hGlobalWnd, IDC_LHS_PXLN_TXT, pLnProfDlgData->nCount, FALSE); InvalidateRect(hWndParent, NULL, FALSE); if (!pData->bLineHistogram) pData->bLineHistogram = TRUE; L_ApplyFilter (hWnd); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pRed, CHANNEL_RED); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pGreen, CHANNEL_GREEN); ComputeMaxMin(hGlobalWnd, pLnProfDlgData->pBlue, CHANNEL_BLUE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXR_TXT, pLnProfDlgData->nMaxRed, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXG_TXT, pLnProfDlgData->nMaxGreen, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MAXB_TXT, pLnProfDlgData->nMaxBlue, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MINR_TXT, pLnProfDlgData->nMinRed, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MING_TXT, pLnProfDlgData->nMinGreen, FALSE); SetDlgItemInt(hGlobalWnd, IDC_LHS_MINB_TXT, pLnProfDlgData->nMinBlue, FALSE); } return TRUE; } switch (nID) { case IDC_LHS_FILL_CHK: InvalidateRect(GetDlgItem(hWnd, IDC_LHS_DISP_TXT), NULL, FALSE); break; case IDC_LHS_DETL_CHK: pData->bDetails = Button_GetCheck(hWndCtl); InvalidateRect(hWndParent, NULL, FALSE); break; case IDCANCEL: case IDOK: if (pLnProfDlgData->pRed) GlobalFreePtr(pLnProfDlgData->pRed); if (pLnProfDlgData->pGreen) GlobalFreePtr(pLnProfDlgData->pGreen); if (pLnProfDlgData->pBlue) GlobalFreePtr(pLnProfDlgData->pBlue); pData->bLineHistogram = FALSE; UnhookWindowsHookEx(pLnProfDlgData->hMouseHook); InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, IDCANCEL - nID); break; } return TRUE; } static L_BOOL LnProfDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPLNPROFDLGDATA pLnProfDlgData; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); if (pLnProfDlgData->nSldPos == Trackbar_GetPos(hWndCtl)) return FALSE; pLnProfDlgData->nSldPos = Trackbar_GetPos(hWndCtl); InvalidateRect(GetDlgItem(hWnd, IDC_LHS_DISP_TXT), NULL, FALSE); return TRUE; } static L_BOOL LnProfPlot_OnPaint(HWND hWnd) { HDC hdc; PAINTSTRUCT ps; RECT Rect; HBRUSH hbrush; LPLNPROFDLGDATA pLnProfDlgData; HWND hWndParent; pCHILDDATA pData; HBITMAP hBitmap; HDC hDCMemo; HPEN hRedPen, hGreenPen, hBluePen; L_INT nCmp; L_INT nShift = 0; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(GetParent(hWnd), GWL_USERDATA); if (Is16Bit(&pData->LeadBitmap)) nShift = (pData->LeadBitmap.BitsPerPixel == 12) ? 4 : 8; GetClientRect(hWnd, &Rect); hdc = BeginPaint(hWnd,&ps); hBitmap = CreateCompatibleBitmap(hdc, Rect.right - Rect.left, Rect.bottom - Rect.top); hDCMemo = CreateCompatibleDC(hdc); hbrush = CreateSolidBrush(RGB(0, 0, 0)); SelectObject(hDCMemo, hBitmap); FillRect(hDCMemo, &Rect,hbrush); hRedPen = CreatePen(PS_SOLID, 0, RGB(255, 0, 0)); hGreenPen = CreatePen(PS_SOLID, 0, RGB(0, 255, 0)); hBluePen = CreatePen(PS_SOLID, 0, RGB(0, 0, 255)); nCmp = TabCtrl_GetCurSel(GetDlgItem(GetParent(hWnd), IDC_LHS_DISP_TAB)); if (nCmp == 0 || nCmp == 1) { SelectPen(hDCMemo, hRedPen); DrawHistogram(GetParent(hWnd), hDCMemo, &Rect, pLnProfDlgData->pRed, pLnProfDlgData->nSldPos, pLnProfDlgData->nCount, nShift); } if (nCmp == 0 || nCmp == 2) { SelectPen(hDCMemo, hGreenPen); DrawHistogram(GetParent(hWnd), hDCMemo, &Rect, pLnProfDlgData->pGreen, pLnProfDlgData->nSldPos, pLnProfDlgData->nCount, nShift); } if (nCmp == 0 || nCmp == 3) { SelectPen(hDCMemo, hBluePen); DrawHistogram(GetParent(hWnd), hDCMemo, &Rect, pLnProfDlgData->pBlue, pLnProfDlgData->nSldPos, pLnProfDlgData->nCount, nShift); } BitBlt(hdc, 0, 0, Rect.right - Rect.left, Rect.bottom - Rect.top, hDCMemo, 0, 0, SRCCOPY); DeleteDC(hDCMemo); DeleteBitmap(hBitmap); DeletePen(hRedPen); DeletePen(hGreenPen); DeletePen(hBluePen); DeleteObject(hbrush); EndPaint(hWnd, &ps); return FALSE; } static L_VOID LnProfPlot_OnMouseMove (HWND hWnd, L_INT nX, L_INT nY, L_UINT uKeyFlage) { RECT rcRect; POINT ptPos; LPLNPROFDLGDATA pLnProfDlgData; L_INT nXPos; L_INT nYPos; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(GetParent(hWnd), GWL_USERDATA); GetClientRect(hWnd, &rcRect); ptPos.x = nX; ptPos.y = nY; if (PtInRect(&rcRect, ptPos) && ptPos.x < pLnProfDlgData->nCount) { ptPos.x += pLnProfDlgData->nSldPos; GetPosition(pLnProfDlgData->ptStart.x, pLnProfDlgData->ptStart.y, pLnProfDlgData->ptEnd.x, pLnProfDlgData->ptEnd.y, ptPos.x , &nXPos, &nYPos); SetDlgItemInt(GetParent(hWnd), IDC_LHS_XPIX_TXT, nXPos, FALSE); SetDlgItemInt(GetParent(hWnd), IDC_LHS_YPIX_TXT, nYPos, FALSE); SetDlgItemInt(GetParent(hWnd), IDC_LHS_RED_EDT, pLnProfDlgData->pRed[ptPos.x], FALSE); SetDlgItemInt(GetParent(hWnd), IDC_LHS_GREEN_EDT, pLnProfDlgData->pGreen[ptPos.x], FALSE); SetDlgItemInt(GetParent(hWnd), IDC_LHS_BLUE_EDT, pLnProfDlgData->pBlue[ptPos.x], FALSE); } } static L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPLNPROFDLGDATA pLnProfDlgData; pLnProfDlgData = (LPLNPROFDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); if (pLnProfDlgData->pRed) GlobalFreePtr(pLnProfDlgData->pRed); if (pLnProfDlgData->pGreen) GlobalFreePtr(pLnProfDlgData->pGreen); if (pLnProfDlgData->pBlue) GlobalFreePtr(pLnProfDlgData->pBlue); L_LineProfile(&pData->LeadBitmap, pLnProfDlgData->ptStart, pLnProfDlgData->ptEnd, &pLnProfDlgData->pRed, &pLnProfDlgData->pGreen, &pLnProfDlgData->pBlue); InvalidateRect(GetDlgItem(hWnd, IDC_LHS_DISP_TXT), NULL, FALSE); }