Laden...

Gleichzeitig aktivierte Fenster und VisualStyle von Paint.NET

Erstellt von michael.schoeppe vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.791 Views
M
michael.schoeppe Themenstarter:in
17 Beiträge seit 2005
vor 16 Jahren
Gleichzeitig aktivierte Fenster und VisualStyle von Paint.NET

Hallo zusammen,
ich habe mir soeben Paint.NET installiert und wundere mich über einige Sachen die ich so auch gerne programmieren würde.

Zunächst einmal fällt auf das alle Fenster des Programms (Verlauf, Ebenenen usw. als auch das Hauptfenster als Besitzer) zumindest optisch zur gleichen Zeit aktiviert sind. Wenn ich selber so was programmiere, also zwei Fenster wobei das eine ein Hauptfenster und das andere als Besitzer das Hauptfenster hat, dann ist nur das Fenster aktiviert in dem ich gerade arbeite. Ich weiß das dies normales Windows-Verhalten ist, aber ich würde es gerne so machen wie in Paint.NET. In Paint.NET kann ich auch in irgendein Sub-Fenster klicken (bzw. darin arbeiten) und gleich darauf auf das z.B. Menü des Hauptfensters klicken. Würde ich meinem eben beschriebenen Programm noch ein Menü im Hauptfenster hinzufügen, so müßte ich das Hauptfenster jedes mal erst durch klicken auf z.B. die Titelleiste aktivieren, sofern ich gerade in meinem Sub-Fenster gearbeitet habe, um das Menü benutzen zu können. Und noch was ist mir aufgefallen: Das Menü (MenuStrip) sowie die Symbolleisten usw. von Paint.NET sehen vom Design so aus als wäre Application.EnableVisualStyles(); nicht verwendet worden (Ich arbeite unter XP). Aber ich habe gesehen das zumindest in einigen Sub-Fenstern diverse Buttons z.B. nen VisualStyle verwenden. Wie ist das zusammen vereinbar? EnableVisualStyles wurde offensichtlich nicht verwendet und doch sind VisualStyles zumindest teilweise aktiviert. Ich stelle diese Frage wie das geht weil mir nämlich ein MenuStrip ohne VisualStyle optisch viel besser gefällt.

Also vielleicht weiß jemand wie all diese von mir beschriebenen Dinge die man in Paint.NET sieht, realisieren kann.

Ich weiß das es den Sourcecode zu Paint.NET zum runterladen gibt. Aber ich hab nicht unbedingt die Zeit mich da durch zu arbeiten. Deswegen hoffe ich mir kann jemand hilfreiche Antworten geben.

Vielen Dank im voraus

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo michael.schoeppe,

aber ich würde es gerne so machen wie in Paint.NET

==> Mdi

Das Menü (MenuStrip) sowie die Symbolleisten usw. von Paint.NET sehen vom Design so aus als wäre Application.EnableVisualStyles(); nicht verwendet worden

Keine Ahnung: Vielleicht Menu statt MenuStrip? Oder VisualStyleElement.Menu-/VisualStyleElement.Menu.Item-Klasse?

herbivore

M
michael.schoeppe Themenstarter:in
17 Beiträge seit 2005
vor 16 Jahren

Ich weiß nicht so recht wie das mit mdi funktionieren soll. Es sollten schon Fenster sein die sich nicht nur innerhalb eines Hauptfensters bewegen können. Also kein mdi. Eher so:

subform.Owner=mainform;

Auf diese Weise bleiben die Fenster die zu dem Hauptfenster gehören immer vor dem Hauptfenster, können aber frei auf dem Desktop verschoben werden.
Es geht mir um folgendes: Im Allgemeinen ist der Rahmen eines Fensters welches sich gerade im Vordergrund befindet (also aktiviert ist) dunkelblau (oder so ähnlich) und die Rahmen der Fenster die sich somit im Hintergrund befinden (also gerade nicht aktiviert sind) hellgrau oder hellblau (was auch immer). Ich möchte jetzt also gerne erreichen das alle Fenster (Form's) meines Programms gleichzeitig aktiviert sind, also zum einen den Dunkel Blauen Rahmen besitzen und zum anderen das ich nicht erst das nächste Fenster in meinem Programm anklicken muß um es zu aktivieren sondern gleich in ein Menü oder so des nächsten Fensters klicken kann. Ich weiß nicht wie ich es sonst noch beschreiben soll (habe schon einige Beiträge zu dem Thema in versch. Newsgroups usw. verfasst). Ich kann nur sagen so wie in Paint.NET (Siehe Dateianhang/Bild) oder zum Beispiel auch Adobe Photoshop.

Menu statt MenuStrip ist für mich keine Lösung. Mir gefällt einfach das Design, oder besser die Farbwahl eines MenuStrip besser wenn VisualStyles deaktiviert sind (Es sieht dann so aus wie in Visual C# Express Edition und nicht so knallbunt wie in Office 2003).
Mit allen Inhalten des Namespaces System.Windows.Forms.VisualStyles kenn ich mich nicht aus. Also auch nicht mit VisualStyleElement.Menu. Keine Ahnung was ich damit anfangen soll.

Trotzdem Danke
Michael

B
1.529 Beiträge seit 2006
vor 16 Jahren

Paint .NET ist doch Open Source => Code.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Borg,

Ich weiß das es den Sourcecode zu Paint.NET zum runterladen gibt. Aber ich hab nicht unbedingt die Zeit mich da durch zu arbeiten. Deswegen hoffe ich mir kann jemand hilfreiche Antworten geben.

herbivore

B
1.529 Beiträge seit 2006
vor 16 Jahren

Ok, hatte ich überlesen.

ABER:

Das Durchsuchen des Codes hat zehn Minuten gedauert. Runterladen, in VS öffnen, ein Form mit dem gewünschten Verhalten finden und dann in der Vererbungshierarchie immer weiter hinauf, bis man bei der Klasse FormEx ankommt.
Dort sieht man, dass die Klasse, immer wenn das Form deaktiviert wird, per SendMessage die Nachricht WM_NCACTIVATE mit wParam gleich 1 an das eigene Fensterhandle schickt. Laut Platform-SDK gibt der Parameter wParam dieser Nachricht an, ob der NC-Bereich des Fensters sich als aktiv (wParam == 1) oder inaktiv (wParam == 0) zeichnen soll.
Das ist also das ganze Geheimnis.

Und hat nicht länger gedauert als das Posten solch langer Texte.

M
michael.schoeppe Themenstarter:in
17 Beiträge seit 2005
vor 16 Jahren

Hey Borg.
Danke für Deine Hilfe. Aber wenn Du ein Problem damit hast zu antworten dann laß es doch einfach. Allerdings dachte ich ein Forum ist dafür da Fragen zu stellen und Antworten zu finden, und zwar ohne sich dafür schuldig fühlen zu müssen das man noch ein Anfänger ist. Und nochwas: Ich habe den Code tatsächlich mal durchsucht (Bevor ich Deine Antwort las) und bin auch bis FormEx vorgedrungen. Nur habe ich es einfach nicht kapiert. Erst jetzt, nach Deiner Antwort, habe ich es verstanden. Also bevor ich jetzt noch irgendetwas anderes sage, sag ich einfach nochmal vielen Dank. Und das mein ich tatsächlich ernst.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo michael.schoeppe,

das folgende mag hart klingen, aber ich meine es rein sachlich. Es ist eine sinnvolle, rationale Überlegung:

Allerdings dachte ich ein Forum ist dafür da Fragen zu stellen

ja, klar. Nur ist es eben auch Sache der Antwortenden zu entscheiden, wie sie die Antwort gestalten, genauso wie es deine Sache ist zu entscheiden, wie du deine Frage gestaltest. Da du etwas von den Hilfestellern willst und sie dir kostenlos helfen, solltest du die Antworten am besten so nehmen, wie sie kommen, ohne dich zu beklagen, insbesondere wenn sie dein Problem lösen. Hilfesteller durch Kritik zu verärgern birgt nur die Gefahr, dass man beim nächsten Mal weniger oder keine Antworten bekommt.

Ich denke Borg hat seine Antwort eben so sachlich gemeint wie du und ich.

herbivore

M
michael.schoeppe Themenstarter:in
17 Beiträge seit 2005
vor 16 Jahren

Hallo Herbivore,
ich weiß das Du Recht hast und da ich mich ja abschließend bei Borg nochmal bedankt habe, und das ganz ehrlich, denke ich habe ich auch niemanden verärgert. Natürlich war seine eigentliche Antwort sehr sachlich. Fand ich gut und ich hab mich auch darüber gefreut. Aber der erste Satz "Das Durchsuchen des Codes hat zehn Minuten gedauert" sowie der letzte Satz "Und hat nicht länger gedauert als das Posten solch langer Texte." fand ich unnötig weil diese Sätze einfach so genervt geklungen haben. Aber offensichtlich war meine Annahme falsch. Ich möchte das Thema aber jetzt nicht in einem Forum wie diesem weiter breit treten. Dafür ist das Forum nicht da.

Gruß
Michael

B
1.529 Beiträge seit 2006
vor 16 Jahren

Sorry, wenn ich dir mit diesen beiden Sätzen auf den Schlips getreten bin. Das war sicherlich nicht persönlich gemeint.

In deinem Ursprungspost klang es so, als ob du dir den Code nicht anschauen möchtest. Und auf diese Einstellung bezogen sich auch die beiden Zeilen.

Nur wenn du dir den Code angesehen hast und bis FormEx vorgedrungen bist, wieso hast du dann nicht einfach nachgefragt, was dort passiert?
Das hätte wahrscheinlich immer noch schneller zu Antworten geführt, da man als Antwortender nicht gezwungen wäre, den Code zu durchsuchen.

M
michael.schoeppe Themenstarter:in
17 Beiträge seit 2005
vor 16 Jahren

Hi Borg,
ich habe mir den Code erst angeschaut nachdem ich meine Frage ins Forum gestellt habe. Leider wußte ich nicht so recht wonach ich suchen sollte. Wie ich ja schon angedeutet habe bin ich Anfänger (zumindest in dieser Sprache) und hatte also nur wage Vermutungen wonach ich suchen muß. Meine Vermutungen waren aber größtenteils falsch (wie Deine Antwort für mich ergeben hat), weshalb ich also auch irgendwie "blind" für den Inhalt der FormEx-Klasse war. Ich habe also gar nicht gemerkt das die Antwort vor mir liegt. Deswegen konnt ich keine konkrete Frage stellen.
Aber Du hast mir jetzt die richtige Richtung gezeigt, und trotz meines Anfänger-Status habe ich deine Lösung sogar verstanden 🙂