Dialog verliert Focus = nicht mehr maximierbar
-
Und schon bahnen sich neue Probleme an

Nachdem ich meiner Testanwendung einen Slidedialog spendiert habe
kann ich nun, wenn dieser Slidedialog sichtbar ist, die Hauptanwendung
nicht mehr maximieren.Ich sehe sie zwar nach Ablage in der Taskbar da unten noch, bekomme
sie aber nicht mehr zurück.Vermutlich muss ich irgendeine Message einfügen, die mir die zwei
Dialoge wieder nach oben bringt. Nur welche
-
Als Idee hätte ich jetzt noch gedacht ich verwende:
ShowWindow(SW_RESTORE);Nur wo setze ich das hin? Welche Funktion wird gerufen, wenn ich aus dem
Taskbar den Dialog zurück haben will?
-
Auch wenn ich nerve noch ein wichtiger Nachtrag (mein Gott ich
führe schon Selbstgespräche
):Wenn ich einen Rechtsklick auf den Eintrag in der Taskbar mache,
kann ich erfolgreich mit "Wiederherstellen" beide Fenster anzeigen.Any ideas?
-
Hat denn da niemand eine Idee woran sowas liegen könnte?

-
Also wenn Dein Dialog per DoModal geöffnet ist, dann ist dieser modal. In diesem Fall ist das Elternfenster disabled. Das ist normal. Du müsstest den Dialog entsprechend nicht modal erzeugen.
-
Nabend Martin,
ich habe den Slidedialog mit
(SlideDialog von Codeproject)
m_pModeless = new haus(this); if(m_pModeless->GetSafeHwnd()==0) { m_pModeless->Create(); m_pModeless->SetSlideSpeed(10); m_pModeless->SetSlideDirection(RIGHT); m_pModeless->StartSlide(); }aufgerufen. Er ist also neben der Hauptanwendung gleichzeitig zu nutzen.
Also nicht modal.Ich verstehe nicht was mir dazwischen funkt. Denn in der Anwendung von
Codeproject tritt das Problem nicht auf. Ebenso in einer weiteren Anwendung
die ich testweise genauso angelegt habe.Ich muss die relevante Stelle finden, die in meinem aktuellen Projekt das
Problem verursacht. Hab nur keine Ahnung was da überhaupt für Funktionen
beim "Restore" gerufen werden.Denn, nutze ich per Rechtsklick "Wiederherstellen" in Windows, dann habe ich
beide Dialoge wieder. Es tritt auch nur auf, wenn ich den Slidedialog offen
habe und dann in die Taskleiste minimiere.
-
Habe die Stelle gefunden, die das Problem verursacht, aber noch keine
Idee für eine Lösung.Sobald ich den Aufruf für OnMove mit Reposition setze hakelt es.
void CTest::OnMove(int x, int y) { CDialog::OnMove(x, y); //ab hier die Problemstelle!! if (m_bOpen) { m_pModeless->RePosition(); } }RePosition sieht wie folgt aus:
BOOL CSlideSon::RePosition() { this->m_pDlg->GetWindowRect(&m_MyPos); int xPos = m_MyPos.right ; SetWindowPos(&wndTop,xPos,m_MyPos.top+4,OrigPos.Width(),m_MyPos.Height()-8,SWP_SHOWWINDOW); return TRUE; }Ist in anderen Anwendungen jedoch so anwendbar, ohne dass die Dialoge nicht
mehr hoch kommen.
-
Um den halben Monolog zu beenden hier doch eine mögliche, aber unfeine Lösung:
this->m_pDlg->GetWindowRect(&m_MyPos); int xPos = m_MyPos.right ; SetWindowPos(&wndTop,xPos,m_MyPos.top+4,OrigPos.Width(),m_MyPos.Height()-8,SWP_SHOWWINDOW); ::AfxGetMainWnd()->ShowWindow(SW_RESTORE); return TRUE;Dadurch, dass bei ausgeklapptem Slidedialog in OnMove nun immer
SW_RESTORE gerufen wird, kann man bei ausgeklapptem Fenster in der
Hauptanwendung leider nicht mehr "Minimieren" klicken, da dies
unweigerlich zu einem OnMOve() führt....Naja, halbwegs zusammengefrickelt

Aber besten Dank an dich Martin!

-
Im Nachhinein finde ich das Restore doch etwas unglücklich.
Habt ihr eine Idee den Dialog anderweitig wieder herzustellen?