2

在 c# 中,我有一个窗口句柄(一个 IntPtr ),我想更改该窗口的背景颜色。我怎样才能做到这一点?

我可以像这样获取该句柄的 GDI 图形对象:

图形图形 = Graphics.FromHwnd(theHandle);

所以我应该能够以某种方式改变背景颜色?

我还想确保即使在窗口移动、调整大小、重新绘制等之后背景颜色仍然存在。

4

2 回答 2

2

我认为没有办法直接使用本机 (C/C++) 窗口(即没有与 Control.BackColor 类似的本机 GDI)来执行此操作。

从 Reflector 中看,Control 似乎使用 BackColor 属性来响应各种WM_CTLCOLOR * 消息(例如 WM_CTLCOLOREDIT)。因此,如果您想更改本机控件的背景颜色,您可能需要对该窗口进行子类化并响应相同的消息。如果本机窗口不是控件,您仍然需要对窗口进行子类化,但您必须改为处理WM_PAINTWM_ERASEBKGND

试试programmersheaven.com 上的这个线程,以获取有关如何从C# 子类化本机窗口的建议。

于 2008-10-13T16:23:51.367 回答
0

使用 Control.FromHandle 方法创建一个控件类,然后设置属性。

就像是...

    控制 someControl = Control.FromHandle(myHandle);
    someControl.BackColor = SystemColors.Black;
于 2008-10-13T02:33:33.367 回答