Geoff Chappell, Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED
The basic window styles from when Windows first appeared (as a DOS program) were already insufficient long before Windows became its own operating system. Arguably the most of what distinguishes CreateWindowEx from plain old CreateWindow is the provision for extended styles. The WND structure has from the start held these as bit fields in union with a ULONG that may have been named dwExStyle at first but is now known to be named ExStyle.
The extended window styles are documented, of course, and they have always been readily accessible, to specify, query and change. Before version 5.0, the GWL_EXSTYLE case of the documented USER32 function GetWindowLong simply retrieved the whole ExStyle from the WND. Since version 3.51, however, the ExStyle has contained bits that are not extended window styles. Version 5.0 started masking away the bits that likely would have been in state or state2 had there been room. Indeed, the “state” bits that version 3.51 stuffed into the high byte of ExStyle actually did move to state2 as its first bits when it was introduced for version 4.0.
Microsoft’s names and definitions for the bit fields in ExStyle are known from symbol files for WIN32K.SYS from Windows 7 only.
The USEREXTS and USERKDX debugger extensions, as supplied in the Device Driver Kit (DDK) for Windows NT 3.51 through to Windows 2000 but apparently not since, have names that likely reproduce macros from Microsoft’s headers. These name a sort of index into the set of window flags that comprises the state, state2, ExStyle and style members considered as an array of bytes. The high byte in each such 16-bit index is the byte offset to the bit and the low byte is the bit mask within that byte. Where a name is known from this source, the versions in parentheses are of the debugger extension.
I may some day follow up which of these bit fields and window flags persist to later versions (and whether they are credible for the stated versions).
Mask | Index | Bit Field Definition (6.1) | Window Flag Name (3.51 to 5.0) | Extended Window Style | Versions | Remarks |
---|---|---|---|---|---|---|
0x00000001 | 0x0401 (3.10 to 3.51); 0x0801 |
INT bWS_EX_DLGMODALFRAME : 1; |
WEFDLGMODALFRAME | WS_EX_DLGMODALFRAME | ||
0x00000002 | 0x0402 (3.10 to 3.51); 0x0802 |
WEFDRAGOBJECT | ||||
INT bUnused1 : 1; |
||||||
0x00000004 | 0x0404 (3.10 to 3.51); 0x0804 |
INT bWS_EX_NOPARENTNOTIFY : 1; |
WEFNOPARENTNOTIFY | WS_EX_NOPARENTNOTIFY | ||
0x00000008 | 0x0408 (3.10 to 3.51); 0x0808 |
INT bWS_EX_TOPMOST : 1; |
WEFTOPMOST | WS_EX_TOPMOST | ||
0x00000010 | 0x0410 (3.10 to 3.51); 0x0810 |
INT bWS_EX_ACCEPTFILE : 1; |
WEFACCEPTFILES | WS_EX_ACCEPTFILES | ||
0x00000020 | 0x0420 (3.10 to 3.51); 0x0820 |
INT bWS_EX_TRANSPARENT : 1; |
WEFTRANSPARENT | WS_EX_TRANSPARENT | ||
0x00000040 | 0x0440 (3.10 to 3.51); 0x0840 |
INT bWS_EX_MDICHILD : 1; |
WEFMDICHILD | WS_EX_MDICHILD | ||
0x00000080 | 0x0880 |
INT bWS_EX_TOOLWINDOW : 1; |
WEFTOOLWINDOW (4.0 to 5.0) | WS_EX_TOOLWINDOW | ||
0x00000100 | 0x0901 |
INT bWS_EX_WINDOWEDGE : 1; |
WEFWINDOWEDGE (4.0 to 5.0) | WS_EX_WINDOWEDGE | ||
0x00000200 | 0x0902 |
INT bWS_EX_CLIENTEDGE : 1; |
WEFCLIENTEDGE (4.0 to 5.0) | WS_EX_CLIENTEDGE | ||
0x0903 | WEFEDGEMASK (4.0 only) | |||||
0x00000400 | 0x0904 |
INT bWS_EX_CONTEXTHELP : 1; |
WEFCONTEXTHELP (4.0 to 5.0) | WS_EX_CONTEXTHELP | ||
0x00000800 | 0x0908 |
INT bMakeVisibleWhenUnghosted : 1; |
||||
0x00001000 | 0x0910 |
INT bWS_EX_RIGHT : 1; |
WEFRIGHT (4.0 to 5.0) | WS_EX_RIGHT | ||
0x00002000 | 0x0920 |
INT bWS_EX_RTLREADING : 1; |
WEFRTLREADING (4.0 to 5.0) | WS_EX_RTLREADING | ||
0x00004000 | 0x0940 |
INT bWS_EX_LEFTSCROLLBAR : 1; |
WEFLEFTSCROLL (4.0 to 5.0) | WS_EX_LEFTSCROLLBAR | ||
INT bUnused2 : 1; |
||||||
0x00010000 | 0x0A01 |
INT bWS_EX_CONTROLPARENT : 1; |
WEFCONTROLPARENT (4.0 to 5.0) | WS_EX_CONTROLPARENT | ||
0x00020000 | 0x0A02 |
INT bWS_EX_STATICEDGE : 1; |
WEFSTATICEDGE (4.0 to 5.0) | WS_EX_STATICEDGE | ||
0x00040000 | 0x0A04 |
INT bWS_EX_APPWINDOW : 1; |
WEFAPPWINDOW (4.0 to 5.0) | WS_EX_APPWINDOW | ||
0x00080000 | 0x0A08 |
INT bWS_EX_LAYERED : 1; |
WEFLAYERED (5.0) | WS_EX_LAYERED | 5.0 and higher? | |
0x00100000 | 0x0A10 |
INT bWS_EX_NOINHERITLAYOUT : 1; |
WS_EX_NOINHERITLAYOUT | 5.0 and higher? | ||
0x00200000 | 0x0A20 | WFSMQUERYDRAGICON (4.0 only) | 4.0 only | next as 0x20000000 in state2 | ||
INT bUnused3 : 1; |
5.0 to 6.1 | |||||
WS_EX_NOREDIRECTIONBITMAP | 6.2 and higher | |||||
0x00400000 | 0x0A40 |
INT bWS_EX_LAYOUTRTL : 1; |
WS_EX_LAYOUTRTL | 5.0 and higher? | ||
0x00800000 | 0x0A80 | WFSHELLHOOKWND (4.0 only) | 4.0 only | next as 0x40000000 in state2 | ||
INT bWS_EX_NOPADDEDBORDER : 1; |
||||||
0x01000000 | 0x0701 (3.51) | WFPAINTSENT (3.51 only) | 3.51 only | next as 0x00000001 in state2 | ||
INT bUnused4 : 1; |
||||||
0x02000000 | 0x0702 (3.51); 0x0B02 |
WFDONTVALIDATE (3.51 only) | 3.51 only | next as 0x00000002 in state2 | ||
INT bWS_EX_COMPOSITED : 1; |
WS_EX_COMPOSITED | 5.1 and higher | ||||
0x04000000 | 0x0704 (3.51); 0x0B04 |
WFSTARTPAINT (3.51 only) | 3.51 only | next as 0x00000004 in state2 | ||
INT bUIStateActive : 1; |
||||||
0x08000000 | 0x0B08 |
INT bWS_EX_NOACTIVATE : 1; |
WEFNOACTIVATE (5.0) | WS_EX_NOACTIVATE | 5.0 and higher | |
0x10000000 | 0x0B10 |
INT bWS_EX_COMPOSITEDCompositing : 1; |
||||
0x20000000 | 0x0B20 |
INT bRedirected : 1; |
||||
0x40000000 | 0x0B40 |
INT bUIStateKbdAccelHidden : 1; |
||||
0x80000000 | 0x0B80 |
INT bUIStateFocusRectHidden : 1; |