EnableWindow(hwnd, FALSE) Farbe beibehalten?



  • Hallo,

    gibt es eine Möglichkeit, ein Fenster (speziell ein 'edit' - Control) auf disabled zu setzen, es aber weiterhin mit den 'normalen' Farben zeichnen zu lassen, also ohne daß es zB ausgegraut wird?


  • Mod

    Behandle WM_CTLCOLORSTATIC im Parent entsprechend. Wenn ein Edit Control ReadOnly bzw. disabled ist wird IMHO WM_CTLCOLORSTATIC für die Farbabfrage an das Parent gesendet.



  • Oder Du machst das mit Subclassing in einer eigenen CALLBACK-Funktion speziell für die Edit-Controls. Damit behälst Du alles im Griff.



  • Danke für die Antworten.
    Als Reaktion auf WM_CTLCOLORSTATIC einen HBRUSH zu liefern, ist prima! Ich hatte es bisher mit WM_CTLCOLOREDIT versucht, aber das funktioniert nur bei einem aktiven Fenster.
    Allerdings zeigt

    SetTextColor((HDC) wParam, RGB(0, 0, 0))
    

    nicht die erwünschte Wirkung, die Textfarbe wird grau ... 😕

    Die Sache mit dem Subclassing habe ich nicht verstanden. Meinst Du, ich solle dort das ganze Control selbst zeichnen?



  • Belli schrieb:

    Allerdings zeigt

    SetTextColor((HDC) wParam, RGB(0, 0, 0))
    

    nicht die erwünschte Wirkung, die Textfarbe wird grau ... 😕

    Irre ...

    SetBkColor((HDC) wParam, RGB(50, 50, 100));
    

    als Reaktion auf WM_CTLCOLORSTATIC funktioniert in dem disableten Edit-Control, SetTextColor aber nicht ...



  • Ja, ich hatte kürzlich das gleiche Problem. Warum setzt du es denn nicht einfach auf ReadOnly? Reicht das nicht?



  • _matze schrieb:

    Warum setzt du es denn nicht einfach auf ReadOnly? Reicht das nicht?

    Ich will das Control als reines Fließtext-Anzeigefeld benutzen. Wenn ich es auf ReadOnly setze, habe ich auch den Effekt, daß sich die Farben ändern. Außerdem läßt sich dann noch der Cursor hineinpositionieren.

    Vielleicht sollte ich einfach ein echtes Static-Control nehmen?!



  • Evtl. könnte ich einfach auf WM_SETFOCUS mit

    SetFocus ((HWND) wParam));
    

    reagieren?!


  • Mod

    Nein! Du musst nur einfach auf WM_NCHITTEST mit HTTRANSPARENT reagieren. und Du darfst nicht WS_TABSTOP setzen. Dann bekommt das Edit Control keienn Focus.

    Mal eine ganz andere Frage: Warum machst Du das mit dem Fließtext nicht in einem eigenen Control. Sample Code gibt es ja in CodeProject genug.



  • Okay.

    return (LRESULT) HTTRANSPARENT
    

    funktioniert, ebenso funktioniert

    SetFocus ((HWND) wParam));
    

    Vielen Dank für die Hilfe.
    Warum benutze ich kein eigenes Control?
    Mhm, ich hab noch nie ein ganzes Control programmiert. Ich dachte, es sei das Einfachste, ein Edit- oder ein Static-Control zu benutzen.
    Und - sorry - 'CodeProject' kenne ich gar nicht 😡



  • Dafür hat man ja auch Google erfunden. www.codeproject.com

    MfG SideWinder



  • lol.
    Nachdem ich den Begriff 'Codeprojekt' hier gelesen habe, hätte ich das sicher über Google gefunden. Ich wollte nur sagen, daß ich bisher noch nichts davon gehört hatte.

    Trotzdem danke schön für den Link. Hab's mal überflogen, es sieht ja wirklich sehr umfangreich aus ... Was nettes für trübe Winterabende 😉


  • Mod

    Ich würde davon absehen, erstmal den Focus zu bekommen um ihn anschließend zurück zu setzen.
    Beachte bitte das wParam==NULL sein kann!
    Beachte weiterhin, dass es evtl. unmöglich ist den Focus zurück zu setzen, weil sich das Fenster evtl. in Zerstörung befindet, oder gerade disabled wurde...



  • Tja ... woran man alles denken muß. So oberflächlich betrachtet, scheint es ja, daß das Edit den Focus nur durch Mausklicks (das war das, was ich verhindern wollte) oder evtl. noch durch Tab bekommen kann.

    Aber nach diesem Hinweis denke ich, daß die von Dir vorgeschlagene Methode, WM_NCHITTEST abzufangen, besser ist. Das einzige, was mich daran noch ein bißchen stört, ist, daß ich (noch) nicht genau verstehe, was da genau abgeht (HTTRANSPARENT?) - es stehen ein paar Sätze dazu im Petzold, aber so ganz habe ich das noch nicht durchdrungen, naja, kommt vielleicht noch ...

    Auf jeden Fall auch für diesen Hinweis noch mal ein Danke schön!


Anmelden zum Antworten