MFC Oberfläche wird plötzlich weiß (statt urspr. grau)
-
Hallo zusammen,
beim Ausführen meines Programms flackert gelegentlich der Bildschirm kurz und die Oberfläche ist plötzlich weiß statt vorher grau. Unten jeweils ein Screenshot von "vorher" und "nachher". Der graue Hintergrund ist wie es sein sollte und normalerweise auch ist. Der weiße dagegen stellt das Problem dar.
Es passiert, wie gesagt, eher selten, aber es passiert regelmäßig (allerdings ohne dass es einen auffälligen Auslöser dafür gäbe). Die Buttons/Edits bleiben mit grauem Hintergrund. Bei erneutem Paint, z.B. durch minimieren/maximieren ist das Problem behoben. Ich habe es außerdem schon auf zwei verschiedenen Rechnern beobachtet.
Screenshots:
http://home.arcor.de/m1sta/cplusplus/weiss.JPG
http://home.arcor.de/m1sta/cplusplus/grau.JPGHat jemand so etwas schon mal gesehen oder weiß gar wodran es liegt? ich bin ratlos
Gruß,
Sed
-
Verwendest du in diesem Programm irgendwo die GDI zum Zeichnen?
Du sagst es passiert regelmäßig. Was wird ausgeführt, bevor sich die Hintergrundfarbe ändert?
-
OnCtlColor Handler eingebaut, der nicht funktioniert?
-
Irgendwo verwende ich die GDI, ja, aber in einem Unterfenster, das nicht aufgerufen wird. Beziehungsweise das Phänomen ist unabhängig davon, ob das Unterfenster geöffnet wird oder nicht. Ansonsten verwende ich noch DirectX, aber das hat in anderen Programmen noch nie so etwas verursacht.
Das gleiche gilt für OnCtlColor. In einem Unterfenster, das nicht nicht unbedingt aufgerufen wird, hab ich OnCtlColor drin.Ich habe keine Ahnung, was ausgeführt wird bevor es passiert. Wie finde ich das heraus? Da es nur gelegentlich auftritt und nicht wirklich reproduzierbar ist, kann ichs ja nicht im Debugger laufen lassen. Es passiert auf jeden Fall unabhängig von irgendwelchen Userinteraktionen. Ich muss nicht mal am PC sein.
-
Ich glaube mittlerweile, dass es mit meinen Custom TabCtrl Klassen zusammenhängt.
Hier noch einmal ein Screenshot des gesamten Fensters:
http://home.arcor.de/m1sta/cplusplus/Hintergrundphaenomen2.JPGIch habe zwei in einander geschachtelte Custom CTabCtrl Objekte, welche eben diese Farbänderung erfahren, wie man auch auf dem Screenshot nochmal sieht (der Hintergrund ist normalerweise grau wie der Rest des Programms).
Der Rest des Fensters (der linke Streifen) bleibt grau und wird nicht weiß.Nur bringt mich das auch nicht viel weiter, da ich nicht weiß, nach was ich suchen soll.
Ich kann mir gut vorstellen, dass ich bei der Architektur oder der Implementierung etwas falsch gemacht habe, da ich jedem einzelnen Fenster und TabCtrl Objekt eine pixelgenaue Größe geben muss, damit es anständig aussieht.
Die einzelnen Klassen stehen in folgender Hierarchie (keine Vererbung) zu einander:
CDialogMain (Hauptfenster)
--- CCustomTabCtrl1 (unteres TabCtrl: Tab1 - 6)
------- CTab1
---------- CTabPage1------- CTab2 (Dialogklasse, die das CCustomTabCtrl2 Objekt enthält)
---------- CCustomTabCtrl2 (oberes TabCtrl: EL,BZ..)
------------- CTabPage2 (Dialogklasse,Inhalt der Seite: OK/Abbrechen)------- CTab3
---------- CCustomTabCtrl2 (oberes TabCtrl)
------------- CTabPage3------- CTab4
---------- CCustomTabCtrl2 (oberes TabCtrl)
------------- CTabPage4------- CTab5
---------- CCustomTabCtrl2 (oberes TabCtrl)
------------- CTabPage5------- CTab6
---------- CCustomTabCtrl2 (oberes TabCtrl)
------------- CTabPage6Noch irgendwelche Ideen?