1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#include "main.h"
#include "./fillRegion.h"
static BOOL
FillRegion_TempRegionFromRect(FillRegion *region, const RECT *rect)
{
if (NULL == region || NULL == rect)
return FALSE;
if (NULL == region->tmp)
{
region->tmp = CreateRectRgn(rect->left, rect->top, rect->right, rect->bottom);
if (NULL == region->tmp)
return FALSE;
}
else
{
if (FALSE == SetRectRgn(region->tmp, rect->left, rect->top, rect->right, rect->bottom))
return FALSE;
}
return TRUE;
}
BOOL
FillRegion_Init(FillRegion *region, const RECT *rect)
{
if (NULL == region)
return FALSE;
region->fill = (NULL != rect) ?
CreateRectRgn(rect->left, rect->top, rect->right, rect->bottom) :
NULL;
region->tmp = NULL;
if (NULL == region->fill)
return FALSE;
return TRUE;
}
void
FillRegion_Uninit(FillRegion *region)
{
if (NULL != region)
{
if (NULL != region->fill)
{
DeleteObject(region->fill);
region->fill = NULL;
}
if (NULL != region->tmp)
{
DeleteObject(region->tmp);
region->tmp = NULL;
}
}
}
BOOL
FillRegion_ExcludeRect(FillRegion *region, const RECT *rect)
{
if (NULL == region || NULL == rect)
return FALSE;
return (FALSE != FillRegion_TempRegionFromRect(region, rect) &&
ERROR != CombineRgn(region->fill, region->fill, region->tmp, RGN_DIFF));
}
BOOL
FillRegion_ExcludeRgn(FillRegion *region, HRGN rgn)
{
if (NULL == region || NULL == rgn)
return FALSE;
return (ERROR != CombineRgn(region->fill, region->fill, rgn, RGN_DIFF));
}
BOOL
FillRegion_AppendRect(FillRegion *region, const RECT *rect)
{
if (NULL == region || NULL == rect)
return FALSE;
return (FALSE != FillRegion_TempRegionFromRect(region, rect) &&
ERROR != CombineRgn(region->fill, region->fill, region->tmp, RGN_OR));
}
BOOL
FillRegion_AppendRgn(FillRegion *region, HRGN rgn)
{
if (NULL == region || NULL == rgn)
return FALSE;
return (ERROR != CombineRgn(region->fill, region->fill, rgn, RGN_OR));
}
BOOL
FillRegion_BrushFill(FillRegion *region, HDC hdc, HBRUSH brush)
{
if (NULL == region)
return FALSE;
return FillRgn(hdc, region->fill, brush);
}
BOOL
FillRegion_Offset(FillRegion *region, long x, long y)
{
if (NULL == region)
return FALSE;
return (ERROR != OffsetRgn(region->fill, x, y));
}
BOOL
FillRegion_SetRect(FillRegion *region, const RECT *rect)
{
if (NULL == region || NULL == rect)
return FALSE;
return SetRectRgn(region->fill, rect->left, rect->top, rect->right, rect->bottom);
}
BOOL
FillRegion_SetEmpty(FillRegion *region)
{
if (NULL == region)
return FALSE;
return SetRectRgn(region->fill, 0, 0, 0, 0);
}
|