在 c# 中,我有一个窗口句柄(一个 IntPtr ),我想更改该窗口的背景颜色。我怎样才能做到这一点?
我可以像这样获取该句柄的 GDI 图形对象:
图形图形 = Graphics.FromHwnd(theHandle);
所以我应该能够以某种方式改变背景颜色?
我还想确保即使在窗口移动、调整大小、重新绘制等之后背景颜色仍然存在。
我认为没有办法直接使用本机 (C/C++) 窗口(即没有与 Control.BackColor 类似的本机 GDI)来执行此操作。
从 Reflector 中看,Control 似乎使用 BackColor 属性来响应各种WM_CTLCOLOR * 消息(例如 WM_CTLCOLOREDIT)。因此,如果您想更改本机控件的背景颜色,您可能需要对该窗口进行子类化并响应相同的消息。如果本机窗口不是控件,您仍然需要对窗口进行子类化,但您必须改为处理WM_PAINT或WM_ERASEBKGND。
试试programmersheaven.com 上的这个线程,以获取有关如何从C# 子类化本机窗口的建议。
使用 Control.FromHandle 方法创建一个控件类,然后设置属性。
就像是...
控制 someControl = Control.FromHandle(myHandle); someControl.BackColor = SystemColors.Black;