Dialog wird unsichtbar, ist aber noch da!

DonCube

Mitglied
Hey ho,
Ich habe mehrere Reiter fest in meine View integriert. Ähnlich wie in Excel.
In den Reitern sind Dialoge eingebaut. Ohne Rahmen ohne alles. Nun habe ich zwei Probleme.

1. Wenn ich auf meinen Button übernehmen klicke, wird natürlich der eigens definierte Messagehandler für OnBnClicked aufgerufen. Soweit so gut, das macht er auch alles brav. Allerdings verschwindet der Dialog. Bzw er wird unsichbar und in den Vordergrund tritt die graue Fläche des Reiters.

Wenn ich nur auf irgendwelche Elemente im Dialgog klicke, werden sie wieder sichbar. :eek: Boooaa Zauberei....Hmm ok mag sein, aber ich hoffe nicht, denn mich nervt es das sie immer einfach verschwinden.

Nur um dann wieder aufzutauchen wenn ich z.B das Fenster maximiere, kurz den Tab wechsle und zurückkehre oder ähnliches mache. Dann sind sie wieder da, schön mit allen Daten, denn zerstört werden sie nicht.




2. Wenn ich gaaaanz viele Tabs mache, so dass ich scrollen muss. Dann erscheinen oben rechts die Scrollpfeile. Scrollen kann ich auch. Nur leider verschiebt sich dann auch der Inhalt der Tabs (meine Dialoge). Das geht soweit, dass man ihn gar nicht mehr sieht.


Vielleicht habt ihr ja ne Idee. Wäre sehr lieb.

Grüße an alle.
 
Hallo,

vieleicht könnte das dir helfen:

void CPropSheetFormView::OnSize(UINT nType, int cx, int cy)
{
....
CPropertyPage* pPage = m_pPropSheet->GetActivePage();
m_pPropSheet->SetActivePage(pPage);//Die Pages werden neu geeichnet
....
}

danach waren alle Steuerelemente des Dialogs sichtbar

pDlg->Invalidate();
pDlg->UpdateWindow();

Gruß titanic
 
Zuletzt bearbeitet:
Hey ho Titanic,
vielen Dank für Deine schnelle Antwort. Leider war ich am Freitag schon verreist und bin erst heute wiedergekommen. Habe deine Lösung sofort ausprobiert.

Hat antandslos geklappt. Vielen Danke nochmal. Scheinbar ist es wichtig ein Invalidate();
vor dem UpdateWindow(); auszuführen. Das war mir noch nicht bekannt.

Ist es richtig das dort ein Erase ausgeführt wird Habe sowas ähnliches bei Debuggen gesehen.

Wieder was gelernt. :)

Nochmals danke und einen Pluspunkt fürs Renommee.

Gruß
DonCube
 
Hallo,

mit UpdateWindow() zwingst du Windows dazu, das Fenster sofort auf den neuesten Stand zu bringen. Wenn aber keine Fensterregion für ungültig erklärt wurde, wird auch nichts neu gezeichnet.
Mit Invalidate() erklärst du den gesamten Client-Bereich für ungültig. Allerdings hat diese Nachricht nur eine geringe Priorität, sodass einige Zeit vergehen kann, bis die ausgeführt wird. Deshalb -> siehe oben.
Und wenn du Invalidate() ohne Parameter nutzt, wird automatisch als Parameter TRUE genutzt und die Funktion OnEraseBkgnd() ausgeführt. Willst du das nicht, mußt du Invalidate(FALSE) benutzen.

Mfg

langer
 

Neue Beiträge

Zurück