Steuerelement automatisch neu zeichnen
-
Ich erstelle in einem Testprogramm mehrere normale Pushbuttons und Editfelder mit CreateWindow. Sobald nun jedoch ein Systemmenü eines dieser Steuerelemente überlappt oder das Fenster minimiert und anschließend wieder maximiert wird werden sämtliche Steuerelemente nicht mehr angezeigt.
Durch ein Klicken auf die dem Steuerelement entsprechende Fläche wird dieses Steuerelement neu gezeichnet.
Ich habe keine Ahnung warum das passiert, hab eigentlich damit noch nie Probleme gehabt.
Habt ihr eine Ahnung warum das passieren kann?
thx im voraus
-
Zeig deinen Code.
-
So sieht mein Code aus in dem ich das Steuerelement erstelle
Button: c = "button"_h = ::CreateWindow(c,title, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, x, y, w, h, hwndparent, (HMENU)id, _controller->getInstance(),0);c = "edit" _h = ::CreateWindow(c,title, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL, x, y, w, h, hwndparent, (HMENU)id, _controller->getInstance(),0);Die Steuerelemente werden ansonsten nirgendwo verändert im Code
Das Anwendungsfenster wird mit folgendem Aufruf erstellt:_h = ::CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, _className, title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, _inst, reinterpret_cast<void*>(controller));Welcher Code wäre denn noch notwendig... ich werde mal probieren das ganze in einem kleinen Beispiel zu reproduzieren da das im Moment auf ziemlich viele Klassen verteilt ist...
edit: Ok, im Moment bin ich ziemlich ratlos, Habe probiert den Fehler in einem kleinen Beispielprogramm mit den oben erwähnten Aufrufen zu erstellen aber es läuft tadellos.
Muss wohl irgendein Seiteneffekt sein... Hat jemand eine Ahnung wie soetwas ensteht?
Wäre dankbar für jeden Gedanken der euch dazu einfällt. Ich will es euch nicht zumuten den ganzen Code zu posten weils eine recht große Klassenbibliothek ist und es einige zeilen sein dürften... leider... werde wohl weiter den Fehler suchen
-
kannst du den ganzen code hochladen ich will den fehler für dich suchen.
-
wenn du willst schicke ich es dir per mail, dann gehts leichter höchstwahrscheinlich...
edit: ich muss dich aber warnen... nicht viel dokumentiert...
-
schade. email hab ich nicht.

-
So etwas kann passieren, wenn du noch ein Steuerelement hast, dass die anderen verdeckt oder du überzeichnest Sie selbst in WM_PAINT oder WM_ERASEBKGND (ich glaub standardmäßig werden Childwindows nicht geclippt).