DirectDraw7 in MFC initialisieren



  • Hi ihr Nachtprogger 😉

    ..habe schon ein ein paar Sachen mit DirectDraw7 geproggt,
    allerdings nur im Fullscreenmodus. Nun möchte ich einen Spiele-Editor
    schreiben, und habe mich entschieden auf MFC umzusteigen. Das kann ja nicht so schwer sein, DACHTE ich, da ich ja vorher auch supi mit DirectDraw7 klargekommen bin! Aber ich bekomme nichtmal nen einfaches Fenster hin,
    auf dem ein Bitmap geblittet wird. Habe schon etliche Tutorials durch, komme aber nicht weiter! Das eigentliche Problem ist nicht directdraw, sonder das erstellen eines Game-Loops in MFC. Habe DirectDraw successfully initialisiert,
    aber nun muss ich irgendwie ne Heartbeat Funktion haben.

    Habe nach eingen Tutorials folgende Lösung:

    Initialisierung - Das funktioniert einwandfrei

    BOOL CEditorApp::InitInstance()
    {
    	AfxEnableControlContainer();
    
    	// *** MEINE INTIALISIERUNG ***
    
    	initDDraw(AfxGetMainWnd()->GetSafeHwnd());
    }
    

    Nun die Hearbeatfunktion. Habe von CWinApp die OnIdle funktion überladen und in dieser meine Heartbeatfunktion aufgerufen!

    class CEditorApp : public CWinApp
    {
    public:
    	CEditorApp();
    
    // Überladungen
    	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    	//{{AFX_VIRTUAL(CEditorApp)
    	public:
    	virtual BOOL InitInstance();
    	virtual BOOL OnIdle(LONG lCount);
    	//}}AFX_VIRTUAL
    
    // Implementierung
    
    	//{{AFX_MSG(CEditorApp)
    		// HINWEIS - An dieser Stelle werden Member-Funktionen vom Klassen-Assistenten eingefügt und entfernt.
    		//    Innerhalb dieser generierten Quelltextabschnitte NICHTS VERÄNDERN!
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    BOOL CEditorApp::OnIdle(LONG lCount)
    {
             CWinApp::OnIdle(lCount);
    
    	heartBeat();
    
    	return TRUE;
    }
    

    Aber die OnIdle Funktion wird garnicht aufgerufen! Weiss jemand wie es richtig geht, oder hat jemand schon Erfahrung mit Spielen in MFC und kann mir eine Alternative/Beispiel posten ? Das wäre echt MASTA-HILFREICH!

    Vielen Dank im voraus 🙂



  • Du schreibst einen _Editor_, warum also eine _Game_-Loop?

    Bye, TGGC \-/


  • Mod

    wenn du eine einfach lösung suchst, versuch

    UINT_PTR SetTimer(
       UINT_PTR nIDEvent,
       UINT nElapse,
       void (CALLBACK* lpfnTimer
    )
    

    mit SetTimer(1001,100/*millisekunden*/,0);

    dann bekommst du in dem angegebenem intervallen ein WM_TIMER ovent (in mfc wäred as OnTimer) in dem du den heartbeat aufrufen kannst.

    rapso->greets();



  • Danke Raspo..endlich mal ne informative Antwort! Durch Leute wie dich bleiben die Foren am Leben...da leider 90% immer irgendeinen Schmand mitposten muessen, um ihre Profilierungsneurose ausleben zu können! Vielen Dank dafür!

    ..Und für dich TGGC nenne ich das ganze dann "EDITOR-LOOP"! Mir ist es durchaus
    bewusst gewesen, dass hier die Definition "Game-Loop" unangebracht ist, doch ich wusste nicht, das man es hier mit so spitzfindigen Personen wie mit dir zu tun hat!

    MFG

    Finalbrain


Anmelden zum Antworten