28#define RGNDATA_RECT 0x10000000
29#define RGNDATA_PATH 0x10000001
30#define RGNDATA_EMPTY_RECT 0x10000002
31#define RGNDATA_INFINITE_RECT 0x10000003
33#define RGNDATA_MAGIC 0xdbc01001
34#define RGNDATA_MAGIC2 0xdbc01002
36#define expect(expected, got) ok((got) == (expected), "Expected %.8x, got %.8x\n", (expected), (got))
37#define expectf_(expected, got, precision) ok(fabs((expected) - (got)) < (precision), "Expected %f, got %f\n", (expected), (got))
38#define expectf(expected, got) expectf_((expected), (got), 0.001)
40#define expect_magic(value) ok(broken(*(value) == RGNDATA_MAGIC) || *(value) == RGNDATA_MAGIC2, "Expected a known magic value, got %8x\n", *(value))
41#define expect_dword(value, expected) expect((expected), *(value))
42#define expect_float(value, expected) expectf((expected), *(FLOAT *)(value))
62 ok(
ret ==
sizeof(rgn.data.rdh),
"expected sizeof(rdh), got %u\n",
ret);
64 ok(
ret ==
sizeof(rgn.data.rdh) +
sizeof(
RECT),
"expected sizeof(rgn), got %u\n",
ret);
70 ok(
ret ==
sizeof(rgn.data.rdh),
"expected sizeof(rdh), got %u\n",
ret);
72 ok(
ret ==
sizeof(rgn.data.rdh) +
sizeof(
RECT),
"expected sizeof(rgn), got %u\n",
ret);
74 trace(
"size %u, type %u, count %u, rgn size %u, bound %s\n",
75 rgn.data.rdh.dwSize, rgn.data.rdh.iType,
76 rgn.data.rdh.nCount, rgn.data.rdh.nRgnSize,
78 if (rgn.data.rdh.nCount != 0)
80 rect = (
const RECT *)rgn.data.Buffer;
86 ok(rgn.data.rdh.dwSize ==
sizeof(rgn.data.rdh),
"expected sizeof(rdh), got %u\n", rgn.data.rdh.dwSize);
87 ok(rgn.data.rdh.iType ==
RDH_RECTANGLES,
"expected RDH_RECTANGLES, got %u\n", rgn.data.rdh.iType);
90 ok(rgn.data.rdh.nCount == 0,
"expected 0, got %u\n", rgn.data.rdh.nCount);
91 ok(rgn.data.rdh.nRgnSize == 0,
"expected 0, got %u\n", rgn.data.rdh.nRgnSize);
95 ok(rgn.data.rdh.nCount == 1,
"expected 1, got %u\n", rgn.data.rdh.nCount);
96 ok(rgn.data.rdh.nRgnSize ==
sizeof(
RECT),
"expected sizeof(RECT), got %u\n", rgn.data.rdh.nRgnSize);
98 ok(
EqualRect(&rgn.data.rdh.rcBound, rc),
"expected %s, got %s\n",
133 ok_(__FILE__,
line)(needed ==
size,
"data size mismatch: %u != %u\n", needed,
size);
139 ok_(__FILE__,
line)(needed ==
size,
"data size mismatch: %u != %u\n", needed,
size);
144 if (
i == 1)
continue;
459 ok(*(
buf + 8) == 0x4000 || *(
buf + 8) == 0,
460 "expected 0x4000 or 0, got %08x\n", *(
buf + 8));
644 ok(*(
buf + 28) == 0x00000101 || *(
buf + 28) == 0x43050101 ,
645 "expected 00000101 or 43050101 got %08x\n", *(
buf + 28));
794 ok(*(
buf + 33) == 0x00030303 ||
795 *(
buf + 33) == 0x43030303 || *(
buf + 33) == 0x4c030303 ,
796 "expected 0x00030303 or 0x43030303 or 0x4c030303 got %08x\n", *(
buf + 33));
907 rectf.
X = rectf.
Y = 0.0;
1017 ok(region == (
GpRegion*)0xabcdef01,
"Expected region not to be created\n");
1092 "Got %.8x\n", needed);
1125 static const RECT empty_rect = {0,0,0,0};
1127 static const GpRectF test_rectF = {10.0, 11.0, 10.0, 10.0};
1128 static const RECT scaled_rect = {20, 22, 40, 42};
1130 static const GpRectF test_rect2F = {10.0, 21.0, 10.0, 10.0};
1132 static const GpRectF test_rect3F = {10.0, 11.0, 10.0, 20.0};
1308 ok(
res,
"Expected to be equal.\n");
1317 ok(
res,
"Expected to be equal.\n");
1324 ok(!
res,
"Expected to be unequal.\n");
1326 rectf.
X = rectf.
Y = 0.0;
1333 ok(!
res,
"Expected to be unequal.\n");
1339 ok(!
res,
"Expected to be unequal.\n");
1341 rectf.
X = rectf.
Y = 0.0;
1348 ok(
res,
"Expected to be equal.\n");
1350 rectf.
X = rectf.
Y = 0.0;
1357 ok(
res,
"Expected to be equal.\n");
1403 rectf.
X = 10.0; rectf.
Y = 0.0;
1407 rectf.
X = 15.0; rectf.
Y = -2.0;
1416 ok(
res,
"Expected to be equal.\n");
1433 ok(
res,
"Expected to be equal.\n");
1504 ok(
res,
"Expected to be equal.\n");
1520 ok(
res,
"Expected to be equal.\n");
1532 rectf.
Width = 200.0;
1541 ok(
res,
"Expected to be equal.\n");
1561 ok(
res,
"Expected to be equal.\n");
1643 expect(-0x400000, scansi[0].
X);
1644 expect(-0x400000, scansi[0].
Y);
1651 expectf((
double)-0x400000, scans[0].
X);
1652 expectf((
double)-0x400000, scans[0].
Y);
1669 rectf.
X = rectf.
Y = 0.0;
1687 rectf.
X = rectf.
Y = 5.0;
1697 scans[1].
X = scans[1].
Y = scans[1].
Width = scans[1].
Height = 8.0;
1750 rectf.
X = rectf.
Y = 0.0;
1754 ok(rectf.
X == -(
REAL)(1 << 22),
"Expected X = %.2f, got %.2f\n", -(
REAL)(1 << 22), rectf.
X);
1755 ok(rectf.
Y == -(
REAL)(1 << 22),
"Expected Y = %.2f, got %.2f\n", -(
REAL)(1 << 22), rectf.
Y);
1756 ok(rectf.
Width == (
REAL)(1 << 23),
"Expected width = %.2f, got %.2f\n", (
REAL)(1 << 23), rectf.
Width);
1759 rectf.
X = rectf.
Y = 0.0;
1765 ok(rectf.
X == 0.0,
"Expected X = 0.0, got %.2f\n", rectf.
X);
1766 ok(rectf.
Y == 0.0,
"Expected Y = 0.0, got %.2f\n", rectf.
Y);
1767 ok(rectf.
Width == 0.0,
"Expected width = 0.0, got %.2f\n", rectf.
Width);
1768 ok(rectf.
Height == 0.0,
"Expected height = 0.0, got %.2f\n", rectf.
Height);
1770 rectf.
X = 10.0; rectf.
Y = 0.0;
1774 rectf.
X = rectf.
Y = 0.0;
1778 ok(rectf.
X == 10.0,
"Expected X = 0.0, got %.2f\n", rectf.
X);
1779 ok(rectf.
Y == 0.0,
"Expected Y = 0.0, got %.2f\n", rectf.
Y);
1780 ok(rectf.
Width == 100.0,
"Expected width = 0.0, got %.2f\n", rectf.
Width);
1781 ok(rectf.
Height == 100.0,
"Expected height = 0.0, got %.2f\n", rectf.
Height);
1790 ok(rectf.
X == 10.0,
"Expected X = 0.0, got %.2f\n", rectf.
X);
1791 ok(rectf.
Y == 0.0,
"Expected Y = 0.0, got %.2f\n", rectf.
Y);
1792 ok(rectf.
Width == 100.0,
"Expected width = 0.0, got %.2f\n", rectf.
Width);
1794 rectf.
X = 10.0; rectf.
Y = 0.0;
1798 rectf.
X = rectf.
Y = 0.0;
1802 ok(rectf.
X == 10.0,
"Expected X = 0.0, got %.2f\n", rectf.
X);
1803 ok(rectf.
Y == 0.0,
"Expected Y = 0.0, got %.2f\n", rectf.
Y);
1804 ok(rectf.
Width == 100.0,
"Expected width = 0.0, got %.2f\n", rectf.
Width);
1805 ok(rectf.
Height == 100.0,
"Expected height = 0.0, got %.2f\n", rectf.
Height);
1850 ok(
res ==
TRUE,
"Region should be infinite\n");
1856 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1865 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1883 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
1892 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1898 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1904 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1910 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1916 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1922 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1931 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
1946 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
1955 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
1964 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
1987 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
1996 ok(
res ==
TRUE,
"Expected (%.2f, %.2f) to be visible\n",
x,
y);
2005 ok(
res ==
FALSE,
"Expected (%.2f, %.2f) not to be visible\n",
x,
y);
2053 ok(
res ==
TRUE,
"Region should be infinite\n");
2059 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2065 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2081 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2091 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2101 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2107 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2113 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2119 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2126 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2132 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2138 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2150 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2159 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2182 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2191 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2200 ok(
res ==
FALSE,
"Expected (%.2f, %.2f, %.2f, %.2f) not to be visible\n",
x,
y,
w,
h);
2209 ok(
res ==
TRUE,
"Expected (%.2f, %.2f, %.2f, %.2f) to be visible\n",
x,
y,
w,
h);
2228 static const RectF rect_exclude = {0.0, 0.0, 1.0, 1.0};
int CDECL _controlfp_s(unsigned int *cur, unsigned int newval, unsigned int mask)
static const char * wine_dbgstr_rect(const RECT *prc)
struct _RGNDATAHEADER RGNDATAHEADER
#define GetProcAddress(x, y)
GpStatus WINGDIPAPI GdipCreateFromHDC(HDC hdc, GpGraphics **graphics)
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics *graphics, REAL sx, REAL sy, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics *graphics, REAL dx, REAL dy, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics *graphics, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics *graphics, GpUnit unit)
GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics *graphics, REAL scale)
GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath *path, INT x, INT y, INT width, INT height)
GpStatus WINGDIPAPI GdipCreatePath(GpFillMode fill, GpPath **path)
GpStatus WINGDIPAPI GdipDeletePath(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathLine(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2)
GpStatus WINGDIPAPI GdipAddPathArc(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle)
GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath *path, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipResetPath(GpPath *path)
GpStatus WINGDIPAPI GdipClosePathFigure(GpPath *path)
GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width, REAL height)
GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix *matrix, REAL scaleX, REAL scaleY, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix)
GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix *matrix, REAL angle, GpMatrixOrder order)
GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix **matrix)
GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion *region, REAL x, REAL y, REAL w, REAL h, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode mode)
GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *region)
GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *region)
GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn)
GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, GpRegion **region)
GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion *region, REAL x, REAL y, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *data, INT size, GpRegion **region)
GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion *region, INT x, INT y, INT w, INT h, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *region, REAL dx, REAL dy)
GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion *region, GpRectF *scans, INT *count, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *region, GpRegion *region2, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *region, GDIPCONST GpRect *rect, CombineMode mode)
GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region)
GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed)
GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *region, GDIPCONST GpRectF *rect, CombineMode mode)
GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion *region, UINT *count, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region)
GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2, CombineMode mode)
GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion *region, INT x, INT y, GpGraphics *graphics, BOOL *res)
GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size, UINT *needed)
GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion *region, GpRect *scans, INT *count, GpMatrix *matrix)
GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect)
GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region)
GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *rect, GpRegion **region)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
void WINGDIPAPI GdipFree(void *ptr)
Status WINAPI GdiplusStartup(ULONG_PTR *token, const struct GdiplusStartupInput *input, struct GdiplusStartupOutput *output)
void *WINGDIPAPI GdipAlloc(SIZE_T size)
void WINAPI GdiplusShutdown(ULONG_PTR)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static void test_rect(void)
static void test_isempty(void)
static void test_GdipCreateRegionRgnData(void)
static void test_gethrgn(void)
static DWORD get_region_type(GpRegion *region)
static void test_combinereplace(void)
static void test_region_data(DWORD *data, UINT size, INT line)
static void test_translate(void)
static void test_fromhrgn(void)
static void test_getregiondata(void)
static void test_isvisiblepoint(void)
#define expect_dword(value, expected)
static void test_getbounds(void)
#define expect(expected, got)
#define RGNDATA_INFINITE_RECT
static void test_isvisiblerect(void)
#define RGNDATA_EMPTY_RECT
static void test_isinfinite(void)
#define expect_float(value, expected)
#define expect_magic(value)
static void test_isequal(void)
#define expectf(expected, got)
static void verify_region(HRGN hrgn, const RECT *rc)
static void test_excludeinfinite(void)
static void test_scans(void)
static void test_transform(void)
static const RECT test_rect2
static const RECT test_rect3
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HRGN WINAPI CreateEllipticRgn(_In_ int, _In_ int, _In_ int, _In_ int)
DWORD WINAPI GetRegionData(_In_ HRGN hrgn, _In_ DWORD nCount, _Out_writes_bytes_to_opt_(nCount, return) LPRGNDATA lpRgnData)
int WINAPI GetRgnBox(_In_ HRGN, _Out_ LPRECT)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)