给定 IntPtr 句柄,更改 Window 背景颜色
Posted
技术标签:
【中文标题】给定 IntPtr 句柄,更改 Window 背景颜色【英文标题】:Change a Window background color, given a IntPtr handle 【发布时间】:2010-09-16 19:42:40 【问题描述】:在 c# 中,我有一个窗口句柄(一个 IntPtr),我想更改该窗口的背景颜色。我该怎么做?
我可以像这样获取该句柄的 GDI 图形对象:
图形图形 = Graphics.FromHwnd(theHandle);
所以我应该能够以某种方式改变背景颜色?
我还想确保即使在窗口移动、调整大小、重绘等之后背景颜色仍然存在。
【问题讨论】:
【参考方案1】:我认为没有办法直接使用本机 (C/C++) 窗口执行此操作(即没有与 Control.BackColor 类似的本机 GDI)。
从 Reflector 中可以看出,Control 使用 BackColor 属性来响应各种 WM_CTLCOLOR* 消息(例如 WM_CTLCOLOREDIT)。因此,如果您想更改本机控件的背景颜色,您可能需要对该窗口进行子类化并响应相同的消息。如果本机窗口不是控件,您仍需要对窗口进行子类化,但您必须改为处理 WM_PAINT 或 WM_ERASEBKGND。
请尝试this thread on programmersheaven.com 获取有关如何从 C# 子类化本机窗口的建议。
【讨论】:
【参考方案2】:使用 Control.FromHandle 方法创建一个控件类,然后设置属性。
类似...
控制 someControl = Control.FromHandle(myHandle); someControl.BackColor = SystemColors.Black;【讨论】:
这不起作用 - 可能是因为我拥有的句柄不是 .Net 创建的窗口(所以 someControl 返回 null)以上是关于给定 IntPtr 句柄,更改 Window 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章