gpt4 book ai didi

delphi - 如何将 DECLARE_HANDLE 和后续常量从 windef.h 转换为 Delphi

转载 作者:行者123 更新时间:2023-12-03 14:42:52 25 4
gpt4 key购买 nike

以下代码来自 Windows 10 周年更新 SDK。我需要常量句柄才能在 Delphi 中使用 API,因为截至目前,这些 header 尚未包含在 Delphi 中。

  DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);

#define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1)
#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3)

当我使用GetThreadDpiAwarenessContext时在各种 DPI 场景中,我了解了 NativeUInts 的值是什么:

  DPI_AWARENESS_CONTEXT_UNAWARE = 16;  
DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = 17;
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = 18;

但我想 100% 确定这些值是面向 future 的。他们在 SetThreadDpiAwarenessContext 工作调用并具有预期的效果,但我不清楚这些值是如何得出的。除了显式整数声明之外,我无法在 Delphi 中复制产生这些结果的 header 构造。

最佳答案

用于SetThreadDpiAwarenessContext你应该将其声明为

type
DPI_AWARENESS_CONTEXT = type THandle;
const
DPI_AWARENESS_CONTEXT_UNAWARE = DPI_AWARENESS_CONTEXT(-1);
DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = DPI_AWARENESS_CONTEXT(-2);
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE= DPI_AWARENESS_CONTEXT(-3);

但是当你收到 GetThreadDpiAwarenessContext 的回复时您需要使用 GetAwarenessFromDpiAwarenessContext收到的值并将其与 DPI_AWARENESS 进行比较枚举。

您无法直接比较 DPI_AWARENESS_CONTEXT,因为它包含多条信息,并且 Microsoft 将来可能会更改它。

关于delphi - 如何将 DECLARE_HANDLE 和后续常量从 windef.h 转换为 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com