Determine if a rect is visible inside window

2019-05-28 14:10发布

问题:

I would like to determine if a rect inside a window is completly visible.

I have found RectVisible, but that function determines if any part of the rect is visible, I want to know if the entire rect is visible.

Is there any function for this?

回答1:

First get the system clipping region (the visible region of a window) into a region by using GetRandomRgn. Read more about the 'system region' here. Then, offset that region since it is in screen coordinates (the article I linked has an example). After that, create a region from your rectangle with CreateRectRgn and combine the parts of your 'rectangle region' with those that are not part of the 'system region': that is calling CombineRgn passing the rectangle region as the first region, and the system region as the second region, and RGN_DIFF as the fnCombineMode. If the result is NULLREGION then your rectangle is fully visible - it is not fully or partially covered by any window (top level or not), or it is not fully or partially off-screen.

All in all, there's a probability that you're approaching your problem the wrong way around. If you've told what you've been trying to achieve someone could probably suggest a simpler approach.



回答2:

Use PtVisible on each corner of the rectangle.

The PtVisible function determines whether the specified point is within the clipping region of a device context.



回答3:

Can you do a simple comparison using the coordinates of the window and the rectangle.

Check the rectangle's left ordinate is to the right of the Window's left border; the right ordinate is to the left of the Window's right border; and similar for top and bottom?

The only wrinkle might be if you are using both logical and physical coordinates, in which case you will need to perform a transformation.