WinApi child Sync.probleme

dark80

Grünschnabel
Hallo leute..

ich hoffe dass mir jemand hier helfen kann...
ich habe schon programmier erfahrung in c/c++ … und mit der winapi habe ich mich auch schon herum geschlagen... übrigens das buch vom charles petzold finde ich echt super...
bei meinem speziellen problem konnte es mir aber bis jetzt nicht helfen...
so nun zum besagten problem.
ich habe ein standart fenster in welchen ich dann mein dialog lade...
die kommunikation zwischen den messageboxen und buttons.. funktioniert auch eigentlich..
das problem ist jetzt… nach den drücken eines ( z.b. start buttons) sollte das prgramm die editboxen auslesen und dann in eine liste speichern... und dann gleich mit TextOut() auf den child ausgeben. die ausgabe finden statt aber sie wird erst dann sichtbar wenn man das fenster entweder minimiert –maximiert oder mit eine anderen darüber fährt.. erst dann wird der text sichtbar...:confused:

grüße
dark80
 
Du kannst die Ansicht des Fensters nach dem Schreiben mit TextOut() mit UpdateWindow() oder InvalidateRect() aktualisieren.

Gruß
MCoder
 
Mit denn Funktionen UpdateWindow() und InvalidateRect() habe ich auch schon veruscht... es funktionier aber immer noch nicht..

auszug aus meinem code.

CALLBACK DlgProc(..) {
HDC hdc;
PAINTSTRUCT ps;
switch(message) {
case WM_PAINT:
hdc = BeginPaint(chwnd, &ps);
show_text() // for(...) { TextOut(..) }
EndPaint(chwnd, &ps);
UpdateWindow(chwnd);
return 0;
case WM_COMMAND:
switch( LOWORD( wParam )) {
case IDC_BUTTON_START:
// editboxen auslesen....
return 1;
case...
}
...
}
 
Sorry, das hatte ich vorhin falsch formuliert. UpdateWindow() gehört zu der Aktion, bei der die Veränderung ausgelöst wird, d.h. beim Betätigen des Buttons, also im WM_COMMAND-Zweig. Damit wird eine WM_PAINT-Message generiert und das Fenster neu gezeichnet. Bei WM_PAINT solltest du UpdateWindow() wieder rausnehmen. Das ist an der Stelle kontraproduktiv.

Gruß
MCoder
 
Ich sitze daran schon seit einige std und versuche alles damit es gleich angezeigt wird.
Es scheint egal zu sein wo ich die UpdateWindow() rein setze..
es geht einfach nicht. Das Fenster aktualisiert sich erst dann ( erst dann wird der TEXT() angezeigt ) wenn es aus dem Bildschirm bereich verschwindet und ed dann hergeholt wird.
*am verzweifel*

Vielleicht habe ich ein groben fehler in der logik.. sehe es aber bis jetzt nicht...
in der test.txt habe ich mein code...
Anhang anzeigen 25507attachment.c

*hilfe*
 
Du hast die show_text()-Methode sowohl im Haupt- als auch im Childfenster bei WM_PAINT hinzugefügt. Soll in beiden was angezeigt werden? Zumindest sollte dann noch ein UpdateWindows() mit dem Handle des Hauptfensters aufgerufen werden.
Das Child-Fenster sollte aber eigentlich richtig funktionieren. Wenn nicht, solltest du mal testen, ob nach dem Buttonklick auch die WM_PAINT-Message aufgrerufen wird (Debugger).

Gruß
MCoder
 
Du hattest recht Mcoder, die WM_PAINT vom child wurde nicht aufgerufen.
Auch nachdem UpdateWindow( child_hwnd ) aufgerufen wurde.
Ich habe es jetzt aber doch noch hinbekommen. Die Rettung war die
InvalidateRect( child_hwnd, 0, TRUE ) funktion.
Jetzt läuft alle so wie ich es wollte.
Danke dir MCoder.

Grüße Dark80
 
Zurück