Your controls are really great! I myself worked on a much simpler control, a button that had three different bitmaps for the static, hover and pressed states, but I wrote it using MFC, and the code size was huge.
I noticed one small bug in your program (and since I don't know ATL, I probably won't be able to fix it myself). If you click on the button, and the event that occurs when clicking on the button doesn't open up a new window, the mouse is still on the button after the click, so it should go back into the hover state. Yours, however, goes back into the static state.
In my button, at first, I had this bug fixed, but when another window opened up, it would stay highlighted! I realized I had to get the OnFocusChanged message and then go back into the static state.