iColor.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // iColor.h: interface for the iColor class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_IColor_H__E4C4F444_2461_4F89_B782_A9476A8635FA__INCLUDED_)
  5. #define AFX_IColor_H__E4C4F444_2461_4F89_B782_A9476A8635FA__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #define ARGB(a,r,g,b) 
  10.     ((DWORD)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
  11. enum eColorType{COLOR_WHITE,COLOR_BLACK,
  12. COLOR_RED,COLOR_GREEN,COLOR_BLUE,};
  13. const long c_lWriteColor = 0xffffffff;
  14. struct cColor
  15. {
  16. long r,g,b,a;
  17. cColor(long _r,long _g,long _b,long _a = 255) : r(_r),g(_g),b(_b),a(_a){}
  18. cColor(): r(0), g(0), b(0), a(0) {}
  19. cColor(long value)
  20. {
  21. b = (BYTE)value;
  22. g = (BYTE)(value>>8);
  23. r = (BYTE)(value>>16);
  24. a = (BYTE)(value>>24);
  25. }
  26. DWORD Value(){return ARGB(a,r,g,b);}
  27. bool operator == (const cColor &cr) 
  28. {
  29. return (r == cr.r && g == cr.g && b == cr.b && a == cr.a);
  30. }
  31. cColor operator - (const cColor &cr)
  32. {
  33. cColor color(r-cr.r,g-cr.g,b-cr.b,a-cr.a);
  34. return color;
  35. }
  36. cColor operator + (const cColor &cr)
  37. {
  38. cColor color(r+cr.r,g+cr.g,b+cr.b,a+cr.a);
  39. return color;
  40. }
  41. cColor operator - (long f)
  42. {
  43. cColor cr(r-f,g-f,b-f,a);
  44. return cr;
  45. }
  46. cColor operator + (long f)
  47. {
  48. cColor cr(r+f,g+f,b+f,a);
  49. return cr;
  50. }
  51. cColor operator * (float f)
  52. {
  53. cColor cr((long)(r*f),(long)(g*f),(long)(b*f),a);
  54. return cr;
  55. }
  56. cColor operator / (float f)
  57. {
  58. cColor cr((long)(r/f),(long)(g/f),(long)(b/f),a);
  59. return cr;
  60. }
  61. void operator += (long f)
  62. {
  63. r+=f;
  64. g+=f;
  65. b+=f;
  66. }
  67. void operator += (const cColor& cr)
  68. {
  69. r+=cr.r;
  70. g+=cr.g;
  71. b+=cr.b;
  72. a+=cr.a;
  73. }
  74. void operator -= (long f)
  75. {
  76. r-=f;
  77. g-=f;
  78. b-=f;
  79. }
  80. void operator -= (const cColor& cr)
  81. {
  82. r-=cr.r;
  83. g-=cr.g;
  84. b-=cr.b;
  85. a-=cr.a;
  86. }
  87. void Format()
  88. {
  89. if (r>255)r=255; if (r<0)r=0;
  90. if (g>255)g=255; if (g<0)g=0;
  91. if (b>255)b=255; if (b<0)b=0;
  92. if (a>255)a=255; if (a<0)a=0;
  93. }
  94. };
  95. struct cPoint
  96. {
  97. float x, y, z;
  98. cPoint(float _x, float _y, float _z = 0): x(_x), y(_y),z(_z) {}
  99. cPoint(): x(0), y(0), z(0) {}
  100. void operator = (const cPoint &p)
  101. {
  102. x = p.x;
  103. y = p.y; 
  104. z = p.z;
  105. }
  106. bool operator != (const cPoint &p) const
  107. {
  108. return (!(x == p.x && y == p.y && z == p.z));
  109. }
  110. bool operator == (const cPoint &p) const 
  111. {
  112. return (x == p.x && y == p.y && z == p.z);
  113. }
  114. void  operator += (const cPoint &p)
  115. {
  116. x += p.x;
  117. y += p.y;
  118. z += p.z;
  119. }
  120. void  operator -= (const cPoint &p)
  121. {
  122. x -= p.x;
  123. y -= p.y;
  124. z -= p.z;
  125. }
  126. cPoint operator + (const cPoint &p)
  127. {
  128. cPoint ret(x + p.x, y + p.y, z + p.z);
  129. return ret;
  130. }
  131. cPoint operator - (const cPoint &p)
  132. {
  133. cPoint ret(x - p.x, y - p.y, z - p.z);
  134. return ret;
  135. }
  136. };
  137. struct cPoint2
  138. {
  139. cPoint p1;
  140. cPoint p2;
  141. };
  142. struct POINT2
  143. {
  144. POINT p1;
  145. POINT p2;
  146. };
  147. #define fmax(a,b) ((a)>(b)?(a):(b))
  148. #define fmin(a,b) ((a)<(b)?(a):(b))
  149. struct cRect
  150. {
  151. union
  152. {
  153. float l;
  154. float left;
  155. };
  156. union
  157. {
  158. float r;
  159. float right;
  160. };
  161. union
  162. {
  163. float t;
  164. float top;
  165. };
  166. union
  167. {
  168. float b;
  169. float bottom;
  170. };
  171. cRect(float _l, float _t, float _r, float _b): l(_l), r(_r), t(_t), b(_b){}
  172. cRect(): l(0), r(0), t(0), b(0){}
  173. cRect operator + (const cRect &p)
  174. {
  175. cRect ret(l + p.l, r + p.r, t + p.t, b + p.b);
  176. return ret;
  177. }
  178. cRect operator - (const cRect &p)
  179. {
  180. cRect ret(l - p.l, r - p.r, t - p.t, b - p.b);
  181. return ret;
  182. }
  183. void operator = (const cRect &p)
  184. {
  185. l = p.l;
  186. r = p.r;
  187. t = p.t;
  188. b = p.b;
  189. }
  190. cRect operator & (cRect &rect)
  191. {
  192. return cRect(fmax(rect.l,l),fmax(rect.t,t),fmin(rect.r,r),fmin(rect.b,b));
  193. }
  194. cRect operator | (cRect &rect)
  195. {
  196. return cRect(fmin(rect.l,l),fmin(rect.t,t),fmax(rect.r,r),fmax(rect.b,b));
  197. }
  198. bool IsEmpty(){return Width() <= 0 || Height() <= 0;}
  199. bool IsRectEmpty(){return IsEmpty();}
  200. bool IsAbsEmpty(){return Width() < 0 || Height() < 0;}
  201. bool IsNULL(){return l == 0 && r == 0 && t == 0 && b == 0;}
  202. cPoint CenterPoint(){return cPoint((l+r)/2,(t+b)/2);}
  203. void Offset(float x,float y)
  204. {
  205. l += x;
  206. r += x;
  207. t += y;
  208. b += y;
  209. }
  210. void Offset(cPoint pt)
  211. {
  212. Offset(pt.x,pt.y);
  213. }
  214. float Width() const 
  215. {
  216. return r-l;
  217. }
  218. float Height() const 
  219. {
  220. return b-t;
  221. }
  222. void FormatMin(float x, float y)
  223. {
  224. if (l < x)
  225. l = x;
  226. if (r < x)
  227. r = x;
  228. if (t < y)
  229. t = y;
  230. if (b < y)
  231. b = y;
  232. }
  233. void FormatMinMax(cPoint pt)
  234. {
  235. FormatMinMax(pt.x,pt.y);
  236. }
  237. void FormatMinMax(float x, float y)
  238. {
  239. if (l > x)
  240. l = x;
  241. if (r < x)
  242. r = x;
  243. if (t > y)
  244. t = y;
  245. if (b < y)
  246. b = y;
  247. }
  248. };
  249. typedef cPoint cSize;
  250. #endif // !defined(AFX_IColor_H__E4C4F444_2461_4F89_B782_A9476A8635FA__INCLUDED_)