MDI und Fensterstyle
-
Lange habe ich gesucht und gesucht und gesucht, aber nichts anständiges gefunden.
Wenn man ein Child-Window in einer MDI Anwendung erstellt, so hat dieses immer einen fetten 3D Rahmen und eine volle Titelleiste. Es muss doch möglich sein, den Rahmen zu entfernen und die Titelleiste wie bei einem Tool-Window zu verkleinern! Das muss doch gehen, warum schreibt denn keiner genau wie?
Hat jemand eine Lösung?`
viele grüße,
bjoernPS: Oder andere Möglichkeit: Kann ich eine Dialog-Ressource als eine Toolbar laden/einbinden? Sowas hätte ich gerne, um alle geöffneten files anzuzeigen (und ein paar Buttons). Dieses Fenster sollte immer sichtbar sein.
-
Hol dir die OnActivateFrame in der Klasse CChildFrame und benutze ModifyStyle:
ModifyStyle(WS_CAPTION , 0);
Für weitere Infos:
Und hier noch ein Paar WindowStyles :
Hoffe konnte dir helfen !
Gruß
:: NoName ::
-
Hi,
ich habs versucht, es klappt aber nicht. Anscheinend wird das Child Window von all den Veränderungen nicht betroffen. Wenn ich allerdings z.b die Maximize Box weglassen will, funktioniert es, diese wird dann "vergraut".
Das hilft aber nicht, weil der fette Rahmen und die Titelleiste weg muss...
Ich würde also gerne das Childwindow im WS_EX_TOOLWINDOW Style haben, aber vermutlich werden Childs über CreateWindow und nicht über CreateWindowEx erzeugt, oder denke ich da falsch?
viele grüße,
bjoern
-
Hmm, also ich habs versucht und bei mir hats geklappt !
Dann versuche mal im Vierten Schritt beim erstellen einer MDI-Anwendung
auf Advanced zu klicken und dort bei WindowStyles deine ChildWindow zu
kreieren !Gruß
:: NoName ::
-
Aaaaaaaalso. Ich habe folgendes hinbekommen:
habe in meiner FrameKlasse
ActivateFrame
ueberschrieben und folgendes ergaenzt:
void CDiagramFormFrameChild::ActivateFrame(int nCmdShow) { ModifyStyleEx(0, WS_EX_PALETTEWINDOW , SWP_FRAMECHANGED); CMDIChildWnd::ActivateFrame(nCmdShow); }
Das Ergebnis findet sich hier:
http://www.fal-design.com/fal-image/img/20041007_035451.jpg
Wie man sieht, ist der Dialog in das Fenster eingelassen. Ich habe versucht, diesen Rahmen wegzubekommen:
void CDiagramFormFrameChild::ActivateFrame(int nCmdShow) { ModifyStyleEx(WS_EX_STATICEDGE, WS_EX_PALETTEWINDOW, SWP_FRAMECHANGED); CMDIChildWnd::ActivateFrame(nCmdShow); }
Also das war nicht der einzige Versuch, ich habs mit fast allen Window-Styles ausprobiert. Es geht nicht!
Dann habe ich eine Routine geschrieben, die mir mit
GetStyle();
alle aktuellen Styles ausgibt (die Window Style Variablen werden darin angezeigt, also GetStyle wird aufgeschluesselt). Der Style WS_EX_PALETTEWINDOW, den ich dem Fenster zugewiesen habe, ist allerdings nicht aufgefuehrt! Das laesst mich vermuten, dass irgendwo, wo auch das Fenster kreirt wird, der Style eines Rahmens immer hinzugefuegt wird. Nur weiss ich leider nicht wo.
Uebrigens, hier ein Screenshot der WindowStyles des modifizierten Fensters:
http://www.fal-design.com/fal-image/img/20041007_040211.jpg
Weiss also jemand, wie ich diesen bloeden fetten Rahmen um das Fenster wegbekomme? Die Titelleiste hab ich ja bereits erfolgreich modifiziert, dank NoNames Hilfe
viele gruesse,
bjoern
-
Also wie man auf dem zweiten Pic erkennen kann (http://www.fal-design.com/fal-image/img/20041007_040211.jpg) ist der Style 'WS_CAPTION' noch vorhanden ! Nimm diesen Style mit ModifyStyle(Ex) weg und dann müsste es gehen !
Gruß
:: NoName ::
-
Habs gerade versucht es klappt leider nicht
-
Also bei mir klappt es. So muss dein Code aussehen :
void CChildFrame::ActivateFrame(int nCmdShow) { // TODO: Add your specialized code here and/or call the base class ModifyStyle(WS_CAPTION, 0); CMDIChildWnd::ActivateFrame(nCmdShow); }
Gruß
:: NoName ::
-
Wenn ich WS_CAPTION wegnehme (so wie in deinem Code), bekomme ich das hier:
http://www.fal-design.com/fal-image/img/20041007_135514.jpg
sieht auch nett aus, hat aber leider immer noch den fetten Rahmen. Siehts bei dir anders aus?
-
Genau so siehts bei mir auch aus...
Versuch malModifyStyle(WS_CAPTION | WS_THICKFRAME, 0);
Vielleicht gefällt dir das besser
Gruß
:: NoName ::
-
Ne, das ist es auch nicht. Das Dialogfeld ist immer noch eingelassen und ohne das WS_BORDER kann man das Fenster auch leider nicht mehr verschieben. Auch doof. Ich befürchte, dass man es gar nicht verhindern kann, dass das Child-Window eingelassen ist.
-
Sorry, hab mein Account ein bisschen spät gecheckt
Ich hab dich doch recht verstanden (?) du möchtest doch das dein ChildFrame
ein WS_TOOLWINDOW Style hat ? Und was genau meinst du mit "eingelassen" ?Hier eine Test Applikation :
Download : --------------------------------------------------
Die ChildFrames der Test Applikation haben auch nur den ToolWindow Style ...
Gib mir bitte bescheid, ob alles bei dir klappt oder nicht ?Gruß
:: NoName ::