Here is what I came up with, it supports MouseClick, MouseEnter, MouseLeave, MouseDown and MouseUp events. I tried to implement this in a clean way, in both coding and its logic so I followed how C#.net handles this events for a control and tried to simulate them (Guess Microsoft knows better than me!). It has an external function which you can use and a single internal function which you shouldn't call. Also there is only 1 global variable, an array which holds everything about the registred