我需要在我的应用程序中使用此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
} ;
Run Code Online (Sandbox Code Playgroud)
文档说这mask是"一个掩码,指定要更改的标志子集".并且values是"为指定的标志子集设置的期望值".在评论中,它说"为了可扩展性,DIALOG_DPI_CHANGE_BEHAVIORS被建模为一组表示不同行为的位标志.该函数遵循典型的双参数方法设置标志,其中掩码指定要更改的标志的子集."
我找不到任何显示如何实际调用此方法的代码示例.如果功能只是有一个flags参数,它将使感给我,但我不知道如何使用这两种处理它mask和valuesPARAMS.
文档中有bug.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;
Run Code Online (Sandbox Code Playgroud)
除了DDC_DEFAULT这些是简单的比特标志,可以用|.
SetDialogDpiChangeBehavior(
hwnd,
DDC_DISABLE_RESIZE | DDC_DISABLE_CONTROL_RELAYOUT,
DDC_DISABLE_CONTROL_RELAYOUT );
Run Code Online (Sandbox Code Playgroud)
基本上这适用于:
flags = ( flags & ~mask ) | ( values & mask );
Run Code Online (Sandbox Code Playgroud)
如果mask位等于0则保留旧位值flags,如果mask位相等flags则根据位改变1 位values.
要设置flag位设置在这两个位mask和values.要清除您设置的位,mask但不要将其设置为values.
// Sets DDC_DISABLE_RESIZE bit
SetDialogDpiChangeBehavior( hwnd, DDC_DISABLE_RESIZE, DDC_DISABLE_RESIZE );
// Clears DDC_DISABLE_RESIZE bit
SetDialogDpiChangeBehavior( hwnd, DDC_DISABLE_RESIZE, 0 );
// Sets DDC_DISABLE_CONTROL_RELAYOUT and clears DDC_DISABLE_RESIZE
SetDialogDpiChangeBehavior(
hwnd,
DDC_DISABLE_RESIZE | DDC_DISABLE_CONTROL_RELAYOUT,
DDC_DISABLE_CONTROL_RELAYOUT );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |