/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL AddDlg_OnPaint (HWND hWnd); static L_BOOL AddDlg_OnInit (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID AddDlg_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_VOID AddDlg_OnTimer (HWND hWnd, L_INT nID); static L_VOID L_ApplyFilter (HWND hWnd); static L_VOID GetAddBitmapImages (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK AddDialog (HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch (uMessage) { HANDLE_MSG (hWnd, WM_PAINT, AddDlg_OnPaint); HANDLE_MSG (hWnd, WM_INITDIALOG, AddDlg_OnInit); HANDLE_MSG (hWnd, WM_COMMAND, AddDlg_OnCommand); HANDLE_MSG (hWnd, WM_TIMER, AddDlg_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter (hWnd); break; } return FALSE; } L_BOOL AddDlg_OnPaint(HWND hWnd) { PAINTSTRUCT ps; HPALETTE hPalette, hSavedPalette; HDC hdc; RECT rcImage; LPADDDLGDATA pAddDlgData; pCHILDDATA pListData; HWND hWndList; RECT rcRect; pAddDlgData = (LPADDDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndList = (HWND) GetDlgItem(hWnd, ((pAddDlgData->bAllList) || (pAddDlgData->nIndex == 0)) ? IDC_ADBM_ALLLIST_LST : IDC_ADBM_ALOCLIST_LST); pListData = (pCHILDDATA) ListBox_GetItemData(hWndList, ListBox_GetCurSel(hWndList)); hdc = BeginPaint(GetDlgItem(hWnd, IDC_ADBM_LSTIMG_IMG), &ps); hPalette = L_CreatePaintPalette(hdc, &pListData->LeadBitmap); if (hPalette) { hSavedPalette = SelectPalette (hdc, hPalette, TRUE); RealizePalette (hdc); } GetClientRect(GetDlgItem(hWnd, IDC_ADBM_LSTIMG_IMG), &rcImage); FillRect(hdc, &rcImage, (HBRUSH) COLOR_WINDOW); FitImageToWindow(rcImage,&pListData->LeadBitmap, &rcRect); L_PaintDC(hdc, &pListData->LeadBitmap, NULL, NULL, &rcRect, &ps.rcPaint,SRCCOPY); if (hSavedPalette) SelectPalette (hdc, hSavedPalette, TRUE); if(hPalette) DeleteObject (hPalette); EndPaint(GetDlgItem(hWnd, IDC_ADBM_LSTIMG_IMG), &ps); return FALSE; } L_BOOL CALLBACK AddBitmapEnum(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 = ListBox_GetCount(GetDlgItem(hDlg, IDC_ADBM_ALLLIST_LST)); ListBox_AddString(GetDlgItem(hDlg, IDC_ADBM_ALLLIST_LST), StripName); ListBox_SetItemData(GetDlgItem(hDlg, IDC_ADBM_ALLLIST_LST), nCount, (LONG)pData); return TRUE; } L_VOID GetAddBitmapImages(HWND hWnd) { EnumChildWindows (hWndClient, AddBitmapEnum, (LONG)hWnd); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST), 0); } L_BOOL AddDlg_OnInit(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPADDDLGDATA pAddDlgData; pCHILDDATA pData; HWND hWndParent; BITMAPHANDLE ResultBitmap; L_TCHAR szName[20] = TEXT("\0"); pAddDlgData = (LPADDDLGDATA) lParam; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pAddDlgData); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); MoveDialogToMiddle(hWnd); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_ADBM_PROG); Progress_SetRange(StatusProc.ProgWnd, 0, 100); Progress_SetPos(StatusProc.ProgWnd, 0); GetAddBitmapImages(hWnd); //MEMDISK...// MemorizeAndCopyBitmap (hWndParent, &ResultBitmap); wsprintf(szName, TEXT("AddBitmap ( %d )"), ListBox_GetCount(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST))); CreateChildWindow(szName, &ResultBitmap, NULL, 0, TRUE); pAddDlgData->nBitmapNum = 0; pAddDlgData->nIndex = 0; pAddDlgData->bAllList = TRUE; pAddDlgData->uFlage = BC_ADD; ShowWindow(hWnd, SW_SHOW); InvalidateRect(hWnd, NULL, FALSE); L_CreateBitmapList(&pAddDlgData->hListBitmap); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST), 0); Button_Enable(GetDlgItem(hWnd, IDC_ADBM_DEL_BTN), FALSE); Button_SetCheck(GetDlgItem(hWnd, IDC_ADBM_ADD_RAD), TRUE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); #ifdef UNICODE SetControlFont ( hWnd, ghDlgFont ) ; #endif// UNICODE InvalidateRect(hWnd, NULL, FALSE); return TRUE; } static L_VOID AddDlg_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } L_VOID AddDlg_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPADDDLGDATA pAddDlgData; pCHILDDATA pData, pListData; HWND hWndParent; L_TCHAR StripName[255] = TEXT("\0"); L_INT nIndex; L_INT nRet; RECT rcClient; L_INT nShow; L_UINT uCount; pAddDlgData = (LPADDDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); if (((nID == IDC_ADBM_ALLLIST_LST) || (nID == IDC_ADBM_ALOCLIST_LST))) { pAddDlgData->bAllList = nID - IDC_ADBM_ALOCLIST_LST; InvalidateRect(hWnd, NULL, FALSE); } switch (nID) { case IDC_ADBM_ADD_BTN: nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST)); pListData = (pCHILDDATA)ListBox_GetItemData(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST), nIndex); nRet = L_InsertBitmapListItem(pAddDlgData->hListBitmap, pAddDlgData->nIndex, &pListData->LeadBitmap); ListBox_SetItemData(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), 0, pListData); memset(StripName, 0, sizeof(StripName)); Strip(StripName,pListData->pszTitle); ListBox_AddString(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), StripName); ListBox_SetItemData(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), pAddDlgData->nIndex, pListData); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), pAddDlgData->nIndex); pAddDlgData->nIndex++; Button_Enable(GetDlgItem(hWnd, IDC_ADBM_DEL_BTN), TRUE); Button_Enable(GetDlgItem(hWnd, IDOK), TRUE); InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); GetClientRect (hWndParent, &rcClient); { if(IsMaximized(hWndParent)) nShow = SIZEFULLSCREEN; else if (IsMinimized(hWndParent)) { nShow = SIZEICONIC; } else nShow = SIZENORMAL; SendMessage(hWndParent, WM_SIZE, nShow, MAKELPARAM(RECTWIDTH (&rcClient), RECTHEIGHT (&rcClient))); } break; case IDC_ADBM_DEL_BTN: nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST)); L_RemoveBitmapListItem(pAddDlgData->hListBitmap, nIndex, NULL); ListBox_DeleteString(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), nIndex); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), max(0, nIndex - 1)); pAddDlgData->nIndex--; L_GetBitmapListCount(pAddDlgData->hListBitmap, &uCount); if (uCount == 0) { EnableWindow(GetDlgItem(hWnd, IDC_ADBM_DEL_BTN), FALSE); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); } else InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); GetClientRect (hWndParent, &rcClient); { if(IsMaximized(hWndParent)) nShow = SIZEFULLSCREEN; else if (IsMinimized(hWndParent)) { nShow = SIZEICONIC; } else nShow = SIZENORMAL; SendMessage(hWndParent, WM_SIZE, nShow, MAKELPARAM(RECTWIDTH (&rcClient), RECTHEIGHT (&rcClient))); } break; case IDC_ADBM_AVG_RAD: case IDC_ADBM_ADD_RAD: if ((L_INT)pAddDlgData->uFlage == nID - IDC_ADBM_AVG_RAD + 1) return; pAddDlgData->uFlage = nID - IDC_ADBM_AVG_RAD + 1; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); break; case IDOK: pListData = (pCHILDDATA)ListBox_GetItemData(GetDlgItem(hWnd, IDC_ADBM_ALOCLIST_LST), 0); for (nIndex = 0; nIndex < pAddDlgData->nIndex; nIndex++) L_RemoveBitmapListItem(pAddDlgData->hListBitmap, 0, NULL); L_DestroyBitmapList(pAddDlgData->hListBitmap); L_FreeBitmap(&pListData->LeadBitmap); L_CopyBitmap(&pListData->LeadBitmap, &pData->LeadBitmap, sizeof(BITMAPHANDLE)); FORWARD_WM_CLOSE(hWndParent, DefMDIChildProc); SendMessage(hWndClient, WM_MDIACTIVATE, (WPARAM)pListData->hBitmapWnd, (LPARAM)0); L_UndoList_AddBitmap (FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage)); //UNDOLIST// StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; EndDialog(hWnd, TRUE); break; case IDCANCEL: pListData = (pCHILDDATA)ListBox_GetItemData(GetDlgItem(hWnd, IDC_ADBM_ALLLIST_LST), 0); StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; for (nIndex = 0; nIndex < pAddDlgData->nIndex; nIndex++) L_RemoveBitmapListItem(pAddDlgData->hListBitmap, 0, NULL); L_DestroyBitmapList(pAddDlgData->hListBitmap); FORWARD_WM_CLOSE(hWndParent, DefMDIChildProc); SendMessage(hWndClient, WM_MDIACTIVATE, (WPARAM)pListData->hBitmapWnd, (LPARAM)0); EndDialog(hWnd, FALSE); break; } } L_VOID L_ApplyFilter (HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPADDDLGDATA pAddDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE; return; } pAddDlgData = (LPADDDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); EnableWindow(GetDlgItem(hWnd, IDCANCEL), FALSE); if (pAddDlgData->nIndex == 0) nRet = SUCCESS; else nRet = L_AddBitmaps(&pData->LeadBitmap, sizeof(BITMAPHANDLE), pAddDlgData->hListBitmap, pAddDlgData->uFlage); if(nRet == SUCCESS) { if (pAddDlgData->nIndex) EnableWindow(GetDlgItem(hWnd, IDOK), TRUE ); EnableWindow(GetDlgItem(hWnd, IDCANCEL), TRUE); InvalidateRect(hWndParent, NULL, FALSE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd, 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; if(pAddDlgData) { GlobalFreePtr(pAddDlgData); } } } }