Fensterfarbe während der Laufzeit ändern



  • Ja, die Überschrift sagt alles.

    Ich kann zwar mit

    case WM_CTLCOLORSTATIC:
    

    die Farben beim Erstellen des Fensters ändern, jedoch hätte ich gerne auch die Möglichkeit, die Farben als Reaktion auf einen Klick in einer Listbox

    case LBN_SELCHANGE:
    

    zu ändern.

    Wie geht das? Es müsste doch irgendwie über SendMessage möglich sein, oder nicht?

    Danke 🙂


  • Mod

    Nein! Das geht nur mit Ownerdraw.

    Ich würde Dir raten auf List Views umzusteigen und Custom-Draw (NM_CUSTOMDRAW) zu verwenden. Das geht mit einem List View weitaus einfacher.



  • Was meinst du, was mit einem ListView einfacher geht? Hab mir die Listviews mal angeschaut und finde sie jetzt fürn Anfang doch ein wenig kompliziert. Habe erst vor ner Woche angefangen mich mit WinAPI zu beschäftigen.
    Nich dass du mich falsch verstehst, ich will nich die Listbox färben, sondern nur eine Information auslesen und dann anhand der Information irgendwas anderes färben.


  • Mod

    kellerkend schrieb:

    Nich dass du mich falsch verstehst, ich will nich die Listbox färben, sondern nur eine Information auslesen und dann anhand der Information irgendwas anderes färben.

    Ich habe Dich vollkommen richtig verstanden. Und ich bleibe bei meiner Antwort...



  • OK, dann andersrum: Habe ich richtig verstanden, dass laut diesem msdn-eintrag eine NM_CUSTOMDRAW Message nur von den dort aufgeführten Controls gesendet werden kann?

    Dazu hätte ich 2 Fragen: wenn mit der NM_CUSTOMDRAW Message ALLES im aktuellen Fenster gefärbt werden kann, warum kann diese Nachricht dann nur von bestimmten Controls gesendet werden?

    Ich lese bei msdn, dass NM_CUSTOMDRAW über sendmessage gesendet wird. Sendmessage kann ich doch aber von überall aus senden, was hat es dann mit den dort aufgeführten Controls auf sich?


  • Mod

    Diese Nachricht wird nur von den Windows Common-Controls versendet! Siehe MSDN, deshlab habe ich Dir das ListView empfohlen. Eben nicht von anderen, wie z.B. ListBox!

    Das Problem ist das die Nachricht "von" einem Control gesendet werden muss an "Dich", nur so könnte sie auch das Control berücksichtigen.


Anmelden zum Antworten