XP-Styles verursachen unerwartete Probleme



  • Hallo Community!

    Ich hab ein Programm, an dem ich seit Monaten bastle.
    Ich bin auch schon ohne XP-Styles ziemlich weit gekommen und dachte mir heute, zur Abwechslung kümmer ich mich mal nicht um die technischen Aspekte sondern, um das Design.

    Da war das erste, was zu tun war natürlich die XP-Styles zu implementieren.
    Gewollt, getan und überrascht!!!

    Mit aktivierten XP-Styles habe ich hässliche Darstellungsfehler, die ohne nicht auftauchen. Einfaches Beispiel:

    Die Controls (erzeugt mit CreateWindowEx)werden auf dem Hauptfenster tadellos dargestellt. Sobald ich aber Controls auf anderen Controls habe werden die Controls, die auf einem anderen sitzen fehlerhaft gezeichnet, konkreter: sie haben 'ungemalte' Flecken, dunkle Ränder...

    Ich hab zahlreiche Groupbox-Controls mit vielen anderen Controls drauf und bin jetzt deprimiert 😞 Meine schöne GUI ist jetzt soo hässlich.. und dabei sollten die XP-Styles ja nur verschönern...

    Ich verwende überhaupt keine besonderen Styles bei den Controls. Die Groupboxes sind zwar alle gesubclassed, aber auch wenn ich mal nicht subclasse ändert sich nichts am Problem. (Ne Nebenfrage: Muss man Groupboxes subclassen, um die COMMAND-Messages der Controls auf ihnen abzufangen? Weil ohne Subclassen werden die Messages der Controls auf dem Groupbox zur PROC der Groupboy geschickt und nicht an mein Hauptprogramm.)

    Woran kann das liegen?

    Erst beim Weglassen der XP-Styles wird alles gut. (was natürlich inakzeptabel ist)

    Kann mir jemand helfen bitte?

    Gruß der Koelner



  • Wenn ich dich richtig verstehe, agieren deine Controls als Childs der Groupbox.

    Versuch mal die Controls als Childs des Hautpfensters einzurichten (Hauptfenster als Parent), dann musst du auch die Groupbox nicht subclassen.

    Des weiteren sollten sich deine Probleme mit der Darstellung dadurch eigentlich erledingen, ist zumindest bei mir so.

    Eine andere Möglichkeit wäre auch noch die Styles WS_CLIPCHILDREN, WS_CLIPSIBLINGS auszuprobieren. Mehr Infos gibts hier.

    Zerebus



  • Zerebus schrieb:

    Wenn ich dich richtig verstehe, agieren deine Controls als Childs der Groupbox.

    Versuch mal die Controls als Childs des Hautpfensters einzurichten (Hauptfenster als Parent), dann musst du auch die Groupbox nicht subclassen.

    Des weiteren sollten sich deine Probleme mit der Darstellung dadurch eigentlich erledingen, ist zumindest bei mir so.

    Eine andere Möglichkeit wäre auch noch die Styles WS_CLIPCHILDREN, WS_CLIPSIBLINGS auszuprobieren. Mehr Infos gibts hier.

    Zerebus

    Wenn ich die Controls als Childs des Hauptfensters wir alles richtig dargestellt. Dann muss ich aber auf den eigentlichen Nutzen der Groupbox-Controls verzichten, der bei mir darin besteht, ganze Control-Gruppen auf einmal einzublenden und unsichtbar zu machen.

    Das würden die Groupboxes ja aussschließlich dazu dienen, den Rahmen um die Controls zu zeichnen.
    Das ist ein Ausweichen keine richtige Lösung. Als Notlösung sicher gut aber ich will, wenns geht, ne richtige Lösung des Problems. Was machst du mit TabControls, wenn du Verschiedene Tabs mit vielen Controls drauf hast? Man kann doch nicht jedes von u.U. Hundert Controls manuell sichtbar/unsichtbar machen...

    Die von dir vorgeshclagenen Styles Clipchildren und Clipsiblings hab ich auch schon getestet. In diesem Falle helfen die nicht.

    Ich sollte das Problem vll. etwas besser beschreiben:

    Sagen wir mal, das Control hat die Dimensionen 30px * 120px (Button).
    Dann wird dieser Button in eine schwarze Fläche von 30px * 120px gemalt, aber,
    da die Ecken der XP-Buttons abgerundet sind, bleiben an den Ecken kleine hässliche schwarze Dreiecke / Linienreste sichtbar (schwarz). Wenn ich die XP-Styles abschalte, werden rechteckige un-abgerundete Buttons gezeichnet und diese füllen natürlich, da sie eine perfekt-rechteckige Form besitzen, die schwarze Fläche des buttons komplett aus, sodass alles passt.

    Leider kann man in diesem Forum keine Bilder einfügen. Sonst würde ich Screenshots zeigen.
    Ich denke die meisten haben verstanden, was ich meine.

    Weis jemand, wie man das Problem löst? Irgendiwe muss es ja lösbar sein, da es viele Programme gibt, die Tab-Controls benutzen, die hunderte Controls auf sich tragen...

    Gruß Koelner



  • Also, wenn ich mit TabControls arbeite, dann verwende ich z.B. einen Dialog, oder ein anderes "normales" Fenster, also keine Control, wie z.B. eine Groupbox.
    Das setzte ich dann als Child des Hauptfensters, und da kommen dann alle Controls drauf, die in diesem Tab angezeigt werden sollen.
    Ist der Tab nicht sichtbar, blende ich das Fenster einfach aus.

    Wichtig dabei, du musst für das Fenster den Style WS_CILD verwenden. Ich war manchmal etwas dusselig und hatte ihn vergessen und hab mich gewundert warum es nicht funktioniert. 😉

    Hoffe das hilft.

    Zerebus



  • Danke für deine Antworten. :~)

    Ich hab in meiner Tab-Controls-Anwendung damals Groupboxes benutzt.^^
    Beim klicken auf die Tabs wurden verschiedene Groupboxes angezeigt / ausgeblendet.

    Ich werde jetzt testen, ob die Controls auf Dialogfenstern richtig gezeichnet werden.

    Wenn klappt, setz ich dann als Child des Hauptfensters viele Dialogfenster, auf denen dann Groupboxes und die andern Controls als Childs der Dialogfenster sitzen.

    Dennoch will ich gesagt haben, dass ich mit der Lösung nicht zufrieden bin (wir wissen nicht einmal obs klapen wird..)
    Es muss doch nen eleganten Weg geben, Controls auf Controls zu zeichnen...

    MfG



  • Koelner schrieb:

    Leider kann man in diesem Forum keine Bilder einfügen. Sonst würde ich Screenshots zeigen.

    Alternativ könntest du z.B. deine Screenshots bei ImageShack hochladen.



  • Koelner schrieb:

    Dennoch will ich gesagt haben, dass ich mit der Lösung nicht zufrieden bin (wir wissen nicht einmal obs klapen wird..)
    Es muss doch nen eleganten Weg geben, Controls auf Controls zu zeichnen...

    Das ist doch ein eleganter Weg. Vor allem besser als das was du machst, das ist nämlich keine schöne Lösung, deswegen gehts auch nicht. Guck doch mal was Mircosoft vorschlägt: Using Tab Controls


Anmelden zum Antworten