Entwickler-Ecke

Alle Sprachen - Alle Plattformen - Child-Fenster minimieren


georgeboy - Mi 14.02.24 08:45
Titel: Child-Fenster minimieren
Hallo zusammen, folgende Frage, wenn ich unter VS 2010 ( zugegeben alt ) eine C++ MFC MDI Anwendung mit CEditView als Child-Fenster-Klasse einrichte, dann sehe ich nach dem Starten der Anwendung keine Möglichkeit die Child-Fenster zu minimieren, bei VS 2008 hatte jedes Child-Fenster rechts oben die üblichen drei Schaltflächen. Habe ich die Möglichkeit, diese Flächen anzeigen zu lassen? Sonst müsste ich wohl, einen Menüeintrag im Rahmenfenster einbauen.


georgeboy - Mi 14.02.24 11:16

Folgender Code geht nicht, das aktuelle Child-Fenster ist immer noch maximiert, und erscheint unten "minimiert".


C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void CMainFrame::OnAnsichtMinimieren()
{
  // TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
  //MessageBox(L"Hallo ...", 0, 0);
  WINDOWPLACEMENT wpl;
  BOOL b;
  CMDIChildWnd* cwnd = MDIGetActive(&b);
  cwnd->GetWindowPlacement(&wpl);
  wpl.showCmd = SW_SHOWMINIMIZED;
  cwnd->SetWindowPlacement(&wpl);
}


Th69 - Mi 14.02.24 11:33

Die Fenster einer MDI-Anwendung sollten vom Typ CMDIChildWnd [https://learn.microsoft.com/en-us/cpp/mfc/reference/cmdichildwnd-class] sein, mit CEditView [https://learn.microsoft.com/en-us/cpp/mfc/reference/ceditview-class] als View (Subcontrol).

Kannst auch mal das MDI-Beispiel VC2010Samples/MFC/general/mdidocvw [https://github.com/microsoft/VCSamples/tree/master/VC2010Samples/MFC/general/mdidocvw] bei dir ausprobieren.


georgeboy - Mi 14.02.24 11:47

Das Test-Projekt wurde als C++ MDI Anwendung, mit CEditView als "Child-Klassen-Typ" angelegt, die Typen stimmen alle. Dein Beispiellink konnte ich leider nicht verwenden.


Th69 - Mi 14.02.24 11:57

Wieso konntest du das Beispielprojekt "nicht verwenden"?


georgeboy - Mi 14.02.24 14:47

Bei dem Beispiel, habe ich keine Funktion gesehen, wie man per Menübefehl das aktuelle Child-Fenster minimiert. Ob da noch aufgrund von gesetzten Eigenschaften die Schaltflächen angezeigt werden, da habe ich nichts gesehen. Meine Bücher reichen eben nur bis VC++ 6.0. Es gibt über die C++ MFC Neuerungen leider keine Literatur. Und was ich gesehen habe, gibt es dieses Problem auch bei VS 2019/2020 ( bin mir nicht ganz sicher ). Keine Möglichkeit die Kind-Fenster zu minimieren. C# .NET ist gegenüber C++ MFC eben ganz was anderes, man muss nicht an der einen oder anderen Ecke etwas flicken, gottseidank gibt es C# .NET.


georgeboy - Mi 14.02.24 15:54

So jetzt muss ich mich entschuldigen. Bei der Anlage des Projekts kann man "Klassisches Menü verwenden" auswählen. Dann erscheinen die Flächen rechts oben. Aber leider werden bei den Texteinträgen, bei den minimierten Fenstern unten, nur die zwei ersten Buchstaben angezeigt, für mich nicht brauchbar. Ob Du da auf die Schnelle was weist?


Th69 - Mi 14.02.24 17:56

Bei meinen MDI-Projekten (C++ VCL und C# .NET) werden auch nur 5 Zeichen bei den minimierten Fenstern angezeigt (weil noch links das Icon und rechts die 3 Buttons angezeigt werden) - ich kenne auch keine Möglichkeit die Breite des minimierten Fensters zu ändern.

Hast du denn evtl. eine größere Schriftgröße oder eine Skalierung (in den Windows-Einstellungen) eingestellt?

Edit:
Es ist wohl systemweit möglich die Breite zu ändern, s. Top-Antwort in Is it possible to change size of minimized window in MDI [C# Winforms] [https://stackoverflow.com/questions/4813637/is-it-possible-to-change-size-of-minimized-window-in-mdi-c-sharp-winforms] (also mittels SystemParametersInfo(SPI_SETMINIMIZEDMETRICS, ...) [https://learn.microsoft.com/de-de/windows/win32/api/winuser/nf-winuser-systemparametersinfoa]).


georgeboy - Mi 14.02.24 18:10

Danke Dir Th69 !