I have been puzzled why there are only click and change events reported from structs in run mode and found this quite limiting and ended up using the iemguts and cyclone libraries for mouse events.
Then less than a week ago @ingox uploaded the vanilla xy-pad which explained how to unpack the pointer and when the change event occurred. So after a bit of trial and error and chasing my tail trying to match the x/y co-ordinates with the mouse pointer, I realised that correct co-ordinates were the offset right side of a rectangle. So using this info I then found it hard to click in the right spot to get a reliable change event. I then found that, by using the offset corner as the centre then drawing a cursor box all the way around the centre the cursor responded much better to the mouse change. What also amazed me was the small amount of code required to achieve this.