2009-08-25 13 views
1

Ich habe eine MDI-Anwendung in C++ geschrieben, die unter Windows XP gut aussieht. Alle untergeordneten MDI-Fenster sehen schließlich wie ihr übergeordnetes Fenster aus. Nett. Unter Windows 7 (und wahrscheinlich Vista) haben die Elternfenster jedoch Aero-Glas, und die untergeordneten Fenster sind diese scheußliche, unveränderliche, babyblaue Farbe (wie das Windows 7 Basic-Thema). Meine Bewerbung sieht also sehr, sehr schlecht aus.Ändern der Farbe von MDI Kind Windows unter Windows 7

Sie können das gleiche hässliche Verhalten sehen, indem Sie Office 2003 starten und versuchen, MDI-Unterfenster (möglicherweise in Excel) zu betrachten. Office 2007 hat jedoch tatsächlich drei Farbthemen - Blau, Silber und Schwarz. Diese Themen werden irgendwie zu den unterordneten MDI-Fenstern in Excel weitergeleitet.

Ich weiß nicht, wie Microsoft dies in Office 2007 tut. Ich würde gerne den Trick kennen. Ich muss die Zeichnung meiner MDI-Unterfenster haken und übernehmen und replizieren, was das Office 2007-Team abgezogen hat. Das Problem ist, dass ich alle DrawTheme * -Aufrufe verwenden möchte, damit ich die Verläufe und abgerundeten Kanten und Schaltflächen alle richtig gezeichnet bekomme. Und alle diese Systemaufrufe benötigen ein Handle zu einem Thema. Es scheint jedoch nicht möglich zu sein, SetWindowTheme beispielsweise zu verwenden, um das Farbschema eines anderen Themas zu verwenden. Zumindest soweit ich das beurteilen kann.

Wer weiß, wie Microsoft dies erreicht?

Antwort

1

Es ist keine großartige Lösung, aber stochern im Internet, fand ich this article darüber, wie Sie eine WinXP abgerundeten Look in die quadratische Wohnung Win95/Win98/Win2k Fensterstil platzieren. Es arbeitet mit BMP-Snapshots des WinXP-Themes und verwendet dann Bitblit-Funktionen, um sie auf geeignete Größen um den Fensterrahmen herum zu strecken. Ich habe seine Demo-Software ausprobiert, und tatsächlich sieht es wie WinXP Luna unter Win7 aus. Ich kann sein Beispiel als Grundlage verwenden, um meine MDI-Kind-Fensterrahmenzeichnung anzuhängen und zu ersetzen. Das Problem bei diesem Ansatz ist, dass Sie entweder eine Titelleistenbreite auswählen und dabei bleiben müssen und nicht auf globale Designanpassungen reagieren, die die Titelleistenhöhe ändern, oder Sie müssen viele verschiedene BMP-Snapshots in verschiedenen Größen verwenden. Für meine Zwecke ist es wahrscheinlich in Ordnung, nur auf eine Dicke zu bleiben und die Anpassung der Benutzerthemen zu ignorieren. Nachdem ich sie eingerichtet habe, kann ich verschiedene Themen einfach durch BMP-Snapshot anwenden - so dass ich auch das Office 2007-MDI-Child-Look anwenden kann.

+0

Ich hasse es wirklich so etwas zu tun, da es die GUI-Standards verletzt, aber ich hätte nicht einmal daran denken müssen, wenn Microsoft die Farben von MDI-Kindern unter Windows 7 anpassen könnte. – dsmtoday

Verwandte Themen