给定IntPtr句柄,更改Window背景颜色

时间:2008-10-13 00:46:29

标签: c# .net windows graphics gdi

在c#中,我有一个窗口句柄(IntPtr),我想改变那个窗口的背景颜色。我怎么能这样做?

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

Graphics graphics = Graphics.FromHwnd(theHandle);

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

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

2 个答案:

答案 0 :(得分:2)

我认为没有办法直接使用本机(C / C ++)窗口(即没有Control.BackColor的本机GDI模拟)。

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

尝试this thread on programmersheaven.com以获取有关如何从C#继承本机窗口的建议。

答案 1 :(得分:0)

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

像...一样的东西。

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