Since reading your post two days ago, I've tried implementing this in as many ways as I could think. Unfortunately, I just can't get it to stick. I think that you will have to translate the coordinates for every message/event that you receive. Admittedly, you don't have too much work ahead of you. For messages/events that require painting, you only need to do the Graphics.TranslateTransform( Width / 2, Height / 2 ) call. For messages/events that have client coordinates associated with them, you'll need to subtract Width / 2 from the x and Height / 2 from the y. Finally, with messages/events that have screen coordintates, you need to call PointToClient(Point) and then subtract like the last call. I would write three static methods in a helper class with signatures like:
Point CenteredPointFromClient( Point point, Form form );
int CenteredPointFromScreen( Point point, Form form );
void CenteredGraphics( Graphics g, Form form );
I wish a better solution existed. I don't think that it does because it would mess up the way that the .NET runtime draws child controls. Sorry. "we must lose precision to make significant statements about complex systems." -deKorvin on uncertainty