Namen eines Dialogs vergleichen
-
Hallo,
ich möchte in meiner Anwendung prüfen, ob ein bestimmter Dialog active ist.
Kann ich das über seinen Namen (z.B IDD_DIALOG_name) machen?
bisher mache ich folgendes:
das aktuelle Fenster alle 5sek neuzeichnen:
switch(nIDEvent) { case 1: { //aktuelles Fenster aktualisieren (neuzeichnen über OnPaint des jeweiligen Dialogs) //die Uhrzeit wird so z.B. aktualisiert CWnd *owner; //aktives Fenster holen owner=GetActiveWindow(); //owner->h_Wnd: handle auf aktuelles, sichtbares Fenster ::RedrawWindow(owner->m_hWnd,NULL,NULL,RDW_INVALIDATE | RDW_NOERASE); UpdateData(false); } break;
so jetzt passiert es das mein Hauptfenster alle 5s etwas flackert, deshalb möchte ich, dass nur ein bestimmter DIalog (Name) alle 5sek aktualisiert wird.
Wie mache ich das? (Finde in CWnd keine Methode die ir den Namen eines Dialogs liefert! Oder gibt es eine andere möglichkeit???)
ThX
-
Der "Name" eines Fensters ist am ehesten sein HWND-Handle (zumindest wird darüber die Verbindung zwischen dem CWnd-Objekt und dem auf dem Monitor dargestellten Fenster relaisiert). Dieses Handle kannst du als Member "m_hWnd" deines Dialogs abfragen.
Alternativ kannst du dir auch direkt einen Pointer auf das richtige CWnd-Objekt merken und dann dessen RedrawWindow()-Methode aufrufen.PS: Wo in der Applikationsstruktur befindet sich dein Code-Ausschnitt eigentlich?
-
der Funktionsaufruf befindet sich in der OnTimer(UINT nIDEvent) Methode.
nach Ablauf des Timers soll auf dem aktuellen Fenster die Uhrzeit ausgegeben werden.
Mit owner->m_hWnd hab ich doch den Handle des aktuellen Fensters, wie kann ich dann abfragen ob er gleich mit IDD_DIALOG_Name ist???
-
GetWindowText() müsste das sein.
EDIT: Zu spät gesehen, dass mein Beitrag erst nicht verschickt wurde.
-
alles klar,
versuch es gerade über deinen 2ten Vorschlag, und merke mir den Pointer auf den Dialog.Wenn es klappt poste ich die Lösung
thanx!
-
problem:
Wie kann ich denn von einem Dialog auf die Daten des anderen zugreifen
? Ich mach das immer über glob Variablen, aber das ist ja nicht optimal!wenn ich mir in Dailog 1 einen pointer auf dialog 2 mach und über diesen dann Variablen ändere passiert nichts.
Müsste doch aber über die Pointer funktionieren?!?Dialog1:
BOOL CDlgEarPatron::OnInitDialog() { CDialog::OnInitDialog(); CDolmetscherDlg* pDlg=new CDolmetscherDlg;//NULL; pDlg->m_Ep_dlg=this->m_hWnd; . . .
Dialog2:
if(owner->m_hWnd==m_Ep_dlg) //::RedrawWindow(owner->m_hWnd,NULL,NULL,RDW_INVALIDATE | RDW_NOERASE); ::RedrawWindow(m_Ep_dlg,NULL,NULL,RDW_INVALIDATE | RDW_NOERASE);
in Klassendekl von Dialog 2
HWND m_Ep-dlg;