A fundamental part of SkyOS programming is the HANDLE. Simply, a HANDLE is a void pointer. It's the common datatype for widgets, windows, and basically anything else you draw to the screen with SkyGI.

How could a HANDLE handle all different types of widgets? Obviously a progress bar would need different attributes than a listbox or a radio button. When you call GI_Widget*Create, although it returns a HANDLE, it returns a different structure than any other GI_Widget*Create call. Since a void * can point to anything, HANDLEs have no defined structure, making them an ideal general purpose datatype.

The true datatype for the various widgets can be found in skygi.h. Grep for 'struct widget_*' and you'll find them all. It really isn't necessary to know anything about the contents of these structs, just know that they do exist, and therefore, the HANDLE isn't some magical datatype that could only have been conceived by Robert himself.