Was meinst du, was die WinAPI macht? Und was es für einen relevanten Unterschied macht, ob man es direkt verändern würde, oder über API? Wenn es tatsächlich einen Unterschied gibt- dann hat sie bestimmt einen relevanten Hintergrund- nur eben ne Variable verändern heißt nicht, dass das Nachrichtensystem da direkt drauf greift und es verarbeitet.
Das, was die WinAPI macht, ist in den meisten Fällen absolut notwendig- weil: An den Speicher kommst du nicht "einfach so", weil dieser AFAIK dem Betriebssystem gehört. Zudem kenne ich keine Möglichkeit, da jetzt so heranzukommen. Selbst wenn das möglich wäre- du müsstest vorher noch die anderen Funktionen, die dieser API-Call macht, nachbauen.
Scarabol hat geschrieben:daher meine Idee auf den API Call im Callback des Windows verzichten und auf brutalste Art und Weise direkt den Speicher manipulieren...
Wie es scheint, verstehst du nicht genau, was eine Callback ist, oder ich verstehe nicht was genau du damit meinst.
Die Standardcallback des Systems wird im
immer angesprochen. Sofern man keine "eigene" im Code definiert, werden einfach diverse Nachrichten von PureBasic-System kopiert (aus der Callback, die immer existiert), und über "WindowEvent" und "EventWParam()"/"EvemtLParam()" ausgespuckt. Das heiß, dass eigentlich IMMER eine Callback im Spiel ist.
Jetzt bleibt- so wie ich das verstehe- nur der Unterschied ob du
-> über das Purebasic System auf die Nachrichten zugreifst
-> über eine definierte Callback auf die Nachrichten zugreifst.
Im Endeffekt kommt es aber aufs Selbe hinaus- sofern die Nachrichten vom PB-System unterstützt werden.
Bedeutet also folgerichtig: Ob du nun auf
Code: Alles auswählen
Event.l = WaitWindowEvent()
If Event = #WM_PAINT
;Hier code- uU mit API
EndIf
reagierst, oder auf
Code: Alles auswählen
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
If Message = #WM_PAINT
;Hier Code- uU mit API
EndIf
EndProcedure
reagierst, ist im Endeffekt egal. Nur, dass Callbacks Low-Level sind (lt. PB-Hilfe). Um das Flackern zu reduzieren käme es in Frage, manche Nachrichten unter bestimmten Bedingungen abzufangen, sodass sie nicht von Windows abgefangen werden. So könnte man einen Overhead beim Verarbeiten vermeiden, und sich nur auf die reduzierten Nachrichten konzentrieren (und Windows auch).
Von daher schließen sich API-Calls im Zusammenhang mit Callbacks nicht aus! Wie gesagt: Es wäre total widersinnig (noch möglich) "direkt im Speicher" was zu machen, weil die API schon ihren Zweck hat, und man den nicht 100% von Außen sehen kann (sofern du keine Lust auf Disassemblieren und Auseinandernehmen hast).
Wenn du das Flackern ändern willst, musst du komplett in einer Callback arbeiten, und diese eben dementsprechend anpassen. Ob das dann "überall" ohne Flackern funktioniert ist zwar fraglich (weil wegen Hardware/Treiber-Unterschiede, unter Umständen Windowsversions-Unterschiede im API-Call etc), aber man kann einiges damit optimieren.
Gr33tz
Tafkadasom2k5