在c#中,我有一个窗口句柄(IntPtr),我想改变那个窗口的背景颜色。我怎么能这样做?
我可以像这样获得该句柄的GDI图形对象:
Graphics graphics = Graphics.FromHwnd(theHandle);
所以我应该以某种方式改变背景颜色吗?
我还希望确保即使在窗口移动,调整大小,重新绘制等之后背景颜色仍然存在。
答案 0 :(得分:2)
我认为没有办法直接使用本机(C / C ++)窗口(即没有Control.BackColor的本机GDI模拟)。
从查看Reflector看来,Control使用BackColor属性来响应各种WM_CTLCOLOR *消息(例如WM_CTLCOLOREDIT)。因此,如果要更改本机控件的背景颜色,则可能需要子类化该窗口并响应该相同的消息。如果本机窗口不是控件,您仍然需要对窗口进行子类化,但您必须处理WM_PAINT或WM_ERASEBKGND。
尝试this thread on programmersheaven.com以获取有关如何从C#继承本机窗口的建议。
答案 1 :(得分:0)
使用Control.FromHandle方法创建一个控件类,然后设置属性。
像...一样的东西。
Control someControl = Control.FromHandle(myHandle); someControl.BackColor = SystemColors.Black;