[DllImport("gdi32.dll")]
static extern int GetRegionData(IntPtr hRgn, uint dwCount,
IntpTR lpRgnData);
None.
None.
Please add some!
// First get the size in bytes of the region data for the
using System.Interop.Services;
unsafe RECT[] RectsFromRegion(IntPtr hRgn)
{
RECT [] rects = null;
int regionDataSize = GetRegionData(hRgn, 0, IntPtr.Zero);
if (regionDataSize != 0)
{
IntPtr bytes = IntPtr.Zero;
// Allocate as much space as the GetRegionData call
// said was needed
bytes = Marshal.AllocCoTaskMem(regionDataSize);
// Now, make the call again to actually get the data
int retValue = GetRegionData(hRgn, regionDataSize, bytes);
// From here on out, we have the data in a buffer, and we
// just need to convert it into a form that is more useful
// Since pointers are used, this whole routine is 'unsafe'
// It's a small sacrifice to make in order to get this to work.
RGNDATAHEADER * header = (RGNDATAHEADER)bytes;
if (header->iType == RDH_RECTANGLES)
{
RECT
}
}
}
Do you know one? Please contribute it!