Winapi 如何检查十六进制窗口样式是否存在?

Winapi 如何检查十六进制窗口样式是否存在?,winapi,window-style,Winapi,Window Style,我有一个关于窗口样式十六进制的问题 据介绍,0x16CF0000包含WS_VISIBLE、WS_CLIPSIBLINGS、WS_CLIPCHILDREN、WS_CAPTION、WS_SYSMENU、WS_THICKFRAME、WS_MINIMIZEBOX、和WS_MINIMIZEBOX 如何检查窗样式组合中是否存在窗样式?例如,我想检查WS_BORDER(0x00800000)样式是否存在于0x16CF0000中。标准格式是: if(0x16CF0000 & WS_BORDER) if

我有一个关于窗口样式十六进制的问题

据介绍,
0x16CF0000
包含
WS_VISIBLE
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
WS_CAPTION
WS_SYSMENU
WS_THICKFRAME
WS_MINIMIZEBOX
、和
WS_MINIMIZEBOX

如何检查窗样式组合中是否存在窗样式?例如,我想检查
WS_BORDER
0x00800000
)样式是否存在于
0x16CF0000

中。标准格式是:

if(0x16CF0000 & WS_BORDER)
if (value & WS_BORDER != 0) {  }

&将按位执行,并且仅当设置了WS_BORDER的位时,结果才会为非零

检查
如果((0x16CF0000 | WS_BORDER)==0x16CF0000)

基本上,您可以只检查
您的值和WS_BORDER=WS_BORDER

不幸的是,样式标志中的一些位被使用了两次,这取决于上下文,因此例如
WS_TABSTOP
WS_MAXIMIZEBOX
都是0x00010000,因此它取决于上下文(对象的位置,可能还有其他标志)窗口是否真的具有该属性(显然,子控件不能有最大化框,父控件不能有制表位)


在过去,我使用了定义这些内容的头文件,并编写了一个脚本将其转换为代码,该代码将使用标志所在的变量,并将其转换为包含常量符号名的文本字符串

解析#defines在我使用类似AWK的东西做这件事的时候是相当容易的。现在,如果我在当时使用的机器上有Python,或者Python不可用,我会回到AWK

WS_OVERLAPPED      = 0x00000000,
WS_POPUP           = 0x80000000,
WS_CHILD           = 0x40000000,
WS_MINIMIZE        = 0x20000000,
WS_VISIBLE         = 0x10000000,
WS_DISABLED        = 0x08000000,
WS_CLIPSIBLINGS    = 0x04000000,
WS_CLIPCHILDREN    = 0x02000000,
WS_MAXIMIZE        = 0x01000000,
WS_BORDER          = 0x00800000,
WS_DLGFRAME        = 0x00400000,
WS_VSCROLL         = 0x00200000,
WS_HSCROLL         = 0x00100000,
WS_SYSMENU         = 0x00080000,
WS_THICKFRAME      = 0x00040000,
WS_GROUP           = 0x00020000,
WS_TABSTOP         = 0x00010000,

WS_MINIMIZEBOX     = 0x00020000,
WS_MAXIMIZEBOX     = 0x00010000,

WS_CAPTION         = WS_BORDER | WS_DLGFRAME,
WS_TILED           = WS_OVERLAPPED,
WS_ICONIC          = WS_MINIMIZE,
WS_SIZEBOX         = WS_THICKFRAME,
WS_TILEDWINDOW     = WS_OVERLAPPEDWINDOW,

WS_OVERLAPPEDWINDOW    = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | 
                         WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
WS_POPUPWINDOW     = WS_POPUP | WS_BORDER | WS_SYSMENU,
WS_CHILDWINDOW     = WS_CHILD,