Using The Win32 API To Get/Set Properties
Ultimately, as the controls I created became more complex with more internal variables stored in the cbWndExtra
bytes, I changed my technique to only use 8 bytes in the cbWndExtra
field.
I used the GetWindowLong api function to retrieve data in the extra window memory of cbWndExtra
, and the SetWindowLong api function to set data in this memory.
The data to get or set was one DWORD
value (Invoke GetWindowLong, hControl, 0
) for a pointer to a structure that stored internal variables, and another DWORD
value (Invoke GetWindowLong, hControl, 4
) for a pointer to a structure that stored variables that are visible and can be modified externally by the user of the control.
The actual allocation of memory for these structures used for internal and external variables is handled in the WM_CREATE
message of the main controls window procedure by the __AllocMemProperties
internal function (see Inside Our Control for details).
The freeing of this allocated memory is handled by __FreeMemProperties
internal function in the WM_NCDESTROY message.
In our example SimpleButton control the _SB_WndProc
procedure calls the __AllocMemProperties
function to allocate thie memory and store the pointer in the appropriate cbWndExtra
location - (Invoke GetWindowLong, hControl, 0
) for a pointer to a structure that stores internal variables, and (Invoke GetWindowLong, hControl, 4
) for a pointer to a structure that stores external variables.
Last updated