【发布时间】:2019-01-22 06:12:46
【问题描述】:
我需要在我的应用中使用这个 API 调用:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setdialogdpichangebehavior
BOOL SetDialogDpiChangeBehavior(
HWND hDlg,
DIALOG_DPI_CHANGE_BEHAVIORS mask,
DIALOG_DPI_CHANGE_BEHAVIORS values
);
typedef enum DIALOG_DPI_CHANGE_BEHAVIORS {
DDC_DEFAULT ,
DDC_DISABLE_ALL ,
DDC_DISABLE_RESIZE ,
DDC_DISABLE_CONTROL_RELAYOUT
} ;
文档说mask 是“指定要更改的标志子集的掩码”。 values 是“为指定的标志子集设置的期望值”。在评论中它说“为了可扩展性,DIALOG_DPI_CHANGE_BEHAVIORS 被建模为一组表示单独行为的位标志。这个函数遵循典型的两参数设置标志的方法,其中掩码指定要更改的标志的子集。”
我找不到任何显示此方法实际调用方式的代码示例。如果函数只有一个 flags 参数,这对我来说很有意义,但我不知道如何使用这两个 mask 和 values 参数来处理它。
【问题讨论】:
-
“如果函数只有一个
flags参数,这对我来说很有意义” - 该假设函数如何区分应该重置的位和一点不应该完全改变?传递单个值(如0)是不够的。您需要一个掩码来消除这些操作之间的歧义。 -
@IInspectable 我不确定为什么我需要区分在这种情况下应该重置的位和不应该更改的位。我只想在我的应用程序中明确设置表单的行为,我不关心之前设置的任何内容。或者也许我是,我不知道 - 这就是为什么我说“这对我有意义”而不是“它会更好”。
-
它是全新的,样品需要一段时间,甚至文档都是错误的。可能是什么让你失望,枚举实际上并没有这样声明。它们具有真正的位掩码值,分别为 0、1、2 和 4。
-
I just want to explicitly set the behavior of a form in my app and I'm not concerned with whatever it was set to before在这种情况下设置mask = DDC_DEFAULT | DDC_DISABLE_ALL | DDC_DISABLE_RESIZE | DC_DISABLE_CONTROL_RELAYOUT并且您有所需的行为。 -
它需要 Windows 10 版本 1703 或更新版本,并且至少需要 Windows SDK 10 v1703。如果您必须支持早期的Windows版本,请使用
GetProcAddress动态获取函数地址。