/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL DsaDlg_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID DsaDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL DsaDlg_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID DsaDlg_OnTimer (HWND hWnd, L_INT nID); static L_BOOL CALLBACK DsaEnum (HWND hWnd, LPARAM lParam); static L_VOID GetDsaImages (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK DSADlgProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG(hWnd, WM_INITDIALOG, DsaDlg_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, DsaDlg_OnCommand); HANDLE_MSG(hWnd, WM_TIMER, DsaDlg_OnTimer); HANDLE_MSG(hWnd, WM_PAINT, DsaDlg_OnPaint); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } static L_BOOL DsaDlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPDSADLGDATA pDsaDlgData; pCHILDDATA pData; HWND hWndParent; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); pDsaDlgData = (LPDSADLGDATA)lParam; SetWindowLong(hWnd, GWL_USERDATA, (long)pDsaDlgData); MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_DSA_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &pDsaDlgData->LiveBitmap); GetDsaImages(hWnd); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); return TRUE; } static L_VOID DsaDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL DsaDlg_OnPaint (HWND hWnd) { pCHILDDATA pSrcData, pDstData, pData; RECT rcRect; HDC hDC; PAINTSTRUCT ps; HPALETTE hPalette, hSavedPalette; RECT rcImage; LPDSADLGDATA pDsaDlgData; HWND hWndParent; pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_MSK_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_DSA_MSK_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_LIV_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_DSA_LIV_COM))); pDsaDlgData = (LPDSADLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); hDC = BeginPaint (GetDlgItem(hWnd, IDC_DSA_ERR_STA), &ps); SetTextColor(hDC, RGB(255, 0, 0)); SetBkColor(hDC, GetSysColor(COLOR_MENU)); GetClientRect(GetDlgItem(hWnd, IDC_DSA_ERR_STA), &rcRect); if (pDsaDlgData->bError) ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rcRect, TEXT("Images are not compatible"), 25, NULL); EndPaint (GetDlgItem(hWnd, IDC_DSA_ERR_STA), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_DSA_MSK_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, (pData->hBitmapWnd == pSrcData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pSrcData->LeadBitmap); hSavedPalette = SelectPalette(hDC, hPalette, TRUE); RealizePalette(hDC); GetClientRect(GetDlgItem(hWnd, IDC_DSA_MSK_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage, (pData->hBitmapWnd == pSrcData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pSrcData->LeadBitmap, &rcRect); L_PaintDC(hDC, (pData->hBitmapWnd == pSrcData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pSrcData->LeadBitmap , NULL, NULL, &rcRect, NULL, SRCCOPY); hPalette = SelectPalette(hDC, hSavedPalette, TRUE); DeletePalette(hPalette); EndPaint(GetDlgItem(hWnd, IDC_DSA_MSK_TXT), &ps); hDC = BeginPaint(GetDlgItem(hWnd, IDC_DSA_LIV_TXT), &ps); hPalette = L_CreatePaintPalette(hDC, (pData->hBitmapWnd == pDstData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pDstData->LeadBitmap); hSavedPalette = SelectPalette(hDC, hPalette, TRUE); RealizePalette(hDC); GetClientRect(GetDlgItem(hWnd, IDC_DSA_LIV_TXT), &rcImage); FillRect(hDC, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage,(pData->hBitmapWnd == pDstData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pDstData->LeadBitmap, &rcRect); L_PaintDC(hDC, (pData->hBitmapWnd == pDstData->hBitmapWnd) ? &pDsaDlgData->LiveBitmap : &pDstData->LeadBitmap, NULL, NULL, &rcRect, NULL, SRCCOPY); hPalette = SelectPalette(hDC, hSavedPalette, TRUE); DeletePalette(hPalette); EndPaint(GetDlgItem(hWnd, IDC_DSA_LIV_TXT), &ps); UNLOCKCHILDDATA(hWndParent); return FALSE; } L_VOID GetDsaImages(HWND hWnd) { EnumChildWindows (hWndClient, DsaEnum, (LONG)hWnd); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_DSA_MSK_COM), 0); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_DSA_LIV_COM), 0); } L_BOOL CALLBACK DsaEnum(HWND hWnd, LPARAM lParam) { pCHILDDATA pData; HWND hDlg; L_TCHAR StripName[255]; L_INT nCount; memset(StripName, 0, sizeof(StripName)); hDlg = (HWND)lParam; pData = (pCHILDDATA) GetWindowLong(hWnd, GWL_USERDATA); if (!pData) return FALSE; Strip(StripName, pData->pszTitle); nCount = ComboBox_GetCount(GetDlgItem(hDlg, IDC_DSA_LIV_COM)); ComboBox_AddString(GetDlgItem(hDlg, IDC_DSA_LIV_COM), StripName); ComboBox_AddString(GetDlgItem(hDlg, IDC_DSA_MSK_COM), StripName); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_DSA_LIV_COM), nCount, (LONG)pData); ComboBox_SetItemData(GetDlgItem(hDlg, IDC_DSA_MSK_COM), nCount, (LONG)pData); return TRUE; } static L_VOID DsaDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPDSADLGDATA pDsaDlgData; pCHILDDATA pSrcData; pCHILDDATA pDstData; pDsaDlgData = (LPDSADLGDATA) GetWindowLong(hWnd, GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_MSK_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_DSA_MSK_COM))); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_LIV_COM), ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_DSA_LIV_COM))); switch (nID) { case IDCANCEL: L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pDsaDlgData->LiveBitmap,sizeof(BITMAPHANDLE)); StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; EndDialog(hWnd, FALSE); break; case IDOK: EndDialog(hWnd, TRUE); break; case IDC_DSA_CON_CHK: case IDC_DSA_OPR_CHK: pDsaDlgData->uFlag ^= (nID - IDC_DSA_CON_CHK + 1); L_ApplyFilter(hWnd); break; case IDC_DSA_LIV_COM: case IDC_DSA_MSK_COM: if (uCodeNotify == CBN_SELCHANGE) { if (nID == IDC_DSA_LIV_COM) { if (pDsaDlgData->nLiveIndex == ComboBox_GetCurSel(GetDlgItem(hWnd, nID))) return; SendMessage(hWndClient, WM_MDIACTIVATE, (WPARAM)pDstData->hBitmapWnd, (LPARAM)0); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pDsaDlgData->nLiveIndex); L_FreeBitmap(&pDstData->LeadBitmap); L_CopyBitmap(&pDstData->LeadBitmap, &pDsaDlgData->LiveBitmap, sizeof(BITMAPHANDLE)); InvalidateRect(pDstData->hBitmapWnd, NULL, FALSE); pDsaDlgData->nLiveIndex = ComboBox_GetCurSel(hWndCtl); pDstData = (pCHILDDATA)ComboBox_GetItemData(hWndCtl, pDsaDlgData->nLiveIndex); L_FreeBitmap(&pDsaDlgData->LiveBitmap); L_CopyBitmap(&pDsaDlgData->LiveBitmap, &pDstData->LeadBitmap, sizeof(BITMAPHANDLE)); } else { if (pDsaDlgData->nMaskIndex == ComboBox_GetCurSel(hWndCtl)) return; pDsaDlgData->nMaskIndex = ComboBox_GetCurSel(hWndCtl); } InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter (hWnd); } break; } } static L_VOID L_ApplyFilter (HWND hWnd) { L_INT nRet = 0; LPDSADLGDATA pDsaDlgData; pCHILDDATA pSrcData, pDstData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pDsaDlgData = (LPDSADLGDATA) GetWindowLong(hWnd,GWL_USERDATA); pSrcData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_MSK_COM), pDsaDlgData->nMaskIndex); pDstData = (pCHILDDATA)ComboBox_GetItemData(GetDlgItem(hWnd, IDC_DSA_LIV_COM), pDsaDlgData->nLiveIndex); FreeMemorizedBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //MEMDISK// L_CopyBitmap(&pDstData->LeadBitmap, &pDsaDlgData->LiveBitmap, sizeof(BITMAPHANDLE)); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); EnableWindow(GetDlgItem(hWnd, IDCANCEL), FALSE); nRet = L_DigitalSubtractBitmap(&pDstData->LeadBitmap, &pSrcData->LeadBitmap, pDsaDlgData->uFlag); if(nRet == SUCCESS) { EnableWindow(GetDlgItem(hWnd, IDOK), TRUE ); EnableWindow(GetDlgItem(hWnd, IDCANCEL), TRUE); pDsaDlgData->bError = FALSE; InvalidateRect(FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage), NULL, FALSE); InvalidateRect(GetDlgItem(hWnd, IDC_DSA_ERR_STA), NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } else { switch(nRet) { case ERROR_INV_RANGE: case ERROR_BITPERPIXEL: case ERROR_INVALID_COMPONENT_NUM: case ERROR_IMAGE_TYPE: InvalidateRect(FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage), NULL, FALSE); pDsaDlgData->bError = TRUE; InvalidateRect(hWnd, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); InvalidateRect(hWnd, NULL, FALSE); EnableWindow(GetDlgItem(hWnd, IDOK), TRUE ); EnableWindow(GetDlgItem(hWnd, IDCANCEL), TRUE); break; } } }