我需要在我的应用中使用此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
参数来处理它。
答案 0 :(得分:5)
文档中有错误。 DIALOG_DPI_CHANGE_BEHAVIORS
中的c:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winuser.h
定义:
typedef enum DIALOG_DPI_CHANGE_BEHAVIORS {
DDC_DEFAULT = 0x0000,
DDC_DISABLE_ALL = 0x0001,
DDC_DISABLE_RESIZE = 0x0002,
DDC_DISABLE_CONTROL_RELAYOUT = 0x0004,
} DIALOG_DPI_CHANGE_BEHAVIORS;
除了DDC_DEFAULT
之外,这些都是可以与|一起使用的简单位标志。
SetDialogDpiChangeBehavior(
hwnd,
DDC_DISABLE_RESIZE | DDC_DISABLE_CONTROL_RELAYOUT,
DDC_DISABLE_CONTROL_RELAYOUT );
基本上这是这样的:
flags = ( flags & ~mask ) | ( values & mask );
如果mask
位等于0,则保留flags
中的旧位值;如果mask
位等于1,则flags
位根据{{1 }}。
要设置values
位,请同时设置flag
和mask
中的位。要清除,请在values
中设置位,但不要在mask
中设置位。
values
答案 1 :(得分:1)
掩码:仅设置要更改的值,例如:Languageconnection conn = new Languageconnection();
conn.Contact_id = contact;
conn.Language_id = language;
conn.Mainlanguage = true;
_dao.AddObject(conn);
_dao.SaveChanges(SaveChangesOptions.PostOnlySetProperties);
。
值:包含新值。例如,如果值= 0,DDC_DISABLE_RESIZE | DDC_DISABLE_CONTROL_RELAYOUT
和DDC_DISABLE_RESIZE
将设置为0,则所有其他值保持不变。如果值= DDC_DISABLE_CONTROL_RELAYOUT
具有相同的掩码,则DDC_DISABLE_RESIZE
将设置为1,DDC_DISABLE_RESIZE
将设置为0。
另一个例子。如果要启用DDC_DISABLE_CONTROL_RELAYOUT
,请使用mask = DDC_DISABLE_RESIZE
,值DDC_DISABLE_RESIZE
。如果要禁用DDC_DISABLE_RESIZE
,请使用掩码DDC_DISABLE_RESIZE
,并将其值设置为0。
如果有帮助,则伪代码为:
DDC_DISABLE_RESIZE