c# - 给定 IntPtr 句柄,更改窗口背景颜色

标签 c# .net windows graphics gdi

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

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

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

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

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

最佳答案

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

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

尝试 this thread on programmersheaven.com有关如何从 C# 继承 native 窗口的建议。

关于c# - 给定 IntPtr 句柄,更改窗口背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/196422/

相关文章:

windows - 获取固定驱动器列表

c# - 如何在 Linux 上的 asp.net 核心中捕获退出信号?

.net - 操作无效。从 SQL 服务器读取时连接已关闭错误

linux - Docker:无法运行存储在已安装卷中的 shell 脚本

.net - 在 .NET 中解析 IP 地址

c# - 如何在.net框架上使用vst sdk

Windows 应用程序 - DPI 问题

c# - EF 扩展每个案例的查询

c# - MVC 需要 TagHelper 使用 FluentValidation ASPNET Core

c# - 为什么在从 C# 应用程序调用时,在 f# 中实现的类型的行为与 C# 类型不同?