/*[]=====================================================================[]*/ /*[] LEADTOOLS for Windows(Class Library) - Version 11 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2000 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ /*------(Mfcfx)--------------------------------------------------------------- We have made the assumption that the user has the knowledge of Object Oriented programing of C under Windows. This example will: 1. display the image using the effect, also display Transition,shape and text if user chose them. 2. the user can chose new (effect,Transition,shape and text) by using LEAD Dialogs. ----------------------------------------------------------------------------------*/ // SpEfxDlg.cpp : implementation file // #include "stdafx.h" #include "resource.h" #include "SpEfxDlg.h" #include // Lead functions header files #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSpEfxDlg dialog CSpEfxDlg::CSpEfxDlg(CWnd* pParent /*=NULL*/) : CDialog(CSpEfxDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSpEfxDlg) m_ShowShape = FALSE; m_ShowText = FALSE; m_ShowTransition = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSpEfxDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSpEfxDlg) DDX_Control(pDX, IDC_BUTTON_IMAGE, m_Image); DDX_Check(pDX, IDC_SHOWSHAPE, m_ShowShape); DDX_Check(pDX, IDC_SHOWTEXT, m_ShowText); DDX_Check(pDX, IDC_SHOWTRANSITION, m_ShowTransition); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSpEfxDlg, CDialog) //{{AFX_MSG_MAP(CSpEfxDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_EFFECT, OnEffect) ON_WM_CLOSE() ON_BN_CLICKED(IDC_TRANSITION, OnTransition) ON_BN_CLICKED(IDC_SHAPE, OnShape) ON_BN_CLICKED(IDC_TEXT, OnText) ON_BN_CLICKED(IDC_SHOW, OnShow) ON_BN_CLICKED(IDC_SHOWSHAPE, OnShowshape) ON_BN_CLICKED(IDC_SHOWTEXT, OnShowtext) ON_BN_CLICKED(IDC_SHOWTRANSITION, OnShowtransition) ON_WM_DRAWITEM() //}}AFX_MSG_MAP END_MESSAGE_MAP() #define MAX_IMAGES 5 #define DIR _T("..\\images") L_TCHAR L_FAR *aszFileName[MAX_IMAGES]={0}; L_INT FillFileNameArray(L_TCHAR L_FAR* pszDir) { L_INT x; L_TCHAR szFile[L_MAXPATH]=_T("\0"); for(x=0;xSetDirectoryParams(&DlgParms); nRet = m_LBitmap.DialogFile()->DoModalGetDirectory(GetSafeHwnd()); if(nRet != SUCCESS_DLG_OK) { if(nRet != SUCCESS_DLG_CANCEL) m_LBitmap.DisplayErrorFromList(NULL); AfxGetMainWnd()->PostMessage(WM_CLOSE); EndDialog(IDCANCEL); return TRUE; } m_LBitmap.DialogFile()->GetDirectoryParams(&DlgParms, sizeof(GETDIRECTORYDLGPARAMS)); if(FillFileNameArray(DlgParms.pszDirectory)!=SUCCESS) { AfxMessageBox(_T("Error, No More Memory!")); AfxGetMainWnd()->PostMessage(WM_CLOSE); EndDialog(IDCANCEL); return TRUE; } nRet = m_LBitmap.Load(aszFileName[0]); } if (nRet != SUCCESS) { m_LBitmap.DisplayErrorFromList(NULL); AfxGetMainWnd()->PostMessage(WM_CLOSE); EndDialog(IDCANCEL); return TRUE; } OnInitBitmap (); return TRUE; // return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CSpEfxDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } void CSpEfxDlg::OnClose() { FreeFileNameArray(); // TODO: Add your message handler code here and/or call default CDialog::OnClose(); } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CSpEfxDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CSpEfxDlg::OnEffect() { m_bStopPaint = TRUE; m_LBitmap.DialogEffect()->EnablePreview(TRUE); L_INT EnRet = m_LBitmap.DialogEffect()->DoModalGetEffect (GetSafeHwnd()); if ( EnRet == SUCCESS_DLG_OK ) { m_LBitmap.DialogEffect()->GetEffectParams(&EfxDlgParm, sizeof(EfxDlgParm)); m_LBitmap.PaintEffect()->SetEffectParameters(&EfxDlgParm); m_bStopPaint = FALSE; InvalidateRect(NULL); UpdateWindow(); } else if ( EnRet != SUCCESS_DLG_CANCEL) MessageBox ( _T(" Error Get Effects ... ") , _T(" Error ") , MB_OK ); m_bStopPaint = FALSE; } void CSpEfxDlg::OnTransition() { m_bStopPaint = TRUE; m_LBitmap.DialogEffect()->EnableCallBack(FALSE); m_LBitmap.DialogEffect()->EnablePreview(TRUE); L_INT TnRet = m_LBitmap.DialogEffect()->DoModalGetTransition(GetSafeHwnd()); if ( TnRet == SUCCESS_DLG_OK ) { m_LBitmap.DialogEffect()->GetTransitionParams (&TransDlgParm, sizeof(TransDlgParm)); m_LBitmap.DialogEffect()->GetGradientParams (&GrdDlgParm, sizeof(GrdDlgParm)); m_LBitmap.PaintEffect()->SetTransitionParameters(&TransDlgParm); m_LBitmap.PaintEffect()->SetGradientParameters (&GrdDlgParm); m_bStopPaint = FALSE; InvalidateRect(NULL); UpdateWindow(); } else if ( TnRet != SUCCESS_DLG_CANCEL) MessageBox ( _T(" Error Get Transition ... ") , _T(" Error ") , MB_OK ); m_bStopPaint = FALSE; } void CSpEfxDlg::OnShape() { m_bStopPaint = TRUE; m_LBitmap.DialogEffect()->EnablePreview(TRUE); L_INT SnRet = m_LBitmap.DialogEffect()->DoModalGetShape (GetSafeHwnd()); if ( SnRet == SUCCESS_DLG_OK ) { m_LBitmap.DialogEffect()->GetShapeParams(&ShpDlgParm, sizeof(ShpDlgParm)); m_LBitmap.PaintEffect()->SetShapeParameters(&ShpDlgParm); if((ShpDlgParm.pBackgroundBitmap) && (ShpDlgParm.pBackgroundBitmap->Flags.Allocated)) m_LBitmap.PaintEffect()->SetFillBitmap(&m_BackImage); m_bStopPaint = FALSE; InvalidateRect(NULL); UpdateWindow(); } else if ( SnRet != SUCCESS_DLG_CANCEL ) MessageBox ( _T(" Error Get Shape ... ") , _T(" Error ") , MB_OK ); m_bStopPaint = FALSE; } void CSpEfxDlg::OnText() { if(TxtDlgParm.pForegroundBitmap == NULL) { TxtDlgParm.pForegroundBitmap = m_ForeImage.GetHandle() ; m_LBitmap.PaintEffect()->SetTextParameters(&TxtDlgParm); } m_bStopPaint = TRUE; m_LBitmap.DialogEffect()->EnablePreview(TRUE); L_INT XnRet = m_LBitmap.DialogEffect()->DoModalGetText (GetSafeHwnd()); if ( XnRet == SUCCESS_DLG_OK ) { m_LBitmap.DialogEffect()->GetTextParams(&TxtDlgParm, sizeof(TxtDlgParm)); m_LBitmap.PaintEffect()->SetTextParameters(&TxtDlgParm); if((TxtDlgParm.pForegroundBitmap) && (TxtDlgParm.pForegroundBitmap->Flags.Allocated)) m_LBitmap.PaintEffect()->SetFillBitmap(&m_ForeImage); m_bStopPaint = FALSE; InvalidateRect(NULL); UpdateWindow(); } else if ( XnRet != SUCCESS_DLG_CANCEL ) MessageBox ( _T(" Error Get Text ... ") , _T(" Error ") , MB_OK ); m_bStopPaint = FALSE; } void CSpEfxDlg::OnShow() { HPALETTE hOldPal=NULL; RECT Rect; ZeroMemory(&Rect,sizeof(Rect)); CWindowDC dc(&m_Image); HDC hdc = dc.GetSafeHdc(); m_nFileIndex++; if (m_nFileIndex >= MAX_IMAGES) m_nFileIndex = 0; m_Image.GetClientRect (&Rect); Rect.bottom -= 5; Rect.left += 5; Rect.right -= 5; Rect.top += 5; m_LBitmap.SetDstRect (&Rect); m_LBitmap.Free(); m_LBitmap.Load (aszFileName[m_nFileIndex]); m_LBitmap.PaintEffect()->SetDC(hdc); m_LBitmap.Paint()->SetDC(hdc); m_LBitmap.CreatePaintPalette(hdc); if(m_LBitmap.GetPalette()) { hOldPal = ::SelectPalette(hdc, m_LBitmap.GetPalette(), TRUE); ::RealizePalette(hdc); } Rect.bottom += 5; Rect.left -= 5; Rect.right += 5; Rect.top -= 5; m_LBitmap.PaintEffect()->SetMiddleBandWidth(2) ; m_LBitmap.PaintEffect()->SetOuterBandWidth(2) ; m_LBitmap.PaintEffect()->SetInnerBandWidth(2) ; m_LBitmap.PaintEffect()->SetMiddleBandColor(RGB(192, 192, 192)) ; m_LBitmap.PaintEffect()->SetOuterBandShadowColor(RGB(128, 128, 128)) ; m_LBitmap.PaintEffect()->SetInnerBandHilite(RGB(255, 255, 255)) ; m_LBitmap.PaintEffect()->SetOuterBandShadowColor(RGB(128, 128, 128)) ; m_LBitmap.PaintEffect()->SetOuterBandHilite(RGB(255, 255, 255)) ; m_LBitmap.PaintEffect()->DrawFrame(&Rect,EFX_FRAME_ADJUST_RECT | EFX_FRAME_OUTER_RAISED); if (m_bStopPaint) { if(hOldPal) ::SelectPalette(hdc, hOldPal, TRUE); return; } if (m_ShowTransition == TRUE) { m_LBitmap.Paint()->PaintDC(); for(unsigned int i = 1; i <= TransDlgParm.uMaxPass; i++) m_LBitmap.PaintEffect()->PaintTransition(&Rect, TransDlgParm.uTransition, TransDlgParm.uEffect, 0, 0, i, TransDlgParm.uMaxPass, SRCCOPY); } for(unsigned int i = 1; i <= EfxDlgParm.uMaxPass; i++) m_LBitmap.PaintEffect()->PaintBitmap(EfxDlgParm.uEffect, 0, 0,i, EfxDlgParm.uMaxPass, SRCCOPY); Rect.bottom -= 10; Rect.left += 10; Rect.right -= 10; Rect.top += 10; if ( m_ShowShape == TRUE ) m_LBitmap.PaintEffect()->Draw3dShape (&Rect,ShpDlgParm.uShape); if ( m_ShowText == TRUE ) m_LBitmap.PaintEffect()->Draw3dText (&Rect,TxtDlgParm.pszSampleText ,TxtDlgParm.nAngle); if(hOldPal) ::SelectPalette(hdc, hOldPal, TRUE); } void CSpEfxDlg::OnShowshape() { UpdateData ( TRUE ); InvalidateRect(NULL); UpdateWindow(); } void CSpEfxDlg::OnShowtext() { UpdateData ( TRUE ); InvalidateRect(NULL); UpdateWindow(); } void CSpEfxDlg::OnShowtransition() { UpdateData ( TRUE ); InvalidateRect(NULL); UpdateWindow(); } void CSpEfxDlg::OnInitBitmap() { memset(m_szSampleText, 0, sizeof(L_TCHAR) * L_MAXPATH); lstrcpy(m_szSampleText, _T("LEADTOOLS")); // Paint Effect Defaults ... m_LBitmap.DialogEffect()->GetEffectParams(&EfxDlgParm, sizeof(EfxDlgParm)); EfxDlgParm.uStructSize = sizeof(EFFECTDLGPARAMS); EfxDlgParm.uEffect = EFX_EFFECT_ROLL4_T_R_T_L ; EfxDlgParm.uGrain = 5 ; EfxDlgParm.uDelay = 10 ; EfxDlgParm.uMaxPass = 1 ; EfxDlgParm.bTransparent = FALSE ; EfxDlgParm.crTransparent = RGB(0,0,0) ; EfxDlgParm.uWandWidth = 3 ; EfxDlgParm.crWand = RGB(255,0,0) ; EfxDlgParm.uDlgFlags = DLG_EFFECT_DELAY | DLG_EFFECT_GRAIN | DLG_EFFECT_PASSES | DLG_EFFECT_TRANSPARENT | DLG_EFFECT_WAND | DLG_EFFECT_CLASS_WIPE | DLG_EFFECT_CLASS_WIPERECT | DLG_EFFECT_CLASS_WIPECIRCLE | DLG_EFFECT_CLASS_PUSH | DLG_EFFECT_CLASS_SLIDE | DLG_EFFECT_CLASS_ROLL | DLG_EFFECT_CLASS_ROTATE | DLG_EFFECT_CLASS_ZOOM | DLG_EFFECT_CLASS_DRIP | DLG_EFFECT_CLASS_BLIND | DLG_EFFECT_CLASS_RANDOM | DLG_EFFECT_CLASS_CHECK | DLG_EFFECT_CLASS_BLOCKS | DLG_EFFECT_CLASS_CIRCLE | DLG_EFFECT_CLASS_ELLIPSE ; m_LBitmap.DialogEffect()->SetEffectParams(&EfxDlgParm); m_LBitmap.PaintEffect()->SetEffectParameters(&EfxDlgParm); // Paint Transition Defaults m_LBitmap.DialogEffect()->GetTransitionParams(&TransDlgParm, sizeof(TransDlgParm)); TransDlgParm.uStructSize = sizeof(TRANSITIONDLGPARAMS); TransDlgParm.uTransition = 0; TransDlgParm.crBack = RGB(0,0,0); TransDlgParm.crFore = RGB(255,255,255); TransDlgParm.uSteps = 256; TransDlgParm.uGrain = 3; TransDlgParm.uDlgFlags = DLG_TRANSITION_FORECOLOR| DLG_TRANSITION_BACKCOLOR | DLG_TRANSITION_DELAY | DLG_TRANSITION_GRAIN | DLG_TRANSITION_EFFECT | DLG_TRANSITION_PASSES | DLG_TRANSITION_WAND | DLG_TRANSITION_TRANSPARENT | DLG_TRANSITION_GRADIENT; m_LBitmap.DialogEffect()->SetTransitionParams(&TransDlgParm); m_LBitmap.PaintEffect()->SetTransitionParameters(&TransDlgParm); // Gradient Defaults m_LBitmap.DialogEffect()->GetGradientParams(&GrdDlgParm, sizeof(GrdDlgParm)); GrdDlgParm.uStructSize = sizeof(GRADIENTDLGPARAMS); GrdDlgParm.crStart = RGB ( 0,0,255 ) ; GrdDlgParm.crEnd = RGB ( 255,0,0 ) ; GrdDlgParm.uStyle = EFX_GRADIENT_ANGLE_TO_RT ; GrdDlgParm.uSteps = 200 ; GrdDlgParm.uDlgFlags = DLG_GRADIENT_AUTOPREVIEW | DLG_GRADIENT_STARTCOLOR | DLG_GRADIENT_ENDCOLOR | DLG_GRADIENT_STEPS | DLG_GRADIENT_NO_TREEVIEW | DLG_GRADIENT_CLASS_LINEAR | DLG_GRADIENT_CLASS_ANGULAR | DLG_GRADIENT_CLASS_RECTANGULAR | DLG_GRADIENT_CLASS_ELLIPTICAL | DLG_GRADIENT_CLASS_CONICAL ; m_LBitmap.DialogEffect()->SetGradientParams(&GrdDlgParm); m_LBitmap.PaintEffect()->SetGradientParameters (&GrdDlgParm); // Shape Defaults ... m_LBitmap.DialogEffect()->GetShapeParams(&ShpDlgParm, sizeof(ShpDlgParm)); memset ( &ShpDlgParm, 0, sizeof ( SHAPEDLGPARAMS ) ) ; ShpDlgParm.uStructSize = sizeof ( SHAPEDLGPARAMS ) ; m_BackImage.Initialize(); ShpDlgParm.pBackgroundBitmap = m_BackImage.GetHandle(); ShpDlgParm.uShape = EFX_SHAPE_PARALLELOGRAM_R ; ShpDlgParm.crBack = RGB ( 0, 0, 255 ) ; ShpDlgParm.uBackStyle = 2 ; ShpDlgParm.crFill = RGB ( 255, 0, 0 ) ; ShpDlgParm.uFillStyle = 1 ; ShpDlgParm.crBorder = RGB ( 100, 255, 100 ) ; ShpDlgParm.uBorderStyle = 1 ; ShpDlgParm.uBorderWidth = 5 ; ShpDlgParm.crInnerHilite = RGB ( 255, 255, 255 ) ; ShpDlgParm.crInnerShadow = RGB ( 0, 0, 0 ) ; ShpDlgParm.uInnerStyle = 1 ; ShpDlgParm.uInnerWidth = 3 ; ShpDlgParm.crOuterHilite = RGB ( 255, 255, 0 ) ; ShpDlgParm.crOuterShadow = RGB ( 255, 0, 255 ) ; ShpDlgParm.uOuterStyle = 1 ; ShpDlgParm.uOuterWidth = 5 ; ShpDlgParm.nShadowX = 10 ; ShpDlgParm.nShadowY = 10 ; ShpDlgParm.crShadow = RGB ( 128, 128, 128 ) ; ShpDlgParm.uDlgFlags = DLG_SHAPE_BACKSTYLE | DLG_SHAPE_FILLSTYLE | DLG_SHAPE_FORE_BACK_COLOR | DLG_SHAPE_BORDERSTYLE | DLG_SHAPE_BORDERWIDTH | DLG_SHAPE_BORDERCOLOR | DLG_SHAPE_INNERSTYLE | DLG_SHAPE_INNERWIDTH | DLG_SHAPE_INNER_HILITE_SHADOW | DLG_SHAPE_OUTERSTYLE | DLG_SHAPE_OUTERWIDTH | DLG_SHAPE_OUTER_HILITE_SHADOW | DLG_SHAPE_SHADOWCOLOR | DLG_SHAPE_SHADOW_X_Y | DLG_SHAPE_BROWSEIMAGE | DLG_SHAPE_CLASS_SQUARE | DLG_SHAPE_CLASS_RECTANGLE | DLG_SHAPE_CLASS_PARALLELOGRAM | DLG_SHAPE_CLASS_TRAPEZOID | DLG_SHAPE_CLASS_TRIANGLE | DLG_SHAPE_CLASS_OTHER | DLG_SHAPE_CLASS_CIRCLE | DLG_SHAPE_CLASS_ELLIPSE | DLG_SHAPE_CLASS_STAR | DLG_SHAPE_CLASS_CROSS | DLG_SHAPE_CLASS_ARROW ; m_LBitmap.DialogEffect()->SetShapeParams(&ShpDlgParm); m_LBitmap.PaintEffect()->SetShapeParameters(&ShpDlgParm); // Text Defaults . memset(&m_TextFont, 0 , sizeof(m_TextFont)); m_TextFont.lfHeight = 72; m_TextFont.lfWidth = 0; m_TextFont.lfEscapement = 0; m_TextFont.lfOrientation = 0; m_TextFont.lfWeight = FW_BOLD; m_TextFont.lfItalic = FALSE; m_TextFont.lfUnderline = FALSE; m_TextFont.lfStrikeOut = FALSE; m_TextFont.lfCharSet = DEFAULT_CHARSET; m_TextFont.lfOutPrecision = OUT_DEFAULT_PRECIS; m_TextFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; m_TextFont.lfQuality = DEFAULT_QUALITY; m_TextFont.lfPitchAndFamily = DEFAULT_PITCH; lstrcpy(m_TextFont.lfFaceName, _T("Times New Roman")); m_hFont = CreateFontIndirect(&m_TextFont); m_LBitmap.DialogEffect()->GetTextParams(&TxtDlgParm, sizeof(TxtDlgParm)); memset ( &TxtDlgParm, 0, sizeof ( TEXTDLGPARAMS ) ) ; TxtDlgParm.uStructSize = sizeof ( TEXTDLGPARAMS ) ; m_ForeImage.Initialize(); TxtDlgParm.pForegroundBitmap = m_ForeImage.GetHandle() ; TxtDlgParm.pszSampleText = m_szSampleText; TxtDlgParm.nMaxCount = sizeof(m_szSampleText); TxtDlgParm.crText = RGB ( 0,0,255 ) ; TxtDlgParm.crHilite = RGB ( 255,255,255 ) ; TxtDlgParm.crShadow = RGB ( 128,128,128 ) ; TxtDlgParm.uStyle = 0 ; TxtDlgParm.uAlign = EFX_TEXT_HCENTER | EFX_TEXT_VCENTER ; TxtDlgParm.bWordWrap = FALSE ; TxtDlgParm.nAngle = 450 ; TxtDlgParm.hFont = m_hFont; TxtDlgParm.nXDepth = 10 ; TxtDlgParm.nYDepth = 10 ; TxtDlgParm.bUseForeImage = TRUE ; TxtDlgParm.uDlgFlags = DLG_TEXT_AUTOPREVIEW | DLG_TEXT_SAMPLETEXT | DLG_TEXT_STYLE | DLG_TEXT_COLOR | DLG_TEXT_BORDERCOLOR | DLG_TEXT_ALIGN | DLG_TEXT_ANGLE | DLG_TEXT_WORDWRAP | DLG_TEXT_FONT | DLG_TEXT_FOREIMAGE | DLG_TEXT_BROWSEIMAGE | DLG_TEXT_SHADOWCOLOR | DLG_TEXT_SHADOW_X_Y ; m_LBitmap.DialogEffect()->SetTextParams(&TxtDlgParm); m_LBitmap.PaintEffect()->SetTextParameters(&TxtDlgParm); } void CSpEfxDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { if (nIDCtl == IDC_BUTTON_IMAGE) { OnShow(); } }