As far as I can tell I'm not seeing that behaviour on mac 10.7.3. I put a print in the draw method and I still get it when the window is behind a window, on another desktop and even minimised. I still get all the print statements coming through if I only call Refresh if IsShownOnScreen as well so I dont know if that doesn't work as expected on mac as well.
Am I right in thinking that the refresh shouldn't be firing the EVT_PAINT or am I not testing this properly with a print statement if perhaps none of the drawing statements are getting performed because the os/wx knows that the window isn't visible?
Also is there a way I can tell if this changes, like anything I can bind to when the window becomes visible/non visible? I expect not but would be really nice as I have a timer running sending 25 events a second to update an offset and call Refresh. If I could tell when the window wasn't displayed I could Stop the timer and Start it again when it becomes visible again.