I am a bit puzzled by the SetWindowLong function, as described here:
Specifically, I cannot make sense of the offsets given for the argument nIndex. For example, GWL_USERDATA is -21 and GWL_EXSTYLE is -20. Since dwNewLong, the value being set, is long in each case, I would have expected the offsets all to be spaced at intervals of 4 bytes (-4, -8, -12 etc.). As it is, it seems to me that any value set with GWL_USERDATA is going to overwrite the first three bytes of a value set with GWL_EXSTYLE.
Also, is it possible to find a definition somewhere for the structure (WND?) these offsets refer to?