As a guess (I'm not a Windows programmer) try using more widely-spaced intervals for your button codes. (xx,xx,xx) is inherently 24-bit (3 8-bit sequences), and if you're changing one of them by one bit, that going to be masked in the 24-bit-to-16-bit interpolation.

Try using (255,255,127) and (255,127,255) and (127,255,255) and (127,255,127) and (127,127,127) and (0,127,255), etc. You'll have to have a LUT, but that's hardly a large penalty.
_________________________
Bitt Faulk