Názorný postup: Přidání animace do projektu aplikace MFC
Uživatelům tento návod jak přidat do jazyka Visual C++, Microsoft Foundation Class knihovny MFC () projektu základní animovaný objekt.
Návod ukazuje, jak lze provádět tyto úkoly:
Vytvořte aplikaci MFC.
Přidat nabídku a poté přidat příkazy ke spuštění a zastavení animace.
Vytvoření obslužné rutiny pro příkazy spustit a zastavit.
Do projektu přidáte animovaný objekt.
Animovaný objekt v okně Centrum.
Ověřte výsledky.
[!POZNÁMKA]
Ve vašem počítači se pro některé z prvků uživatelského rozhraní sady Visual Studio mohou zobrazit jiné názvy a umístění, než jsou uvedeny v následujících pokynech. Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením. Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Požadavky
K dokončení tohoto postupu musíte mít aplikaci Visual Studio.
Vytvoření aplikace MFC
V nabídce Soubor přejděte na příkaz Nový a klikněte na Projekt.
V Nový projekt dialogové okno v levém panelu pod Nainstalované šablony, rozbalte položku Visual C++ a vyberte MFC.V prostředním podokně vyberte Aplikace MFC.V název zadejte MFCAnimationWalkthrough.Klikněte na tlačítko OK.
V Průvodce aplikace MFC dialogovém okně pole, zkontrolujte, zda Typ aplikace je Více dokumentů, Projektu styl je Visual Studioa Architektura/zobrazení dokumentu podporu možnost.Klepněte na tlačítko Dokončit.
Přidat nabídku a poté přidat příkazy ke spuštění a zastavení animace
Na zobrazení nabídce přejděte na Jiné Windows a klepněte na tlačítko Zobrazení zdrojů.
V Zobrazení zdrojů, přejděte nabídky složky a otevřete jej.Poklepejte IDR_MFCAnimationWalTYPE prostředku otevřete pro úpravy.
Na panelu nabídek v Zde typ zadejte A & nimation k vytvoření animace nabídky.
Pod animacev Zde typ zadejte Start & dopředu vytvořit příkaz Start vpřed.
Pod Start dopředuv Zde typ zadejte Start & Zpět.
Pod Start zpětněv Zde typ zadejte S & horní vytvořit příkaz Stop.
MFCAnimationWalkthrough.rc ji uložit a zavřít.
V Aplikaci Solution Explorer, poklepejte na MainFrm.cpp otevřete pro úpravy.V CMainFrame::OnCreate metodou, vyhledejte oddíl, který má několik volání na lstBasicCommands.AddTail.Následující kód přidejte pouze po této části.
lstBasicCommands.AddTail(ID_ANIMATION_STARTFORWARD); lstBasicCommands.AddTail(ID_ANIMATION_STARTBACKWARD); lstBasicCommands.AddTail(ID_ANIMATION_STOP);
Soubor uložte a zavřete.
Vytvoření obslužné rutiny pro zahájení a ukončení příkazů
Na projektu nabídky, klepněte na tlačítko Třídy Průvodce.
V Průvodce třídy MFCpod název třídy, vyberte CMFCAnimationWalkthroughView.
Na Příkazy v kartě ID objektů vyberte položku ID_ANIMATION_STARTFORWARDa poté v zprávy vyberte položku COMMAND.Klepněte na tlačítko Přidat ukazatel.
V Přidat členské funkce dialogové okno, klepněte na tlačítko OK.
V ID objektů vyberte položku ID_ANIMATION_STARTBACKWARDa pak zprávy vyberte položku COMMAND.Klepněte na tlačítko Přidat ukazatel.
V Přidat členské funkce dialogové okno, klepněte na tlačítko OK.
V ID objektů vyberte položku ID_ANIMATION_STOPa pak zprávy vyberte položku COMMAND.Klepněte na tlačítko Přidat popisovač a klepněte na tlačítko OK.
V Přidat členské funkce dialogové okno, klepněte na tlačítko OK.
V Průvodce třídy MFC, klepněte na tlačítko OK.
Uložit MFCAnimationWalkthroughView.cpp, což je otevřít v editoru, ale nelze ho zavřít.
Animovaný objekt přidat do projektu
V aplikaci Solution Explorer poklepejte na MFCAnimationWalkthroughView.h otevřete pro úpravy.Těsně před definice CMFCAnimationWalkthroughView třídy, přidejte následující kód, vytvoření vlastní animace řadič, který bude zpracovávat konflikty plánování animaci objektu.
class CCustomAnimationController : public CAnimationController { public: CCustomAnimationController() { } virtual BOOL OnHasPriorityTrim(CAnimationGroup* pGroupScheduled, CAnimationGroup* pGroupNew, UI_ANIMATION_PRIORITY_EFFECT priorityEffect) { return TRUE; } };
Na konci CMFCAnimationWalkthroughView třídy, přidejte následující kód.
CCustomAnimationController m_animationController; CAnimationColor m_animationColor; CAnimationRect m_animationRect;
Po DECLARE_MESSAGE_MAP() řádek, přidejte následující kód.
void Animate(BOOL bDirection);
Soubor uložte a zavřete.
V MFCAnimationWalkthroughView.cpp na začátku souboru po #include příkazy ale před libovolné třídy, metody, přidejte následující kód.
static int nAnimationGroup = 0; static int nInfoAreaHeight = 40;
Na konci konstruktor pro CMFCAnimationWalkthroughView, přidejte následující kód.
m_animationController.EnableAnimationTimerEventHandler(); m_animationController.EnablePriorityComparisonHandler(UI_ANIMATION_PHT_TRIM); m_animationColor = RGB(255, 255, 255); m_animationRect = CRect(0, 0, 0, 0); m_animationColor.SetID(-1, nAnimationGroup); m_animationRect.SetID(-1, nAnimationGroup); m_animationController.AddAnimationObject(&m_animationColor); m_animationController.AddAnimationObject(&m_animationRect);
Vyhledejte CAnimationWalthroughView::PreCreateWindow metoda a nahradit ji následující kód.
BOOL CMFCAnimationWalkthroughView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs m_animationController.SetRelatedWnd(this); return CView::PreCreateWindow(cs); }
Vyhledejte CAnimationWalkthroughView::OnDraw metoda a nahradit ji následující kód.
void CMFCAnimationWalkthroughView::OnDraw(CDC* pDC) { CMFCAnimationWalkthroughDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here CMemDC dcMem(*pDC, this); CDC& dc = dcMem.GetDC(); CRect rect; GetClientRect(rect); dc.FillSolidRect(rect, GetSysColor(COLOR_WINDOW)); CString strRGB; strRGB.Format(_T("Fill Color is: %d; %d; %d"), GetRValue(m_animationColor), GetGValue(m_animationColor), GetBValue(m_animationColor)); dc.DrawText(strRGB, rect, DT_CENTER); rect.top += nInfoAreaHeight; CBrush br; br.CreateSolidBrush(m_animationColor); CBrush* pBrushOld = dc.SelectObject(&br); dc.Rectangle((CRect)m_animationRect); dc.SelectObject(pBrushOld); }
Na konec souboru přidejte následující kód.
void CMFCAnimationWalkthroughView::Animate(BOOL bDirection) { static UI_ANIMATION_SECONDS duration = 3; static DOUBLE dblSpeed = 35.; static BYTE nStartColor = 50; static BYTE nEndColor = 255; BYTE nRedColorFinal = bDirection ? nStartColor : nEndColor; BYTE nGreenColorFinal = bDirection ? nStartColor : nEndColor; BYTE nBlueColorFinal = bDirection ? nStartColor : nEndColor; CLinearTransition* pRedTransition = new CLinearTransition(duration, (DOUBLE)nRedColorFinal); CSmoothStopTransition* pGreenTransition = new CSmoothStopTransition(duration, (DOUBLE)nGreenColorFinal); CLinearTransitionFromSpeed* pBlueTransition = new CLinearTransitionFromSpeed(dblSpeed, (DOUBLE)nBlueColorFinal); m_animationColor.AddTransition(pRedTransition, pGreenTransition, pBlueTransition); CRect rectClient; GetClientRect(rectClient); rectClient.top += nInfoAreaHeight; int nLeftFinal = bDirection ? rectClient.left : rectClient.CenterPoint().x; int nTopFinal = bDirection ? rectClient.top : rectClient.CenterPoint().y; int nRightFinal = bDirection ? rectClient.right : rectClient.CenterPoint().x; int nBottomFinal = bDirection ? rectClient.bottom : rectClient.CenterPoint().y; CLinearTransition* pLeftTransition = new CLinearTransition(duration, nLeftFinal); CLinearTransition* pTopTransition = new CLinearTransition(duration, nTopFinal); CLinearTransition* pRightTransition = new CLinearTransition(duration, nRightFinal); CLinearTransition* pBottomTransition = new CLinearTransition(duration, nBottomFinal); m_animationRect.AddTransition(pLeftTransition, pTopTransition, pRightTransition, pBottomTransition); CBaseKeyFrame* pKeyframeStart = CAnimationController::GetKeyframeStoryboardStart(); CKeyFrame* pKeyFrameEnd = m_animationController.CreateKeyframe(nAnimationGroup, pBlueTransition); pLeftTransition->SetKeyframes(pKeyframeStart, pKeyFrameEnd); pTopTransition->SetKeyframes(pKeyframeStart, pKeyFrameEnd); pRightTransition->SetKeyframes(pKeyframeStart, pKeyFrameEnd); pBottomTransition->SetKeyframes(pKeyframeStart, pKeyFrameEnd); m_animationController.AnimateGroup(nAnimationGroup); }
Na projektu nabídky, klepněte na tlačítko Třídy Průvodce.
V Průvodce třídy MFCpod název třídy, vyberte CMFCAnimationWalkthroughView.
Na zprávy karta v zprávy vyberte položku WM_ERASEBKGND, klepněte na Přidat popisovača klepněte na tlačítko OK.
Nahraďte provádění v MFCAnimationWalkthroughView.cpp, OnEraseBkgnd s následujícím kódem snížit blikání animovaného objektu, když se překreslí.
BOOL CMFCAnimationWalkthroughView::OnEraseBkgnd(CDC* /*pDC*/) { return TRUE; }
Implementacích nahradit CMFCAnimationWalkthroughView::OnAnimationStartforward, CMFCAnimationWalkthroughView::OnAnimationStartbackward, a CMFCAnimationWalkthroughView::OnAnimationStop s následujícím kódem.
void CMFCAnimationWalkthroughView::OnAnimationStartforward() { Animate(TRUE); } void CMFCAnimationWalkthroughView::OnAnimationStartbackward() { Animate(FALSE); } void CMFCAnimationWalkthroughView::OnAnimationStop() { IUIAnimationManager* pManager = m_animationController.GetUIAnimationManager(); if (pManager != NULL) { pManager->AbandonAllStoryboards(); } }
Soubor uložte a zavřete.
Na střed animovaný objekt v okně
V Aplikaci Solution Explorer, poklepejte na MFCAnimationWalkthroughView.h otevřete pro úpravy.Na konci CMFCAnimationWalkthroughView třídy právě po vymezení m_animationRect, přidejte následující kód.
BOOL m_bCurrentDirection;
Soubor uložte a zavřete.
Na projektu nabídky, klepněte na tlačítko Třídy Průvodce.
V Průvodce třídy MFCpod název třídy, vyberte CMFCAnimationWalkthroughView.
Na zprávy karta v zprávy vyberte položku WM_SIZE, klepněte na Přidat popisovača klepněte na tlačítko OK.
Nahraďte kód v MFCAnimationWalkthroughView.cpp, CMFCAnimationWalkthroughView::OnSize s následujícím kódem.
void CMFCAnimationWalkthroughView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); CRect rect; GetClientRect(rect); rect.top += nInfoAreaHeight; CRect rectAnim = m_animationRect; m_animationRect = CRect(CPoint(rect.CenterPoint().x - rectAnim.Width() / 2, rect.CenterPoint().y - rectAnim.Height() / 2), rectAnim.Size()); if (m_animationController.IsAnimationInProgress()) { Animate(m_bCurrentDirection); } }
Na začátku konstruktor pro CMFCAnimationWalkthroughView, přidejte následující kód.
m_bCurrentDirection = TRUE;
Na začátku CMFCAnimationWalkthroughView::Animate metodou, přidejte následující kód.
m_bCurrentDirection = bDirection;
Soubor uložte a zavřete.
Ověření výsledků
- Sestavte a spusťte aplikaci.Na animace nabídky, klepněte na tlačítko Start dopředu.Obdélník by se zobrazují a poté vyplňte střed oblasti.Po klepnutí na tlačítko Start zpětně, měla obrátit animace a když klepnete na Stop, měli zastavit.Barva výplně obdélníku by změnit v průběhu animace a aktuální barva by měl být zobrazen v horní části okna animace.