2009-08-07 3 views
2

Ich weiß, dass dies auf Systemebene gesteuert werden kann, aber ich möchte die Systemeinstellung überschreiben und ein bestimmtes Aussehen nur für meine Anwendung haben. Ich gehe davon aus, dass es eine Windows-API-Funktion geben muss, um dies zu kontrollieren, weil ich eine andere Windows-Anwendung gesehen habe, die das tut.Wie kann ich die Randstärke und Farbe in Windows Forms steuern?

(Es ist nicht notwendig, die Gründe zu gehen, warum ich das nicht tun sollte)

+2

Gut, setzen Sie die Nutzungsbedingungen dort, oder Sie würden 10 Antworten bekommen haben sage Ihnen dies nicht zu tun (wie Sie sicherlich wissen sind). Dies ist leicht der nervigste Aspekt von Stackoverflow. – MusiGenesis

Antwort

2

Wenn Sie ein eigenes Aussehen für Ihre Anwendung wünschen, würde ich nur meine Form randlos machen und alles selbst behandeln, sei es durch Zeichnung auf dem Formular selbst im Paint-Ereignis oder andere Steuerelemente (Panels usw.) im Resize-Ereignis. Sie müssen mit Dingen wie Ziehen, Größenänderung, Schließen/Minimieren usw. umgehen, aber nichts ist besonders schwierig.

Hier ist my answer zu einer ähnlichen Frage, die die Grundlagen zeigt, es selbst zu tun (es ist für Windows Mobile, aber es wird auch in normalen Fenstern funktionieren).

+0

Ich begann diese Straße, nachdem ich die Frage gestellt hatte. Ich hatte gehofft, es gäbe einen besseren Weg. Wenn ich das Zeug selbst zeichne, kann ich immer noch die Größe der Fenster ändern, indem ich eine Start-Resize-Nachricht absetze oder so? Nein, ich kann den gepunkteten Linieneffekt, der während der Größenänderung eines Fensters zu sehen ist, nicht replizieren (wenn die Windows-Einstellung "Fensterinhalt beim Ziehen anzeigen" deaktiviert ist). – Fantius

+0

Guter Punkt - ich weiß nicht darüber. Ich habe gerade iTunes ausgecheckt (was in Windows komplett vom Eigentümer gezeichnet wird, wie du es vorhast), und es zeigt eine gepunktete Linie beim Ziehen, aber interessanterweise ist es nicht die gleiche gepunktete Linie wie eine normale Windows-Fenster, was bedeutet, dass sie auch die Gliederung selbst handhaben. – MusiGenesis

+1

Ich denke, die Gliederung wäre relativ einfach selbst zu implementieren. Im mousedown-Ereignis würden Sie ein zweites randloses Formular mit einem transparenten Hintergrund und einem gepunkteten Rahmen aufklappen und dieses bis zum mouseup-Ereignis verschieben und dann Ihr reales Formular an die neue Position verschieben. – MusiGenesis

2

Diese äußeren Elemente eines Anwendungsfensters werden zusammenfassend als Fenster "chrome" bezeichnet und vom Betriebssystem tatsächlich gerendert. Verschiedene Flags werden auf der Windows-API-Ebene verwendet, um bestimmte Aspekte jeder Fensterinstanz zu steuern (z. B. das Vorhandensein einer Steuerbox, Rahmen, Min/Max-Schaltflächen usw.), aber die Rahmenbreite für veränderbare Fenster wird durch eine Systemeinstellung bestimmt um Einheitlichkeit zu gewährleisten und ist nicht Fenster für Fenster konfigurierbar.

Sie können in einigen Fällen die Kontrolle über einige der Aspekte Ihres Fensters erlangen, die von .NET nicht durch Interaktion mit der Windows-API verfügbar gemacht werden, und es ist vorteilhaft, die Windows-API-Dokumentation zu lesen, um herauszufinden, was genau dabei möglich ist niedrigeres Level. Ich empfehle, die Dokumentation für CreateWindowEx als Ausgangspunkt zu lesen.

http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx

.NET können Sie die Formborderstyle-Eigenschaft ändern unter keinen Rand, einzelne Pixelbreite Grenze und resizable (dicke Grenze) zu wählen. Wenn Sie etwas benutzerdefiniertes tun möchten, müssen Sie den .NET-Rahmenstil auf "none" setzen und dann die Verantwortung für das Rendern des Fensters chrome übernehmen. Dazu müssen Sie eine eigene Titelleiste, Min/Max-Schaltflächen und einen Fensterrahmen erstellen. Es ist kein leichtes Unterfangen, aber viele Apps tun es. Es ist ein langer Weg, wenn Sie nur die Randbreite kontrollieren wollen.

In diesem Artikel wird erläutert, wie man diese Aufgabe in WPF angehen könnte, und möglicherweise auch nützlich sein.

Window Chrome In WPF

+0

+1 mit der Ausnahme, dass dies ein relativ leichtes Unterfangen ist. Normalerweise nicht wert, aber überhaupt nicht schwierig. – MusiGenesis

Verwandte Themen