Farben im Fenster



  • Alle quatsch...

    guck dir mal die Nachricht:

    WM_CTLCOLOREDIT an, glaube das is es was du suchst...

    MfG CodeFinder



  • Fürs Fenster:

    HBRUSH hBkg = CreateSolidBrush (RGB (0, 0, 0));
    [...]
    wndclass.hbrBackground = hBkg;
    

    Fürs Editfeld:

    LRESULT CALLBACK WndProc (HWND hWnd1, UINT message, WPARAM wParam, LPARAM lParam)
    {	
        static HBRUSH hBrushEdit;
    	static HWND hEdit;
    
    	switch (message)
        {
    		case WM_CREATE:
    			  hBrushEdit = (HBRUSH) CreateSolidBrush (RGB ( 0, 0, 0));
    			  hEdit = CreateWindow ("Edit", NULL, WS_VISIBLE | WS_CHILD, 100, 75, 130, 17, hWnd1, (HMENU)1, NULL, NULL);
    		return 0;
    
    		case WM_CTLCOLOREDIT:
                  SetBkMode ((HDC) wParam, TRANSPARENT);
            return (LONG) hBrushEdit;
    
    		case WM_DESTROY:
                  DeleteObject (hBrushEdit); //EDIT
    			  PostQuitMessage (0);
    		return 0;
    	}
    
        return DefWindowProc (hWnd1, message, wParam, lParam);
    }
    

    Mfg Ominion



  • Hihi, ...

    1. Sag ich doch 😉
    2. DeleteObject() nicht vergessen !!!! ⚠

    MfG CodeFinder



  • Stimmt!
    Einfach bei WM_DESTROY noch:

    DeleteObject (hBrushEdit);
    

    mitreinnehmen (aber vor PostQuitMessage (0)!)

    Mfg Ominion



  • alles klar das hab ich verstanden 😉

    jetzt hab nur noch ein problem:
    wenn ich den schrifthintergrund im editfeld trasbarent mache, klappt es irgendwie mit dem löschen im editfeld nich mehr! wenn man auf backspace drückt, wandert der cursor einfach eine position nach rechts ohne das zeichen zu löschen. bis man dann gans am anfang is, dann wird alles gelöscht.

    dann noch ne frage:
    wie heißt die nachricht WM_CTLCOLOREDIT für read only felder? und kann man auch die farbe von einem menü ändern?



  • N1dda schrieb:

    wenn ich den schrifthintergrund im editfeld trasbarent mache, klappt es irgendwie mit dem löschen im editfeld nich mehr! wenn man auf backspace drückt, wandert der cursor einfach eine position nach rechts ohne das zeichen zu löschen. bis man dann gans am anfang is, dann wird alles gelöscht.

    Kann da auch nicht konkret helfen, aber ich denke, du müsstest das darunterliegende Fenster irgendwie dazu auffordern, sich neu zu zeichnen...

    N1dda schrieb:

    wie heißt die nachricht WM_CTLCOLOREDIT für read only felder? und kann man auch die farbe von einem menü ändern?

    MSDN-Library schrieb:

    Read-only or disabled edit controls do not send the WM_CTLCOLOREDIT message; instead, they send the WM_CTLCOLORSTATIC message.



  • hab noch ein neues problem:
    hab ein editfeld, an das immer wieder neuer text angehängt wird.
    benutzt man jetzt die scrollleiste, um text zu sehen der nicht mehr im sichtbaren bereich des editfeldes liegt, verschmiert der text irgendwie. soll heißen:
    es werden mehrere zeilen übereinander geschrieben oder so.



  • Für Backspace & Co. hast du es jetzt hinbekommen?! Wenn ja, musst du das evtl. einfach beim Scrollen auch aufrufen...



  • mh bis jetzt hab ich einfach den text-hintergrund wieder nicht trasbarent gemacht, dann gings.
    dann trit auch das mit dem übernander geschriebenen text beim scrollen nicht auf.

    welche nachricht kommt den wenn im einem editfeld gescrollt wird?
    und wie kann ich windows noch mal veranlassen ein fenster neu zuzeichnen?



  • N1dda schrieb:

    welche nachricht kommt den wenn im einem editfeld gescrollt wird?

    EN_HSCROLL bzw. EN_VSCROLL

    N1dda schrieb:

    und wie kann ich windows noch mal veranlassen ein fenster neu zuzeichnen?

    http://msdn.microsoft.com/library/en-us/gdi/pantdraw_6cyp.asp


Anmelden zum Antworten