【发布时间】:2016-05-27 02:30:07
【问题描述】:
此问题适用于所有 Windows 专家。
我正在研究获取包含窗口非客户区的设备上下文 (DC) 的不同方式(使用 Windows API)
我知道两种方法:
- GetWindowDC() - 为包括非客户区在内的整个窗口返回一个 DC。
-
GetDCEx() - 如果您传递
DCX_WINDOW的标志,您将获得一个带有非客户区的 DC。
还有其他方法可以在非客户区获得 DC 吗?
【问题讨论】:
-
这两个选项不足有什么特别的原因吗?我不熟悉任何其他选项。
-
为什么是 C# 和 VB6 标签? 2 种不同的语言
-
@andlabs - 我为我的应用程序使用挂钩,我需要捕获所有正在检索非客户区的事件。
-
恐怕这可能是一场失败的战斗...您考虑过 CS_CLASSDC、CS_OWNDC、CS_PARENTDC 类样式吗?此外,调用 BeginPaint() 时,在 PAINTSTRUCT 中返回 DC 的句柄。此外,还可以使用低级 API 通过进程的 GDI 表找到它。简而言之 - 我怀疑人们可以列举获得 HDC 的每一种方法。
-
@VladFeinstein:从
BeginPaint返回的 DC 被剪裁到客户区。它不能用于渲染非客户区。除非应用程序使用 DWM 魔法。或者在其客户区内模仿非客户区。