2 Stimmen

Ändern der Hintergrundfarbe eines Fensters mit einem IntPtr-Handle

In c#, ich habe ein Handle zu einem Fenster (ein IntPtr), ich möchte die Hintergrundfarbe dieses Fensters ändern. Wie kann ich dies tun?

Ich kann das GDI-Grafikobjekt für dieses Handle wie folgt abrufen:

Graphics graphics = Graphics.FromHwnd(theHandle);

Ich sollte also irgendwie in der Lage sein, die Hintergrundfarbe von diesem zu ändern?

Außerdem möchte ich sicherstellen, dass die Hintergrundfarbe auch dann erhalten bleibt, wenn das Fenster verschoben, in der Größe verändert, neu gezeichnet usw. wird.

2voto

Charlie Punkte 42390

Ich glaube nicht, dass es eine Möglichkeit gibt, dies direkt mit einem nativen (C/C++) Fenster zu tun (d.h. es gibt keine native GDI-Analog zu Control.BackColor).

In Reflector sieht es so aus, als ob das Control die Eigenschaft BackColor verwendet, um auf die verschiedenen WM_CTLCOLOR * Meldungen (z. B. WM_CTLCOLOREDIT). Wenn Sie also die Hintergrundfarbe eines nativen Steuerelements ändern wollen, müssen Sie dieses Fenster möglicherweise unterklassifizieren und auf dieselbe Nachricht reagieren. Handelt es sich bei dem nativen Fenster nicht um ein Steuerelement, müssen Sie das Fenster immer noch subklassifizieren, aber Sie müssen die WM_PAINT o WM_ERASEBKGND stattdessen.

Versuchen Sie dieser Thread auf programmersheaven.com für einen Vorschlag, wie man ein natives Fenster von C# aus unterklassifizieren kann.

0voto

Kepboy Punkte 3593

Erstellen Sie eine Steuerklasse mit der Methode Control.FromHandle und legen Sie dann die Eigenschaft fest.

Etwas wie...

    Control someControl = Control.FromHandle(myHandle);
    someControl.BackColor = SystemColors.Black;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X