IDR_MAINFRAME updaten?
-
Hi Leute,
ich habe bisher nur unter Mac OS X programmiert und stehe nun vor einem Problem, das ich noch nie hatte. Wird wohl irgendwas bekanntes unter Windows-Programmierern sein, ich hoffe ihr koennt mir helfen.
Ich versuchs zu erklaeren, sollte aber sehr simple sein:
Aufbau:
- Main Window
+ -> verschiedene CDialogs die man oeffnen kannim Main window (oben in der Tool-Leiste / IDR_MAINFRAME) kann man nun einen Zahlenwert fuer ein bestimmtes Objekt einstellen.
Das Objekt an sich laesst sich mittels eines CDialogs auswaehlen.
Mein Problem ist nun folgendes: Ich habe fuer verschiedene Geraete unterschiedliche Zahlen, und das Fenster sollte immer den Wert des aktuellen Geraetes anzeigen. Die Anzeige aktualisiert sich im Main Window jedoch erst, wenn man mit der Maus in das Eingabe-Feld klickt.
Ich moechte aber dass CDialog dem Hauptfenster mitteilt, dass ein anderes Geraet ausgewaehlt wurde und das Hauptfenster dann den jeweiligen Wert automatisch aktualisiert.
UpdateData(FALSE) macht ja sowas aehnliches, aber nur innerhalb des Dialogs.
Wie sollte ich nun vorgehen um das gesamte Fenster zu aktualisieren?
Ich habe auch folgendes probiert (in der Methode, in der ein anderes Geraet ausgewaehlt wird):
CWnd * pParentWnd = GetParent(); if (pParentWnd) { pParentWnd->Invalidate(FALSE); pParentWnd->UpdateWindow(); }
aber das mag er nicht. Hier ist die Fehlerausgabe:
(...).cpp(150) : error C2440: 'initializing' : cannot convert from 'CMainFrame *' to 'CWnd *' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
-
Nach langer Recherche und Kopfzerbrechen kann ich nun das Problem besser definieren:
Ich habe ein Toolbar (CDialog, IDR_MAINFRAME). Diesen Dialog will ich ueber einen anderen CDialog dazu bringen, dass er die Variablen die er darstellt, nochmal aktualisiert.
Also quasi aus einem CDialog einen anderen CDialog UpdateData() aufrufen. Wie mach ich das?
-
junkpete schrieb:
Also quasi aus einem CDialog einen anderen CDialog UpdateData() aufrufen. Wie mach ich das?
Du definierst eine eigene Nachricht (Stichwort WM_USER) und schickst diese von dem einen Dialog aus ab. Der andere Dialog bekommt eine Nachrichtenbehandlungsroutine für diese Message, in der du dann UpdateWindow() aufrufst. Ich gehe mal davon aus, dass du modale Dialoge hast.