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,