Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CallBack Verständnisfrage

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 26.04.2010, 10:11    Titel: CallBack Verständnisfrage Antworten mit Zitat

Hi zusammen, heut hab ich mal ne Frage die rein dem Verständnis dient. Weil, ich vesteh es nämlich nicht zwinkern

Folgende Situation. Ein Fenster mit einem TreeView und einem Static Control. Bei beiden Elementen manipuliere ich den Hintergrund, werte also die WM_PAINT und WM_ERASEBKGND aus.

Zunächst erstmal: Es funktioniert alles und es flimmert auch nix.

Aber: Um dies zu erreichen musste ich ganz schön rumspielen und ausprobieren weil das ganze (für mein Verständnis) nicht so abläuft wie es das sollte. Hier mal der Pseudo Code:

Code:

'Fenster und Controls erstellen

'Callbacks setzen
      Old_Proc_TreeView = SetWindowLong( hTrV, GWL_WNDPROC, @CallBack_Proc_TreeView() )
      Old_Proc_StatusImg = SetWindowLong( hImg, GWL_WNDPROC, @CallBack_Proc_StatusImage() )

'*************************************************************
'CallBack Funktion Static Control:
   Select Case uMsg
      Case WM_ERASEBKGND
        Return 1
      Case WM_PAINT
      'zeichnen des Hintergrundes
        
      Return DefWindowProc( hWnd, uMsg, wParam, lParam )
            
   End Select

   Return CallWindowProc( Old_Proc_StatusImg, hWnd, uMsg, wParam, lParam )

'*************************************************************
'CallBack Funktion TreeView:
 
   result = CallWindowProc( Old_Proc_TreeView, hWnd, uMsg, wParam, lParam )

    Select Case uMsg
        Case WM_ERASEBKGND
         Return 1

        'TreeView darstellen   
        Case WM_PAINT
        'Hintergrund zeichnen

     End Select

  Return result


Ok, Hauptsächlich geht es mir darum wann und wie ich die WindowProc aufrufe, also ob per CallWindowProc oder DefWindowProc.

Klar ist: Ich muß diese Funktionen ausführen um die Messages abhandeln zu lassen. Aber Flimmerfrei funktioniert es nur in obiger Konstellation. Also der zeitpunkt und die Art des Aufrufs - und das will mir nicht in den Kopf.

Kann das jemand erklären?
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 26.04.2010, 15:46    Titel: Antworten mit Zitat

Ich verstehe jetzt nicht wirklich wo dein Verständnisproblem liegt...!?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 26.04.2010, 16:06    Titel: Antworten mit Zitat

OK, ich versuch's nochmal zu erklären.

Ich muß bei einer CallBack Funktion die Messages für die originale Message Routine bearbeiten. Dies kann ich entweder über DefWindowProc oder über CallWindowProc machen. Das ist soweit klar.

Allerdings ist die Frage zu welchem Zeitpunkt ich dies mache.

Im TreeView CallBack benutze ich CallWindowProc VOR der Ausführung des Select Case Blockes und dem Erkennen der WM_PAINT Message. habe ich diese Message bearbeitet, kehre ich mit dem Result zurück.

Im CallBack des Static Elements kommt erst der Select Case Block, mit Auswertung der WM_PAINT NAchricht, dann kehre ich zurück, allerdings mit DefWindowProc.

Führe ich hier DefWindowProc, wie im TreeView, vorher aus, oder benutze stattdessen CallWindowProc, flackert alles wie wild und Mausklicks werden nicht mehr erkannt.

Im Umkehrschluß, wenn ich im CallBack des TreeView versuche die Aufrufe so zu gestalten wie beim Static, wird dort der Hintergrund nicht neu gezeichnet, so als ginge die WM_PAINT völlig verloren. Maus Klicks werden zwar erfasst, aber ich sehe ja nicht wohin ich klicke.

Das ist es was mich verwirrt.
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 26.04.2010, 17:32    Titel: Antworten mit Zitat

Hm das werden dann wohl spezifische Eigenheiten der jeweiligen Controls sein. Ich könnte mir auch vorstellen, dass u.U. einige interne Strukturen nicht richtig übernommen werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz