/*[]=====================================================================[]*/ /*[] 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 GetAddBitmapImages (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); #ifdef UNICODE extern HFONT ghDlgFont; #endif// UNICODE L_BOOL CALLBACK AddWeightDialog(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; LPADDWDLGDATA pAddWDlgData; pCHILDDATA pListData; HWND hWndList; RECT rcRect; pAddWDlgData = (LPADDWDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndList = (HWND) GetDlgItem(hWnd, ((pAddWDlgData->bAllList) || (pAddWDlgData->nIndex == 0)) ? IDC_ADDW_ALLLIST_LST : IDC_ADDW_ALOCLIST_LST); pListData = (pCHILDDATA) ListBox_GetItemData(hWndList, ListBox_GetCurSel(hWndList)); hdc = BeginPaint(GetDlgItem(hWnd, IDC_ADDW_LSTIMG_IMG), &ps); hPalette = L_CreatePaintPalette(hdc, &pListData->LeadBitmap); if (hPalette) { hSavedPalette = SelectPalette (hdc, hPalette, TRUE); RealizePalette (hdc); } GetClientRect(GetDlgItem(hWnd, IDC_ADDW_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_ADDW_LSTIMG_IMG), &ps); return FALSE; } L_BOOL CALLBACK AddWBitmapEnum(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_ADDW_ALLLIST_LST)); ListBox_AddString(GetDlgItem(hDlg, IDC_ADDW_ALLLIST_LST), StripName); ListBox_SetItemData(GetDlgItem(hDlg, IDC_ADDW_ALLLIST_LST), nCount, (LONG)pData); return TRUE; } L_VOID GetAddBitmapImages(HWND hWnd) { EnumChildWindows (hWndClient, AddWBitmapEnum, (LONG)hWnd); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALLLIST_LST), 0); } L_BOOL AddDlg_OnInit(HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPADDWDLGDATA pAddWDlgData; pCHILDDATA pData; HWND hWndParent; BITMAPHANDLE ResultBitmap; L_TCHAR szName[20] = TEXT("\0"); pAddWDlgData = (LPADDWDLGDATA) lParam; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pAddWDlgData); 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_ADDW_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_ADDW_ALLLIST_LST))); CreateChildWindow(szName, &ResultBitmap, NULL, 0, TRUE); pAddWDlgData->puFactor = (L_UINT L_FAR *) malloc(sizeof(L_UINT) * 1000); pAddWDlgData->nBitmapNum = 0; pAddWDlgData->nIndex = 0; pAddWDlgData->bAllList = TRUE; pAddWDlgData->uFlage = BC_ADD; EnableWindow(GetDlgItem(hWnd, IDC_ADDW_WGT_EDT), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), FALSE); memset(pAddWDlgData->puFactor, 0, sizeof(L_UINT) * 1000); SetNumericEditBox(GetDlgItem(hWnd, IDC_ADDW_WGT_EDT), 0, 0xffff, 1, 0, FALSE); ShowWindow(hWnd, SW_SHOW); InvalidateRect(hWnd, NULL, FALSE); L_CreateBitmapList(&pAddWDlgData->hListBitmap); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALLLIST_LST), 0); Button_Enable(GetDlgItem(hWnd, IDC_ADDW_DEL_BTN), FALSE); Button_SetCheck(GetDlgItem(hWnd, IDC_ADDW_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) { LPADDWDLGDATA pAddWDlgData; 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; L_INT nValue; L_TCHAR szBuffer[5] = TEXT("\0"); pAddWDlgData = (LPADDWDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient,SendMessage); pData = LOCKCHILDDATA(hWndParent); if (((nID == IDC_ADDW_ALLLIST_LST) || (nID == IDC_ADDW_ALOCLIST_LST))) { pAddWDlgData->bAllList = nID - IDC_ADDW_ALOCLIST_LST; InvalidateRect(hWnd, NULL, FALSE); if (pAddWDlgData->nIndex != 0 && (nID == IDC_ADDW_ALOCLIST_LST)) { SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, pAddWDlgData->puFactor[ListBox_GetCurSel(hWndCtl)], FALSE); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), ListBox_GetCurSel(hWndCtl)); } } if ((nID == IDC_ADDW_WGT_LST)) { ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), ListBox_GetCurSel(hWndCtl)); SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, pAddWDlgData->puFactor[ListBox_GetCurSel(hWndCtl)], FALSE); return; } switch (nID) { case IDC_ADDW_WGT_EDT: if (uCodeNotify == EN_CHANGE) { nValue = GetDlgItemInt(hWnd, nID, NULL, FALSE); if (nValue == 0) break; if (pAddWDlgData->nIndex != 0) { if (pAddWDlgData->puFactor[ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST))] != (L_UINT)nValue) { pAddWDlgData->puFactor[ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST))] = nValue; nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADDW_WGT_LST)); ListBox_DeleteString(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), nIndex); _itot(nValue, szBuffer, 10); ListBox_InsertString(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), nIndex, szBuffer); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), nIndex); L_ApplyFilter(hWnd); } } else { SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, 100, FALSE); L_ApplyFilter(hWnd); } } break; case IDC_ADDW_ADD_BTN: nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALLLIST_LST)); pListData = (pCHILDDATA)ListBox_GetItemData(GetDlgItem(hWnd, IDC_ADDW_ALLLIST_LST), nIndex); nRet = L_InsertBitmapListItem(pAddWDlgData->hListBitmap, pAddWDlgData->nIndex, &pListData->LeadBitmap); ListBox_SetItemData(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), 0, pListData); memset(StripName, 0, sizeof(StripName)); Strip(StripName,pListData->pszTitle); ListBox_AddString(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), StripName); ListBox_SetItemData(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), pAddWDlgData->nIndex, pListData); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), pAddWDlgData->nIndex); ListBox_AddString(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), TEXT("100")); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), pAddWDlgData->nIndex); pAddWDlgData->puFactor[pAddWDlgData->nIndex] = 100; SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, 100, FALSE); pAddWDlgData->nIndex++; Button_Enable(GetDlgItem(hWnd, IDC_ADDW_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_ADDW_DEL_BTN: pAddWDlgData->nIndex--; nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST)); L_RemoveBitmapListItem(pAddWDlgData->hListBitmap, nIndex, NULL); ListBox_DeleteString(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), nIndex); ListBox_DeleteString(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), nIndex); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), max(0, nIndex - 1)); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), max(0, nIndex - 1)); if (pAddWDlgData->nIndex != 0) SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, pAddWDlgData->puFactor[max(0, nIndex - 1)], FALSE); else SetDlgItemInt(hWnd, IDC_ADDW_WGT_EDT, 100, FALSE); for (uCount = nIndex; uCount < (L_UINT)pAddWDlgData->nIndex; uCount++) pAddWDlgData->puFactor[uCount] = pAddWDlgData->puFactor[uCount + 1]; L_GetBitmapListCount(pAddWDlgData->hListBitmap, &uCount); if (uCount == 0) { EnableWindow(GetDlgItem(hWnd, IDC_ADDW_DEL_BTN), FALSE); EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); Edit_SetText(GetDlgItem(hWnd, IDOK), TEXT("")); } 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_ADDW_AVGW_RAD: case IDC_ADDW_ADDW_RAD: case IDC_ADDW_AVG_RAD: case IDC_ADDW_ADD_RAD: EnableWindow(GetDlgItem(hWnd, IDC_ADDW_WGT_EDT), !((nID == IDC_ADDW_AVG_RAD) || (nID == IDC_ADDW_ADD_RAD))); EnableWindow(GetDlgItem(hWnd, IDC_ADDW_WGT_LST), !((nID == IDC_ADDW_AVG_RAD) || (nID == IDC_ADDW_ADD_RAD))); if ((L_INT)pAddWDlgData->uFlage == nID - IDC_ADDW_AVG_RAD + 1) return; pAddWDlgData->uFlage = nID - IDC_ADDW_AVG_RAD + 1; InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter (hWnd); break; case IDOK: pListData = (pCHILDDATA)ListBox_GetItemData(GetDlgItem(hWnd, IDC_ADDW_ALOCLIST_LST), 0); for (nIndex = 0; nIndex < pAddWDlgData->nIndex; nIndex++) L_RemoveBitmapListItem(pAddWDlgData->hListBitmap, 0, NULL); L_DestroyBitmapList(pAddWDlgData->hListBitmap); L_FreeBitmap(&pListData->LeadBitmap); L_CopyBitmap(&pListData->LeadBitmap, &pData->LeadBitmap, sizeof(BITMAPHANDLE)); free(pAddWDlgData->puFactor); 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_ADDW_ALLLIST_LST), 0); StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE; StatusProc.ProgressValue = 100; for (nIndex = 0; nIndex < pAddWDlgData->nIndex; nIndex++) L_RemoveBitmapListItem(pAddWDlgData->hListBitmap, 0, NULL); L_DestroyBitmapList(pAddWDlgData->hListBitmap); free(pAddWDlgData->puFactor); 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; LPADDWDLGDATA pAddWDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE; return; } EnableWindow(GetDlgItem(hWnd, IDOK), FALSE); EnableWindow(GetDlgItem(hWnd, IDCANCEL), FALSE); pAddWDlgData = (LPADDWDLGDATA) GetWindowLong(hWnd,GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); if (pAddWDlgData->nIndex == 0) nRet = SUCCESS; else nRet = L_AddWeightedBitmaps(&pData->LeadBitmap, sizeof(BITMAPHANDLE), pAddWDlgData->hListBitmap, pAddWDlgData->puFactor, pAddWDlgData->uFlage); if(nRet == SUCCESS) { if (pAddWDlgData->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(pAddWDlgData) { GlobalFreePtr(pAddWDlgData); } } } }