Calling SetSysColor in the current cvs version of wine causes an infinite loop in update_now in dlls/user/painting.c. As I understand it, the problem is the following: get_update_flags will promote it's child window argument to the next child window (via a wineserver call to get_update_region), if the current child doesn't need any repaint. Calling get_update_flags on the desktop window will always return a repaint flag, so it never gets ahead. The attached patch automatically promotes the child window argument to the first child, if called on the desktop window. I don't know if this really is the desired behaviour. Another fix would be to not return any repaint flags for the desktop window.
Ciao, Michael