Zeichnen auf aktuellem Fenster!
-
Servus,
ich habe eine Dialogbasierende Anwendung. ich möchte alle 30sek auf dem aktuellen (obersten) Fenster ein Rechteck mit der Uhrtzeit zeichnen.
Ich habe folgendes gemacht:BOOL CDolmetscherDlg::DateTime() { //CPaintDC dc(this); // device context for painting //nur im aktiven Fenster Uhrzeit updaten CWnd* window; window=GetActiveWindow(); CPaintDC dc(window); // device context for painting //Ermittlung der Abmessungen des Displays int y=GetSystemMetrics(SM_CYSCREEN); int x=GetSystemMetrics(SM_CXSCREEN); //Zeichnen des Bereichs für Datum und Zeitanzeige CString time, hour, minute, second; time+="TIME : "; CRect timerect; timerect.SetRect(x/1.5, 0, x, 15); dc.FillSolidRect(timerect, RGB(0,0,64)); GetSystemTime(lpSystemTime); //Format macht aus einstelligen int Werten 2-stellige ->7=07! hour.Format(_T("%.2d"),(int)lpSystemTime->wHour ); time+=hour; time+=":"; minute.Format(_T("%.2d"),(int)lpSystemTime->wMinute ); time+=minute; time+=":"; second.Format(_T("%.2d"),(int)lpSystemTime->wSecond ); time+=second; dc.SetTextColor(RGB(255,255,255)); //dc.DrawText(time, time.GetLength(), timerect,DT_INTERNAL); dc.ExtTextOut(x/2,0, ETO_OPAQUE, timerect, time, time.GetLength(),NULL); //Datumsanzeige CRect daterect; daterect.SetRect(0,0,x/2,15); dc.FillSolidRect(daterect, RGB(0,0,64)); CString date, day, month, year; date+=" Date : "; //Wochentag ->über Switchanweisung, da wDayofWeek Werte von 0=Sunday bis 6=Saturday //date+=lpSystemTime->wDayOfWeek; day.Format(_T("%.2d"),(int)lpSystemTime->wDay); date+=day; date+="/"; month.Format(_T("%.2d"),(int)lpSystemTime->wMonth); date+=month; date+="/"; year.Format(_T("%.2d"),(int)lpSystemTime->wYear); date+=year; dc.DrawText(date, date.GetLength(), daterect,DT_INTERNAL); // CDialog::UpdateWindow(); RedrawWindow(NULL, NULL, RDW_INVALIDATE); return TRUE;
und zwar wird diese methode DateTime von einem Timer alle 30s aufgerufen.
Nur wird nichts gezeichnet!
Weiß jemand was man da ändern muss bzw. welche Update /Neuzeichen Methode man benutzen muss?
-
Zeichen muss Du *immer* als Reaktion auf WM_PAINT bzw. in der OnPaint Methode.
In Deiner 30-Sekunden-Methode musst Du nur InvalidateRect aufrufen...
-
OK ich probiers mal!
Thanx!
-
Also es funktioniert nur in meinem "Hauptdialog"!
sobald ich einen anderen Dialog öffne passiert nichts bzw. ich kann sehen das auf dem unteren Fenster die Uhrzeit aktualisiert wird.
ich versuche mit getactiveWindow das aktuelle Fenster zu erhalten:
CWnd* window; window=GetActiveWindow(); CPaintDC dc(window); // device context for painting
dann soll auf dem Fenster gezeichnet werden!
-
Oh weh, oh weh...
Was willst Du denn machen??? Auf jedem x-beliebigen Fenster einfach irgendwo diese Werte anzeigen?
-
Also, eigentlich musst du in jeder OnPaint()-Funktion des jeweiligen Fensters zeichnen.
-
ja das mit dem On Paint weiß ich,
in jeder meiner OnPaint Methoden steht das gleiche (siehe oben).
jetztb will ich nur das nach ablauf des Timers das oberste Fenster neugezeichnet wird!!!Bis jetzt wird aber nur mein Hauptdialog immer neugezeichnet!