2008-10-13 55 views
2

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

我能得到GDI图形对象对于处理像这样:

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

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

我也希望确保即使在移动窗口后的背景颜色保持,调整大小,重画等

回答

0

与Control.FromHandle方法创建一个控制类,然后设置属性。

喜欢的东西...

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

这不起作用 - 可能是因为我拥有的句柄不是在.Net创建的窗口中(所以someControl返回null) – zadam 2008-10-13 02:53:43

2

我不认为有一种方式直接与原生(C/C++)窗口,要做到这一点(即不存在原生GDI模拟到Control.BackColor) 。

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

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

相关问题