【问题标题】:Change a Window background color, given a IntPtr handle给定 IntPtr 句柄,更改 Window 背景颜色
【发布时间】:2010-09-16 19:42:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# .net windows graphics gdi


    【解决方案1】:

    我认为没有办法直接使用本机 (C/C++) 窗口执行此操作(即没有与 Control.BackColor 类似的本机 GDI)。

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

    请尝试this thread on programmersheaven.com 获取有关如何从 C# 子类化本机窗口的建议。

    【讨论】:

      【解决方案2】:

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

      类似...

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

      【讨论】:

      • 这不起作用 - 可能是因为我拥有的句柄不是 .Net 创建的窗口(所以 someControl 返回 null)
      猜你喜欢
      • 1970-01-01
      • 2013-08-08
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多