#include "ImgPF.h" static L_BOOL TVDice_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID TVDice_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_VOID TVDice_OnHScroll (HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos); static L_VOID TVDice_OnTimer (HWND hWnd, L_INT nID); static L_BOOL TVDice_OnPaint (HWND hWnd); static L_VOID L_ApplyFilter (HWND hWnd); L_BOOL CALLBACK TVDiceDlgProc(HWND hWnd, L_UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { HANDLE_MSG(hWnd, WM_INITDIALOG, TVDice_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, TVDice_OnCommand); HANDLE_MSG(hWnd, WM_PAINT, TVDice_OnPaint); HANDLE_MSG(hWnd, WM_HSCROLL, TVDice_OnHScroll); HANDLE_MSG(hWnd, WM_TIMER, TVDice_OnTimer); case WM_USER_UPDATEVIEW: StatusProc.ProgressValue = 100; L_ApplyFilter(hWnd); break; } return FALSE; } static L_BOOL TVDice_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM Data) { HWND hWndParent; pCHILDDATA pData; LPTVDICEDLGDATA pTVDiceDlgData; L_INT nIndex; RECT rcRgn; L_INT nRangeMax[] = {0, 0, 500, 0, 0}; L_INT nRangeMin[] = {2, 2, 1 , 1, 1}; L_INT nPosInit[] = {0, 0, 1 , 0, 0}; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pTVDiceDlgData = (LPTVDICEDLGDATA)(Data); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pTVDiceDlgData); MemorizeAndCopyBitmap (hWndParent, &pTVDiceDlgData->LeadBitmap); L_GetBitmapRgnBounds(&pTVDiceDlgData->LeadBitmap, NULL, &rcRgn); MoveDialogToMiddle(hWnd); nRangeMax[0] = (rcRgn.right - rcRgn.left); nRangeMax[1] = (rcRgn.bottom - rcRgn.top); nRangeMax[3] = (rcRgn.right - rcRgn.left) >> 1; nRangeMax[4] = (rcRgn.bottom - rcRgn.top) >> 1; nPosInit[0] = nRangeMax[0] >> 1; nPosInit[1] = nRangeMax[1] >> 1; nPosInit[3] = nRangeMax[3] >> 1; nPosInit[4] = nRangeMax[4] >> 1; pTVDiceDlgData->nBWidth = nPosInit[0]; pTVDiceDlgData->nBHeight = nPosInit[1]; pTVDiceDlgData->nRandomize = nPosInit[2]; pTVDiceDlgData->nBPerRow = nPosInit[3]; pTVDiceDlgData->nBPerCol = nPosInit[4]; pTVDiceDlgData->nEdtBaseID = IDC_DICE_WDT_EDT; pTVDiceDlgData->nSldBaseID = IDC_DICE_WDT_SLD; pTVDiceDlgData->nSlideNum = 3; pTVDiceDlgData->uFlags = DICE_SIZE; pTVDiceDlgData->crColor = RGB(0, 0, 0); StatusProc.bProgress = TRUE; StatusProc.bInvalidate = FALSE; StatusProc.bKillProgress = FALSE; StatusProc.bEnd = FALSE; StatusProc.DlgWnd = hWnd; StatusProc.ProgressValue = 100; StatusProc.ProgWnd = GetDlgItem(hWnd, IDC_DICE_PROG); Progress_SetRange(GetDlgItem(hWnd, IDC_DICE_PROG), 0, 100); Progress_SetPos (GetDlgItem(hWnd, IDC_DICE_PROG), 0); ComboBox_AddString(GetDlgItem(hWnd, IDC_DICE_COM), TEXT("Period")); ComboBox_AddString(GetDlgItem(hWnd, IDC_DICE_COM), TEXT("Frequency")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_DICE_COM), 0); for(nIndex = 0; nIndex < pTVDiceDlgData->nSlideNum; nIndex++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pTVDiceDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nIndex], nRangeMax[nIndex]); SetNumericEditBox(GetDlgItem(hWnd, pTVDiceDlgData->nEdtBaseID + nIndex), nRangeMin[nIndex], nRangeMax[nIndex], 1, 0, FALSE); SetDlgItemInt(hWnd, pTVDiceDlgData->nEdtBaseID + nIndex, nPosInit[nIndex], FALSE); } pTVDiceDlgData->nRandomize = 0; EnableWindow(GetDlgItem(hWnd, IDC_DICE_RND_SLD), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_DICE_RND_EDT), FALSE); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); L_ApplyFilter(hWnd); return TRUE; } static L_VOID TVDice_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_VOID TVDice_OnCommand(HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { HWND hWndParent; LPTVDICEDLGDATA pTVDiceDlgData; pCHILDDATA pData; RECT rcRgn; L_INT nValue, nIndex, nCurSel; L_INT nCheck = 0; L_INT nRangeMin[] = {2, 2, 1 , 1, 1}; L_INT nRangeMax[] = {0, 0, 500, 0, 0}; L_INT nPosInit[] = {0, 0, 0 , 0, 0}; COLORREF crColor; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA(hWndParent); pTVDiceDlgData = (LPTVDICEDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); L_GetBitmapRgnBounds(&pTVDiceDlgData->LeadBitmap, NULL, &rcRgn); nRangeMax[0] = rcRgn.right - rcRgn.left; nRangeMax[1] = rcRgn.bottom - rcRgn.top; nRangeMax[3] = (rcRgn.right + rcRgn.left) >> 1; nRangeMax[4] = (rcRgn.bottom + rcRgn.top) >> 1; switch(nID) { case IDOK: ShowStatusWindow(FALSE); StatusProc.bStillWork = TRUE; StatusProc.bInvalidate = TRUE; StatusProc.bEnd = TRUE; InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, TRUE); break; case IDCANCEL: StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; StatusProc.ProgressValue = 100 ; EndDialog(hWnd, FALSE); break; case IDC_DICE_RND_CHK: EnableWindow(GetDlgItem(hWnd, IDC_DICE_RND_SLD), Button_GetCheck(hWndCtl)); EnableWindow(GetDlgItem(hWnd, IDC_DICE_RND_EDT), Button_GetCheck(hWndCtl)); pTVDiceDlgData->nRandomize = Button_GetCheck(hWndCtl) ? GetDlgItemInt(hWnd, IDC_DICE_RND_EDT, NULL , FALSE) : 0; L_ApplyFilter(hWnd); break; case IDC_DICE_RSIZ_CHK: pTVDiceDlgData->uFlags ^= BITMAP_RESIZE; L_ApplyFilter(hWnd); break; case IDC_DICE_CLR_BTN: crColor = pTVDiceDlgData->crColor; pTVDiceDlgData->crColor = ShowColorDialog(hWnd, crColor); if (crColor != pTVDiceDlgData->crColor) { InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_DICE_COM: if(uCodeNotify == CBN_SELCHANGE) { nCurSel = ComboBox_GetCurSel(hWndCtl); nCurSel = (nCurSel + 1) << 4; if(nCurSel & pTVDiceDlgData->uFlags) return; pTVDiceDlgData->uFlags &= 0xFF0F; pTVDiceDlgData->uFlags |= nCurSel; nCurSel = (pTVDiceDlgData->uFlags & DICE_SIZE) ? 0 : 3; pTVDiceDlgData->nBPerRow = nPosInit[0] = min(nRangeMax[0 + nCurSel], (L_INT)pTVDiceDlgData->nBPerRow);/*nPosInit[0 + nCurSel];*/ pTVDiceDlgData->nBPerCol = nPosInit[1] = min(nRangeMax[1 + nCurSel], (L_INT)pTVDiceDlgData->nBPerCol); /*nPosInit[1 + nCurSel];*/ for(nIndex = 0; nIndex < 2; nIndex++) { Trackbar_SetTheRange(GetDlgItem(hWnd, pTVDiceDlgData->nSldBaseID + nIndex), TRUE, nRangeMin[nCurSel + nIndex], nRangeMax[nCurSel + nIndex]); EditNumericEditBox (GetDlgItem(hWnd, pTVDiceDlgData->nSldBaseID + nIndex), nRangeMin[nCurSel + nIndex], nRangeMax[nCurSel + nIndex], 1, 0, FALSE, EDT_MODFY_MAX | EDT_MODFY_MIN); SetDlgItemInt(hWnd, IDC_DICE_WDT_EDT + nIndex, nPosInit[nIndex], TRUE); } InvalidateRect(hWndCtl, NULL, FALSE); L_ApplyFilter(hWnd); } break; case IDC_DICE_BRDR_CHK: pTVDiceDlgData->uFlags ^= PUZZLE_BORDER; EnableWindow(GetDlgItem(hWnd, IDC_DICE_CLR_BTN), Button_GetCheck(hWndCtl)); InvalidateRect(hWnd, NULL, FALSE); L_ApplyFilter(hWnd); break; } if(nID >= (L_INT)pTVDiceDlgData->nEdtBaseID && nID <(L_INT)(pTVDiceDlgData->nEdtBaseID + pTVDiceDlgData->nSlideNum)) { if(uCodeNotify == EN_CHANGE) { nIndex = nID - pTVDiceDlgData->nEdtBaseID; nValue = GetDlgItemInt(hWnd, nID, NULL, FALSE); Trackbar_SetPos(GetDlgItem(hWnd, nID + pTVDiceDlgData->nSlideNum), TRUE, nValue); switch(nIndex) { case 0: if(pTVDiceDlgData->nBWidth == nValue) return; pTVDiceDlgData->nBWidth = nValue; break; case 1: if(pTVDiceDlgData->nBHeight == nValue) return; pTVDiceDlgData->nBHeight = nValue; break; case 2: if(pTVDiceDlgData->nRandomize == nValue) return; pTVDiceDlgData->nRandomize = nValue; break; } L_ApplyFilter(hWnd); } } } static L_BOOL TVDice_OnPaint(HWND hWnd) { HBRUSH hBrush; LPTVDICEDLGDATA pTVDiceDlgData; PAINTSTRUCT ps; HDC hDC; RECT rcRect; pTVDiceDlgData = (LPTVDICEDLGDATA)GetWindowLong(hWnd, GWL_USERDATA); GetClientRect(GetDlgItem(hWnd, IDC_DICE_CLR_TXT), &rcRect); hDC = BeginPaint(GetDlgItem(hWnd, IDC_DICE_CLR_TXT), &ps); hBrush = CreateSolidBrush(pTVDiceDlgData->crColor); FillRect(hDC, &rcRect, Button_GetCheck(GetDlgItem(hWnd, IDC_DICE_BRDR_CHK)) ? hBrush : (HBRUSH)COLOR_WINDOW); DeleteBrush(hBrush); EndPaint(GetDlgItem(hWnd, IDC_DICE_CLR_TXT), &ps); return FALSE; } static L_VOID TVDice_OnHScroll(HWND hWnd, HWND hWndCtl, L_UINT uCode, L_INT nPos) { LPTVDICEDLGDATA pTVDiceDlgData = (LPTVDICEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); SetDlgItemInt(hWnd, GetDlgCtrlID(hWndCtl) - pTVDiceDlgData->nSlideNum, Trackbar_GetPos(hWndCtl), FALSE); } static L_VOID L_ApplyFilter(HWND hWnd) { pCHILDDATA pData; L_INT nRet = 0; HWND hWndParent; LPTVDICEDLGDATA pTVDiceDlgData; if ( 100 != StatusProc.ProgressValue ) { StatusProc.bKillProgress = TRUE ; return ; } pTVDiceDlgData = (LPTVDICEDLGDATA) GetWindowLong(hWnd, GWL_USERDATA); hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = (pCHILDDATA)GetWindowLong(hWndParent, GWL_USERDATA); FreeMemorizedBitmap (hWndParent); //MEMDISK// L_CopyBitmap(&pData->LeadBitmap, &pTVDiceDlgData->LeadBitmap, sizeof(BITMAPHANDLE)); nRet = L_DiceEffectBitmap(&pData->LeadBitmap, pTVDiceDlgData->nBWidth, pTVDiceDlgData->nBHeight, pTVDiceDlgData->nRandomize, pTVDiceDlgData->uFlags, pTVDiceDlgData->crColor); if(nRet == SUCCESS) { InvalidateRect(hWndParent, NULL, TRUE); StatusProc.ProgressValue = 100; Progress_SetPos(StatusProc.ProgWnd , 0); if(StatusProc.bEnd) { StatusProc.bProgress = FALSE; StatusProc.bKillProgress = TRUE ; } } }