Problem mit Vollbild in OnInitDialog
-
Tach zusammen!
ich möchte eine Anwendung im Fullscreen Modus (also maximiert) laufen lassen.
Kurz mein Problem:
mit einem Timer wird alle 5sek auf dem jeweilig aktuellen Dialog die Uhrzeit aktualisiert und der Dialog neugezeichnet.
wenn ich dort den Fullscreen reinschreibe funktioniert es:void CDolmetscherDlg::OnTimer(UINT nIDEvent) { //neu!!!!!!!!!!!!!! COMSTAT ComStat; DWORD dwErrorFlags=0; bool connected; 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(); //jeweiliges DialogFenster maximiert anzeigen ::ShowWindow(owner->m_hWnd, SW_SHOWMAXIMIZED); //owner->h_Wnd: handle auf aktuelles, sichtbares Fenster ::RedrawWindow(owner->m_hWnd,NULL,NULL,RDW_INVALIDATE); } break; case 2: { ...
Das Problem ist, das dann erst nach ablauf des Timers der Bildschirm maximiert wird!
Wenn ich in OnInitDialog den Dialog maximieren möchte bekomme ich Assertion Failed Nachricht!
BOOL CDolmetscherDlg::OnInitDialog() { CDialog::OnInitDialog(); //Hide Windows Taskbar CWnd *pTaskBar, *test; pTaskBar = FindWindow(_T("HHTaskBar"),NULL); pTaskBar->ShowWindow(SW_HIDE); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon CString mb_text; //test= FindWindow(_T("CDolmetscherDlg"),NULL); test=(CWnd*)this->m_hWnd; test->ShowWindow(SW_SHOWMAXIMIZED); ...
Folgendes habe ich auch schon probiert:
void CDolmetscherDlg::MaximizeScreen() { CWnd* owner2; //owner2=GetActiveWindow(); owner2=GetActiveWindow(); ::ShowWindow(owner2->m_hWnd, SW_SHOWMAXIMIZED);
Diese Funktion wird dann von OnInitDialog aufgerufen.
Weis jemand Rat?
Greetz
-
warum versuchst du es mit m_hWnd?
bei mir geht es wunderbar mit ShowWindow(SW_SHOWMAXIMIZED). einfach direkt im dialogfeld aufrufen. habe es jetzt nicht in OnInitDialog() drin, aber vermute das es auch so klappen sollte
-
Was mwinst Du mit direkt im Dialogfeld???
Ich hab es jetzt so gelöst:
::SetWindowPos(this->m_hWnd,this->wndTop,0,0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),SWP_SHOWWINDOW);
ich ermittle einfach die Breite und Höhe meines Displays und zeichne das Window dann von 0,0 bis Breit, Höhe!
funktioniert einweandfrei!
-
das ist jetzt aber nicht maximiert.
vermute du hast nen dialogfeld ohne rand o.ä. das du über den ganzen bildschirm gestreckt haben wolltest.
wenn du es so machst kannst du nicht die vorteile verwenden die du hättest wenn es wirklich maximiert wäre. (z.b. wenn die auflösung verändert wird im nachhinein)
-
Da ich für embedded Systeme Programmiere und da die Auflösung (in dieser speziellen Anwendung natürlich) nicht verändert wird sollte es auch so funktionieren!
aber nochmals meine Frage wohin schreibst Du das ShowWindow(SW_SHOWMAXIMIZED)?
-
ist egal, z.b.:
BOOL CDolmetscherDlg::OnInitDialog() { // ... ShowWindow(SW_SHOWMAXIMIZED); // ... }
mich hat nur das
monne81 schrieb:
test=(CWnd*)this->m_hWnd; test->ShowWindow(SW_SHOWMAXIMIZED);
was ja das selbe währe wie einfach nur ShowWindow() zu schreiben