给定 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 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

IntPtr

初识IntPtr

wpf window窗口中嵌入一个window窗口

C# 句柄指针的 JFrame 等效项

WPF腾讯视频通话开发

Delphi Window 消息大全使用详解