/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL WaveDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL WaveDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_BOOL WaveDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_BOOL WaveDialog_OnPaint (HWND hWnd); static L_VOID WaveDialog_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK WaveDlgProc (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG (hWnd, WM_COMMAND, WaveDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, WaveDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_HSCROLL, WaveDialog_OnHScroll); HANDLE_MSG (hWnd, WM_PAINT, WaveDialog_OnPaint); HANDLE_MSG (hWnd, WM_TIMER, WaveDialog_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL WaveDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPWAVDLGDATA pWavDlgData; HWND hWndParent; pCHILDDATA pData; L_INT nRangeMax[] = {100, 300, 180, 100, 100}; L_INT nRangeMin[] = {1, 1, -180, 0, 0}; L_INT nPosInit [] = {100, 1, 0, 100, 100}; L_INT nSlider; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pWavDlgData = (LPWAVDLGDATA)lParam; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd,GWL_USERDATA,(LONG)pWavDlgData); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pWavDlgData->Bitmap); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_WAV_PROG); pWavDlgData->uFreq = 100; pWavDlgData->uAmpl = 1; pWavDlgData->uAngle = 0; pWavDlgData->uVert = 100; pWavDlgData->uHorz = 100; pWavDlgData->uFlag = 0; pWavDlgData->crColor = RGB(0, 0, 0); pWavDlgData->nSlideNum = 5; pWavDlgData->nSldBaseID = IDC_WAV_FREQ_SLD; pWavDlgData->nEdtBaseID = IDC_WAV_FREQ_EDT; for (nSlider = 0; nSlider < pWavDlgData->nSlideNum; nSlider++) { Trackbar_SetRange(GetDlgItem(hWnd, pWavDlgData->nSldBaseID + nSlider), TRUE, nRangeMin[nSlider], nRangeMax[nSlider]); SetDlgItemInt(hWnd, pWavDlgData->nEdtBaseID + nSlider, nPosInit[nSlider], TRUE); SetNumericEditBox(GetDlgItem(hWnd, pWavDlgData->nEdtBaseID + nSlider), nRangeMin[nSlider], nRangeMax[nSlider], 1, 0, FALSE); } ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_TYPE_COM), TEXT("Sin")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_TYPE_COM), TEXT("Cos")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_TYPE_COM), TEXT("Square")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_TYPE_COM), TEXT("Trangular")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_WAV_TYPE_COM), 0); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_MOD_COM), TEXT("Period")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_MOD_COM), TEXT("Freqeuncy")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_WAV_MOD_COM), 0); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_FILL_COM), TEXT("Fill Color")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_FILL_COM), TEXT("Repeat Edge")); ComboBox_AddString(GetDlgItem(hWnd, IDC_WAV_FILL_COM), TEXT("No Change")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_WAV_FILL_COM), 0); CreateAngleControl(GetDlgItem(hWnd, IDC_WAV_ANGL_TXT), IDC_WAV_ANGL_EDT, FROM_180_TO_180, 1, APPLY_ON_MOVE); SetNumericEditBox(GetDlgItem(hWnd, pWavDlgData->nEdtBaseID + nSlider), nRangeMin[2], nRangeMax[2], 1, 0, FALSE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); return ( TRUE ); } static L_VOID WaveDialog_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL WaveDialog_OnPaint(HWND hWnd) { HDC hDC; PAINTSTRUCT ps; RECT rcRect; HBRUSH hBrush; LPWAVDLGDATA pWavDlgData; pWavDlgData = (LPWAVDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd , IDC_WAV_COLOR_TXT), &rcRect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_WAV_COLOR_TXT),&ps); hBrush = CreateSolidBrush(pWavDlgData->crColor); FillRect(hDC, &rcRect,!ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_WAV_FILL_COM)) ? hBrush : (HBRUSH) COLOR_WINDOW); DeleteObject (hBrush); EndPaint(GetDlgItem(hWnd, IDC_WAV_COLOR_TXT), &ps); return FALSE; } static L_BOOL WaveDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPWAVDLGDATA pWavDlgData; HWND hWndParent; L_INT nRangeMax[] = {100, 300, 1800, 100, 100}; L_INT nRangeMin[] = {1, 1, -1800, 0, 0}; HWND hCtl; pCHILDDATA pData; L_INT nValue; L_INT nIndex; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); pWavDlgData = (LPWAVDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); switch(nID) { case IDC_WAV_ANGL_EDT: nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); if (nValue == 180) nValue = -180; if ((uCodeNotify == EN_CHANGE) && nValue != pWavDlgData->uAngle) { pWavDlgData->uAngle = nValue; DrawAngleControl(GetDlgItem(hWnd, IDC_WAV_ANGL_TXT), nValue); L_ApplyFilter(hWnd); } return TRUE; case IDC_WAV_COLOR_BTN: crColor = pWavDlgData->crColor; pWavDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pWavDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); } break; case IDC_WAV_TYPE_COM: if (uCodeNotify == CBN_SELCHANGE) { nIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_WAV_TYPE_COM)) << 8); if (pWavDlgData->uFlag != ((pWavDlgData->uFlag & 0xFFFFF0FF) | nIndex)) { pWavDlgData->uFlag = pWavDlgData->uFlag & 0xFFFFF0FF; pWavDlgData->uFlag = pWavDlgData->uFlag | nIndex; InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } } break; case IDC_WAV_MOD_COM: if (uCodeNotify == CBN_SELCHANGE) { nIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_WAV_MOD_COM)) << 4); if (pWavDlgData->uFlag != ((pWavDlgData->uFlag & 0xFFFFFF0F) | nIndex)) { pWavDlgData->uFlag = pWavDlgData->uFlag & 0xFFFFFF0F; pWavDlgData->uFlag = pWavDlgData->uFlag | nIndex; InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } } break; case IDC_WAV_FILL_COM: if (uCodeNotify == CBN_SELCHANGE) { nIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_WAV_FILL_COM))); if (pWavDlgData->uFlag != ((pWavDlgData->uFlag & 0xFFFFFFF0) | nIndex)) { EnableWindow(GetDlgItem(hWnd, IDC_WAV_COLOR_BTN), !ComboBox_GetCurSel(hWndCtl)); pWavDlgData->uFlag = pWavDlgData->uFlag & 0xFFFFFFF0; pWavDlgData->uFlag = pWavDlgData->uFlag | nIndex; InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, 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; } if (nID >= pWavDlgData->nEdtBaseID && nID < pWavDlgData->nEdtBaseID + pWavDlgData->nSlideNum) { if(uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, TRUE); hCtl = GetDlgItem(hWnd,nID + pWavDlgData->nSlideNum); nIndex = nID - pWavDlgData->nEdtBaseID; Trackbar_SetPos(hCtl, TRUE, nValue); 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(pWavDlgData->uFreq == (L_UINT)nValue) return TRUE; pWavDlgData->uFreq = nValue; break; case 1: if(pWavDlgData->uAmpl == (L_UINT)nValue) return TRUE; pWavDlgData->uAmpl = nValue; break; /* case 2: if(pWavDlgData->uAngle == nValue) return TRUE; pWavDlgData->uAngle = nValue; break; */ case 3: if(pWavDlgData->uHorz == (L_UINT)nValue) return TRUE; pWavDlgData->uHorz = nValue; break; case 4: if(pWavDlgData->uVert == (L_UINT)nValue) return TRUE; pWavDlgData->uVert = nValue; break; default: return TRUE; } L_ApplyFilter (hWnd); } } return TRUE; } static L_BOOL WaveDialog_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos) { LPWAVDLGDATA pWavDlgData; pWavDlgData = (LPWAVDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pWavDlgData->nSlideNum , Trackbar_GetPos(hWndCtl), TRUE); return TRUE; } L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPWAVDLGDATA pWavDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return; } pWavDlgData = (LPWAVDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA (hWndParent); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pWavDlgData->Bitmap, sizeof(BITMAPHANDLE)); nRet = L_WaveBitmap(&pData->LeadBitmap, pWavDlgData->uAmpl, pWavDlgData->uFreq, pWavDlgData->uAngle * 100, pWavDlgData->uHorz, pWavDlgData->uVert, pWavDlgData->crColor, pWavDlgData->uFlag); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }