 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 26.03.2009, 21:48 Titel: [gelöst] 2. Fenster zerstört Inhalt des 1. Fensters ??? |
|
|
siehe Bild...
Das 2. kleinere Fenster, zerstört beim Bewegen (mit der Maus) den Hintergrund des 1. Fensters. Wenn ich es loslasse wird dieser wieder hergestellt.
Fehler mir da ein Parameter oder sowas? _________________ Man kann sich öfter als zweimal im Leben halb tot lachen.
Zuletzt bearbeitet von E-P-S am 27.03.2009, 12:34, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 26.03.2009, 22:37 Titel: |
|
|
Das is ganz normal, Windows fängt erst an WM_PAINT Nachrichten durch die Gegend zu schicken, wenn du die Maus loslässt.
Lässt sich glaube ich aber auch in den Perfomanceeinstellungen verändern... |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 26.03.2009, 22:44 Titel: |
|
|
Naja, so normal find ich das nicht
Sagen wir's mal so...wenn ich das in PureBasic programmiere, passiert das nicht - also sollte es machbar sein das zu umgehen/beheben - anders zu machen etc. - nur wie? _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.03.2009, 23:45 Titel: |
|
|
Wird das Bild denn im hinteren Fenster neu gerendet? Kann sein, dass PB den Fensterinhalt immer wieder neu rendert. In Visual Basic entspräche das ungefähr der Boolschen Variable "AutoRedraw". _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 27.03.2009, 00:32 Titel: |
|
|
Nee, ist etwas komplizierter.
Das Bild bzw. Fenster im Hintergrund ist Blitz3D. Ich möchte einen WinAPI Aufsatz dafür schreiben, also Funktionen die es mir gestatten Fenster, Buttons etc. im B3D Fenster zu erstellen und natürlich auch extra zu erstellen.
Begonnen hatte ich in PB, nur gäbe es da eventuell rechtliche Probleme und zum anderen verwalten die ihre Gadgets recht komisch.
Lange Rede, kurzer Sinn, ich hab in FB nochmal angefangen und bin über dieses Problem gestolpert - auf das ich mir keinen Reim machen kann. Die 3D Anwendung bleibt natürlich stehen wenn ich eines der Fenster bewege, das ist klar, das tat sie in PB auch.
Nur wurde da das Bild beim "Move" eines Fensters nicht zerstört. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 27.03.2009, 11:14 Titel: |
|
|
Ok, ich frag mal noch was anderes, vielleicht ergibt das ja auch des Rätsels Lösung.
Ein PB Programm (WinAPI) sieht ja normalerweise so aus:
Code: | Function WndProc()
Der Event Handler
function = DefWindowProc( hWnd, wMsg, wParam, lParam )
End Function
WinMain()
Einstiegsprozedur, Fenster definieren etc.
'**********
while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE )
TranslateMessage( @wMsg )
DispatchMessage( @wMsg )
wend
'**********
End Function |
Da ich eine DLL habe, werden Fenster etc. natürlich in einer DLL Funktion erstellt die ich von einem anderen Programm aus aufrufe. Um die Events zu verarbeiten, werden diese in einen CallBack umgeleitet:
Code: | Function CallBack()
Select Case
Case WM_Close
etc.
Return DefWindowProc( hWnd, uMsg, wParam, lParam )
End Function |
Dies geschieht auch für die Events des aufrufenden Programms !!! Diese leite ich ebenfalls durch den Callback. Im CallBack selbst werden dann, für die entsprechenden Events bestimmte Variablen gesetzt die ich wiederum mit anderen Funktionen abfragen kann.
Das ganze funktioniert, wie gesagt, einwandfrei - bis auf das verschieben eines Fensters, welches mir den Untergrund des Hauptfensters zerstört.
Meine Frage ist nun folgende. Der markierte Codeausschnitt (Sternchen) exitiert bei mir nicht, denn in meiner DLL gibt es natürlich keine WinMain Prozedur. Es gibt zwar eine Init, die mir auch die Fensterklasse initialisiert etc., aber die Funktionen um Fenster usw. zu erstellen sind natürlich extra.
Die Funktion die mir z.B. ein Fenster erstellt besitzt aber diesen Codeabschnitt nicht, stattdessen gibt sie den Handle auf das Fenster an das rufende Programm zurück.
Ist das denn so überhaupt korrekt - ich meine funktionieren tut es ja und Events etc. bekomme ich auch - aber möglicherweise ist es ja dennoch falsch und verursacht die Zerstörung des Fensterinhalts.[/code] _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 27.03.2009, 12:36 Titel: |
|
|
So, ich antworte mal selbst.
Das Problem lag in der CallBack Routine die generell per
Code: | Return DefWindowProc( hWnd, uMsg, wParam, lParam ) |
Die Behandlung abschloss.
Funktioniert auch, aber nur bei sämtlichen NEU erstellten Fenstern, Statics etc. Die Nachrichten für das BB Fenster müssen per
Code: | Return CallWindowProc( BBProc, hWnd, uMsg, wParam, lParam ) |
behandelt werden - dann klappts auch mit dem Hintergrund.
Ich danke für die Aufmerksamkeit. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
|
|
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.
|
|