Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.10.2009, 16:31

Validate und Invalidate (leicht)

Mein Programm funktioniert bis auf ein sehr Interessantes Detail.

Viele haben sich sicher schon in manchen WIN32 gefragt:
Kann man das häßliche mitverschieben des Fensterinhaltes beim Fensterziehen verhindern ?
JA, ich verwende ein SetBackgroundBlack mit FLAG_avoidflicker.

Doch damit funktioniert das Present() in OnRender manchmal nicht mehr.

Es liegt garantiert an den Kontrollanweisungen Validate() und Invalidate().

Aber wie funktionieren diese, wo sollten sie stehen, oder besser wie Löse ich das Problem ?


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//  ONTIMER

void CoreApp::OnTimer()
{   
    //  Was genau fehlt ?

}

//  ONRESIZE

void CoreApp::OnResize()
{   
    window_IsResized= TRUE;
    if ( FLAG_avoidflicker )
    {   
        Rendertarget[0]->BeginDraw();
        Rendertarget[0]->Clear(D2D1::ColorF(D2D1::ColorF::Black));
        Rendertarget[0]->EndDraw(); 
        SwapChain->Present(1, 0 );
    }
    DiscardDeviceResources();
}

//  MESSAGE THREAD

        switch(message)
        {   
            case WM_SIZE:
                {   
                    pCoreApp->OnResize();
                    //  Was genau fehlt ?

                }
                
            case WM_PAINT:
                {
                    pCoreApp->OnRender();
                    //  Was genau fehlt ?

                }
    
            case WM_TIMER:
                {
                    pCoreApp->OnTimer( pCoreApp );
                }
        }




( P.S.: Da die msdn-Doku in engl. ist und ich selbst Parameter für Parameter schon ausgewechselt habe. )

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

03.10.2009, 16:49

Déja vue?
http://www.c-plusplus.de/forum/viewtopic-var-t-is-251346.html

Das hat weder hier noch im anderen Forum direkt etwas mit C++ zu tun. Ist es so schwer das in das entsprechende Forum zu posten? In beiden Foren gibt es spezielle Foren für Win Anwendunge..

Hier:
https://www.spieleprogrammierer.de/phpBB2/viewforum.php?f=19

dort:
http://www.c-plusplus.de/forum/viewforum-var-f-is-4.html

Zum Problem:
Ich bin mir nicht ganz sicher, was du meinst..
Du könntest ja während dem verschieben das zeichnen verhindern.. Oder was meinst du genau?

3

03.10.2009, 17:11

Sorry, my fault. Ich dachte hier wäre ich richtig.

Das zeichnen zu verhindern klappt auch sehr gut und ist in Ordnung. Vielen Dank !

Ich bin von allerkleinsten Zeitbruchteilen besessen, und hätte gerne das Löschen genau zum Resize-Zeitpunkt gehabt. Ginge DAS eventuell auch ?

Werbeanzeige