GdiPlusBrush.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841
  1. //Download by http://www.NewXing.com
  2. /**************************************************************************\
  3. *
  4. * Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
  5. *
  6. * Module Name:
  7. *
  8. * GdiplusBrush.h
  9. *
  10. * Abstract:
  11. *
  12. * GDI+ Brush class
  13. *
  14. \**************************************************************************/
  15. #ifndef _GDIPLUSBRUSH_H
  16. #define _GDIPLUSBRUSH_H
  17. class GraphicsPath;
  18. //--------------------------------------------------------------------------
  19. // Abstract base class for various brush types
  20. //--------------------------------------------------------------------------
  21. class Brush : public GdiplusBase
  22. {
  23. public:
  24. friend class Pen;
  25. friend class Graphics;
  26. virtual ~Brush()
  27. {
  28. DllExports::GdipDeleteBrush(nativeBrush);
  29. }
  30. virtual Brush* Clone() const
  31. {
  32. GpBrush *brush = NULL;
  33. SetStatus(DllExports::GdipCloneBrush(nativeBrush, &brush));
  34. Brush *newBrush = new Brush(brush, lastResult);
  35. if (newBrush == NULL)
  36. {
  37. DllExports::GdipDeleteBrush(brush);
  38. }
  39. return newBrush;
  40. }
  41. BrushType GetType() const
  42. {
  43. BrushType type = static_cast<BrushType>(-1);
  44. SetStatus(DllExports::GdipGetBrushType(nativeBrush, &type));
  45. return type;
  46. }
  47. Status GetLastStatus() const
  48. {
  49. Status lastStatus = lastResult;
  50. lastResult = Ok;
  51. return lastStatus;
  52. }
  53. protected:
  54. Brush()
  55. {
  56. SetStatus(NotImplemented);
  57. }
  58. private:
  59. Brush(const Brush& brush);
  60. Brush& operator=(const Brush& brush);
  61. protected:
  62. Brush(GpBrush* nativeBrush, Status status)
  63. {
  64. lastResult = status;
  65. SetNativeBrush(nativeBrush);
  66. }
  67. VOID SetNativeBrush(GpBrush* nativeBrush)
  68. {
  69. this->nativeBrush = nativeBrush;
  70. }
  71. Status SetStatus(Status status) const
  72. {
  73. if (status != Ok)
  74. return (lastResult = status);
  75. else
  76. return status;
  77. }
  78. GpBrush* nativeBrush;
  79. mutable Status lastResult;
  80. };
  81. //--------------------------------------------------------------------------
  82. // Solid Fill Brush Object
  83. //--------------------------------------------------------------------------
  84. class SolidBrush : public Brush
  85. {
  86. public:
  87. friend class Pen;
  88. SolidBrush(IN const GdiPlusColor& color)
  89. {
  90. GpSolidFill *brush = NULL;
  91. lastResult = DllExports::GdipCreateSolidFill(color.GetValue(), &brush);
  92. SetNativeBrush(brush);
  93. }
  94. Status GetColor(OUT GdiPlusColor* color) const
  95. {
  96. ARGB argb;
  97. if (color == NULL)
  98. {
  99. return SetStatus(InvalidParameter);
  100. }
  101. SetStatus(DllExports::GdipGetSolidFillColor((GpSolidFill*)nativeBrush,
  102. &argb));
  103. *color = GdiPlusColor(argb);
  104. return lastResult;
  105. }
  106. Status SetColor(IN const GdiPlusColor& color)
  107. {
  108. return SetStatus(DllExports::GdipSetSolidFillColor((GpSolidFill*)nativeBrush,
  109. color.GetValue()));
  110. }
  111. private:
  112. SolidBrush(const SolidBrush &);
  113. SolidBrush& operator=(const SolidBrush &);
  114. protected:
  115. SolidBrush()
  116. {
  117. }
  118. };
  119. //--------------------------------------------------------------------------
  120. // Texture Brush Fill Object
  121. //--------------------------------------------------------------------------
  122. class TextureBrush : public Brush
  123. {
  124. public:
  125. friend class Pen;
  126. TextureBrush(IN Image* image,
  127. IN WrapMode wrapMode = WrapModeTile)
  128. {
  129. GpTexture *texture = NULL;
  130. lastResult = DllExports::GdipCreateTexture(
  131. image->nativeImage,
  132. wrapMode, &texture);
  133. SetNativeBrush(texture);
  134. }
  135. // When creating a texture brush from a metafile image, the dstRect
  136. // is used to specify the size that the metafile image should be
  137. // rendered at in the device units of the destination graphics.
  138. // It is NOT used to crop the metafile image, so only the width
  139. // and height values matter for metafiles.
  140. TextureBrush(IN Image* image,
  141. IN WrapMode wrapMode,
  142. IN const RectF &dstRect)
  143. {
  144. GpTexture *texture = NULL;
  145. lastResult = DllExports::GdipCreateTexture2(
  146. image->nativeImage,
  147. wrapMode,
  148. dstRect.X,
  149. dstRect.Y,
  150. dstRect.Width,
  151. dstRect.Height,
  152. &texture);
  153. SetNativeBrush(texture);
  154. }
  155. TextureBrush(IN Image *image,
  156. IN const RectF &dstRect,
  157. IN const ImageAttributes *imageAttributes = NULL)
  158. {
  159. GpTexture *texture = NULL;
  160. lastResult = DllExports::GdipCreateTextureIA(
  161. image->nativeImage,
  162. (imageAttributes)?imageAttributes->nativeImageAttr:NULL,
  163. dstRect.X,
  164. dstRect.Y,
  165. dstRect.Width,
  166. dstRect.Height,
  167. &texture
  168. );
  169. SetNativeBrush(texture);
  170. }
  171. TextureBrush(IN Image *image,
  172. IN const Rect &dstRect,
  173. IN const ImageAttributes *imageAttributes = NULL)
  174. {
  175. GpTexture *texture = NULL;
  176. lastResult = DllExports::GdipCreateTextureIAI(
  177. image->nativeImage,
  178. (imageAttributes)?imageAttributes->nativeImageAttr:NULL,
  179. dstRect.X,
  180. dstRect.Y,
  181. dstRect.Width,
  182. dstRect.Height,
  183. &texture
  184. );
  185. SetNativeBrush(texture);
  186. }
  187. TextureBrush(
  188. IN Image* image,
  189. IN WrapMode wrapMode,
  190. const IN Rect &dstRect
  191. )
  192. {
  193. GpTexture *texture = NULL;
  194. lastResult = DllExports::GdipCreateTexture2I(
  195. image->nativeImage,
  196. wrapMode,
  197. dstRect.X,
  198. dstRect.Y,
  199. dstRect.Width,
  200. dstRect.Height,
  201. &texture);
  202. SetNativeBrush(texture);
  203. }
  204. TextureBrush(IN Image* image,
  205. IN WrapMode wrapMode,
  206. IN REAL dstX,
  207. IN REAL dstY,
  208. IN REAL dstWidth,
  209. IN REAL dstHeight)
  210. {
  211. GpTexture *texture = NULL;
  212. lastResult = DllExports::GdipCreateTexture2(
  213. image->nativeImage,
  214. wrapMode,
  215. dstX,
  216. dstY,
  217. dstWidth,
  218. dstHeight,
  219. &texture);
  220. SetNativeBrush(texture);
  221. }
  222. TextureBrush(IN Image* image,
  223. IN WrapMode wrapMode,
  224. IN INT dstX,
  225. IN INT dstY,
  226. IN INT dstWidth,
  227. IN INT dstHeight)
  228. {
  229. GpTexture *texture = NULL;
  230. lastResult = DllExports::GdipCreateTexture2I(
  231. image->nativeImage,
  232. wrapMode,
  233. dstX,
  234. dstY,
  235. dstWidth,
  236. dstHeight,
  237. &texture);
  238. SetNativeBrush(texture);
  239. }
  240. Status SetTransform(IN const Matrix* matrix)
  241. {
  242. return SetStatus(DllExports::GdipSetTextureTransform((GpTexture*)nativeBrush,
  243. matrix->nativeMatrix));
  244. }
  245. Status GetTransform(OUT Matrix* matrix) const
  246. {
  247. return SetStatus(DllExports::GdipGetTextureTransform((GpTexture*)nativeBrush,
  248. matrix->nativeMatrix));
  249. }
  250. Status ResetTransform()
  251. {
  252. return SetStatus(DllExports::GdipResetTextureTransform((GpTexture*)nativeBrush));
  253. }
  254. Status MultiplyTransform(IN const Matrix* matrix,
  255. IN MatrixOrder order = MatrixOrderPrepend)
  256. {
  257. return SetStatus(DllExports::GdipMultiplyTextureTransform((GpTexture*)nativeBrush,
  258. matrix->nativeMatrix,
  259. order));
  260. }
  261. Status TranslateTransform(IN REAL dx,
  262. IN REAL dy,
  263. IN MatrixOrder order = MatrixOrderPrepend)
  264. {
  265. return SetStatus(DllExports::GdipTranslateTextureTransform((GpTexture*)nativeBrush,
  266. dx, dy, order));
  267. }
  268. Status ScaleTransform(IN REAL sx,
  269. IN REAL sy,
  270. IN MatrixOrder order = MatrixOrderPrepend)
  271. {
  272. return SetStatus(DllExports::GdipScaleTextureTransform((GpTexture*)nativeBrush,
  273. sx, sy, order));
  274. }
  275. Status RotateTransform(IN REAL angle,
  276. IN MatrixOrder order = MatrixOrderPrepend)
  277. {
  278. return SetStatus(DllExports::GdipRotateTextureTransform((GpTexture*)nativeBrush,
  279. angle, order));
  280. }
  281. Status SetWrapMode(IN WrapMode wrapMode)
  282. {
  283. return SetStatus(DllExports::GdipSetTextureWrapMode((GpTexture*)nativeBrush,
  284. wrapMode));
  285. }
  286. WrapMode GetWrapMode() const
  287. {
  288. WrapMode wrapMode;
  289. SetStatus(DllExports::GdipGetTextureWrapMode((GpTexture*)nativeBrush,
  290. &wrapMode));
  291. return wrapMode;
  292. }
  293. Image *GetImage() const
  294. {
  295. GpImage *image;
  296. SetStatus(DllExports::GdipGetTextureImage((GpTexture *)nativeBrush,
  297. &image));
  298. Image *retimage = new Image(image, lastResult);
  299. if (retimage == NULL)
  300. {
  301. DllExports::GdipDisposeImage(image);
  302. }
  303. return retimage;
  304. }
  305. private:
  306. TextureBrush(const TextureBrush &);
  307. TextureBrush& operator=(const TextureBrush &);
  308. protected:
  309. TextureBrush()
  310. {
  311. }
  312. };
  313. //--------------------------------------------------------------------------
  314. // Linear Gradient Brush Object
  315. //--------------------------------------------------------------------------
  316. class LinearGradientBrush : public Brush
  317. {
  318. public:
  319. friend class Pen;
  320. LinearGradientBrush(IN const PointF& point1,
  321. IN const PointF& point2,
  322. IN const GdiPlusColor& color1,
  323. IN const GdiPlusColor& color2)
  324. {
  325. GpLineGradient *brush = NULL;
  326. lastResult = DllExports::GdipCreateLineBrush(&point1,
  327. &point2,
  328. color1.GetValue(),
  329. color2.GetValue(),
  330. WrapModeTile,
  331. &brush);
  332. SetNativeBrush(brush);
  333. }
  334. LinearGradientBrush(IN const PointI& point1,
  335. IN const PointI& point2,
  336. IN const GdiPlusColor& color1,
  337. IN const GdiPlusColor& color2)
  338. {
  339. GpLineGradient *brush = NULL;
  340. lastResult = DllExports::GdipCreateLineBrushI(&point1,
  341. &point2,
  342. color1.GetValue(),
  343. color2.GetValue(),
  344. WrapModeTile,
  345. &brush);
  346. SetNativeBrush(brush);
  347. }
  348. LinearGradientBrush(IN const RectF& rect,
  349. IN const GdiPlusColor& color1,
  350. IN const GdiPlusColor& color2,
  351. IN LinearGradientMode mode)
  352. {
  353. GpLineGradient *brush = NULL;
  354. lastResult = DllExports::GdipCreateLineBrushFromRect(&rect,
  355. color1.GetValue(),
  356. color2.GetValue(),
  357. mode,
  358. WrapModeTile,
  359. &brush);
  360. SetNativeBrush(brush);
  361. }
  362. LinearGradientBrush(IN const Rect& rect,
  363. IN const GdiPlusColor& color1,
  364. IN const GdiPlusColor& color2,
  365. IN LinearGradientMode mode)
  366. {
  367. GpLineGradient *brush = NULL;
  368. lastResult = DllExports::GdipCreateLineBrushFromRectI(&rect,
  369. color1.GetValue(),
  370. color2.GetValue(),
  371. mode,
  372. WrapModeTile,
  373. &brush);
  374. SetNativeBrush(brush);
  375. }
  376. LinearGradientBrush(IN const RectF& rect,
  377. IN const GdiPlusColor& color1,
  378. IN const GdiPlusColor& color2,
  379. IN REAL angle,
  380. IN BOOL isAngleScalable = FALSE)
  381. {
  382. GpLineGradient *brush = NULL;
  383. lastResult = DllExports::GdipCreateLineBrushFromRectWithAngle(&rect,
  384. color1.GetValue(),
  385. color2.GetValue(),
  386. angle,
  387. isAngleScalable,
  388. WrapModeTile,
  389. &brush);
  390. SetNativeBrush(brush);
  391. }
  392. LinearGradientBrush(IN const Rect& rect,
  393. IN const GdiPlusColor& color1,
  394. IN const GdiPlusColor& color2,
  395. IN REAL angle,
  396. IN BOOL isAngleScalable = FALSE)
  397. {
  398. GpLineGradient *brush = NULL;
  399. lastResult = DllExports::GdipCreateLineBrushFromRectWithAngleI(&rect,
  400. color1.GetValue(),
  401. color2.GetValue(),
  402. angle,
  403. isAngleScalable,
  404. WrapModeTile,
  405. &brush);
  406. SetNativeBrush(brush);
  407. }
  408. Status SetLinearColors(IN const GdiPlusColor& color1,
  409. IN const GdiPlusColor& color2)
  410. {
  411. return SetStatus(DllExports::GdipSetLineColors((GpLineGradient*)nativeBrush,
  412. color1.GetValue(),
  413. color2.GetValue()));
  414. }
  415. Status GetLinearColors(OUT GdiPlusColor* colors) const
  416. {
  417. ARGB argb[2];
  418. if (colors == NULL)
  419. {
  420. return SetStatus(InvalidParameter);
  421. }
  422. SetStatus(DllExports::GdipGetLineColors((GpLineGradient*) nativeBrush, argb));
  423. if (lastResult == Ok)
  424. {
  425. // use bitwise copy operator for GdiPlusColor copy
  426. colors[0] = GdiPlusColor(argb[0]);
  427. colors[1] = GdiPlusColor(argb[1]);
  428. }
  429. return lastResult;
  430. }
  431. Status GetRectangle(OUT RectF* rect) const
  432. {
  433. return SetStatus(DllExports::GdipGetLineRect((GpLineGradient*)nativeBrush, rect));
  434. }
  435. Status GetRectangle(OUT Rect* rect) const
  436. {
  437. return SetStatus(DllExports::GdipGetLineRectI((GpLineGradient*)nativeBrush, rect));
  438. }
  439. Status SetGammaCorrection(IN BOOL useGammaCorrection)
  440. {
  441. return SetStatus(DllExports::GdipSetLineGammaCorrection((GpLineGradient*)nativeBrush,
  442. useGammaCorrection));
  443. }
  444. BOOL GetGammaCorrection() const
  445. {
  446. BOOL useGammaCorrection;
  447. SetStatus(DllExports::GdipGetLineGammaCorrection((GpLineGradient*)nativeBrush,
  448. &useGammaCorrection));
  449. return useGammaCorrection;
  450. }
  451. INT GetBlendCount() const
  452. {
  453. INT count = 0;
  454. SetStatus(DllExports::GdipGetLineBlendCount((GpLineGradient*)
  455. nativeBrush,
  456. &count));
  457. return count;
  458. }
  459. Status SetBlend(IN const REAL* blendFactors,
  460. IN const REAL* blendPositions,
  461. IN INT count)
  462. {
  463. return SetStatus(DllExports::GdipSetLineBlend((GpLineGradient*)
  464. nativeBrush,
  465. blendFactors,
  466. blendPositions,
  467. count));
  468. }
  469. Status GetBlend(OUT REAL* blendFactors,
  470. OUT REAL* blendPositions,
  471. IN INT count) const
  472. {
  473. return SetStatus(DllExports::GdipGetLineBlend((GpLineGradient*)nativeBrush,
  474. blendFactors,
  475. blendPositions,
  476. count));
  477. }
  478. INT GetInterpolationColorCount() const
  479. {
  480. INT count = 0;
  481. SetStatus(DllExports::GdipGetLinePresetBlendCount((GpLineGradient*)
  482. nativeBrush,
  483. &count));
  484. return count;
  485. }
  486. Status SetInterpolationColors(IN const GdiPlusColor* presetColors,
  487. IN const REAL* blendPositions,
  488. IN INT count)
  489. {
  490. if ((count <= 0) || !presetColors)
  491. return SetStatus(InvalidParameter);
  492. ARGB *argbs = (ARGB*) new BYTE[count*sizeof(ARGB)];
  493. if (argbs)
  494. {
  495. for (INT i = 0; i < count; i++)
  496. {
  497. argbs[i] = presetColors[i].GetValue();
  498. }
  499. Status status = SetStatus(DllExports::GdipSetLinePresetBlend(
  500. (GpLineGradient*) nativeBrush,
  501. argbs,
  502. blendPositions,
  503. count));
  504. delete [] argbs;
  505. return status;
  506. }
  507. else
  508. {
  509. return SetStatus(OutOfMemory);
  510. }
  511. }
  512. Status GetInterpolationColors(OUT GdiPlusColor* presetColors,
  513. OUT REAL* blendPositions,
  514. IN INT count) const
  515. {
  516. if ((count <= 0) || !presetColors)
  517. return SetStatus(InvalidParameter);
  518. ARGB* argbs = (ARGB*) new BYTE[count*sizeof(ARGB)];
  519. if (!argbs)
  520. {
  521. return SetStatus(OutOfMemory);
  522. }
  523. Status status = SetStatus(DllExports::GdipGetLinePresetBlend((GpLineGradient*)nativeBrush,
  524. argbs,
  525. blendPositions,
  526. count));
  527. if (status == Ok)
  528. {
  529. for (INT i = 0; i < count; i++)
  530. {
  531. presetColors[i] = GdiPlusColor(argbs[i]);
  532. }
  533. }
  534. delete [] argbs;
  535. return status;
  536. }
  537. Status SetBlendBellShape(IN REAL focus,
  538. IN REAL scale = 1.0f)
  539. {
  540. return SetStatus(DllExports::GdipSetLineSigmaBlend((GpLineGradient*)nativeBrush, focus, scale));
  541. }
  542. Status SetBlendTriangularShape(
  543. IN REAL focus,
  544. IN REAL scale = 1.0f
  545. )
  546. {
  547. return SetStatus(DllExports::GdipSetLineLinearBlend((GpLineGradient*)nativeBrush, focus, scale));
  548. }
  549. Status SetTransform(IN const Matrix* matrix)
  550. {
  551. return SetStatus(DllExports::GdipSetLineTransform((GpLineGradient*)nativeBrush,
  552. matrix->nativeMatrix));
  553. }
  554. Status GetTransform(OUT Matrix *matrix) const
  555. {
  556. return SetStatus(DllExports::GdipGetLineTransform((GpLineGradient*)nativeBrush,
  557. matrix->nativeMatrix));
  558. }
  559. Status ResetTransform()
  560. {
  561. return SetStatus(DllExports::GdipResetLineTransform((GpLineGradient*)nativeBrush));
  562. }
  563. Status MultiplyTransform(IN const Matrix* matrix,
  564. IN MatrixOrder order = MatrixOrderPrepend)
  565. {
  566. return SetStatus(DllExports::GdipMultiplyLineTransform((GpLineGradient*)nativeBrush,
  567. matrix->nativeMatrix,
  568. order));
  569. }
  570. Status TranslateTransform(IN REAL dx,
  571. IN REAL dy,
  572. IN MatrixOrder order = MatrixOrderPrepend)
  573. {
  574. return SetStatus(DllExports::GdipTranslateLineTransform((GpLineGradient*)nativeBrush,
  575. dx, dy, order));
  576. }
  577. Status ScaleTransform(IN REAL sx,
  578. IN REAL sy,
  579. IN MatrixOrder order = MatrixOrderPrepend)
  580. {
  581. return SetStatus(DllExports::GdipScaleLineTransform((GpLineGradient*)nativeBrush,
  582. sx, sy, order));
  583. }
  584. Status RotateTransform(IN REAL angle,
  585. IN MatrixOrder order = MatrixOrderPrepend)
  586. {
  587. return SetStatus(DllExports::GdipRotateLineTransform((GpLineGradient*)nativeBrush,
  588. angle, order));
  589. }
  590. Status SetWrapMode(IN WrapMode wrapMode)
  591. {
  592. return SetStatus(DllExports::GdipSetLineWrapMode((GpLineGradient*)nativeBrush,
  593. wrapMode));
  594. }
  595. WrapMode GetWrapMode() const
  596. {
  597. WrapMode wrapMode;
  598. SetStatus(DllExports::GdipGetLineWrapMode((GpLineGradient*)
  599. nativeBrush,
  600. &wrapMode));
  601. return wrapMode;
  602. }
  603. private:
  604. LinearGradientBrush(const LinearGradientBrush &);
  605. LinearGradientBrush& operator=(const LinearGradientBrush &);
  606. protected:
  607. LinearGradientBrush()
  608. {
  609. }
  610. };
  611. //--------------------------------------------------------------------------
  612. // PathGradientBrush object is defined
  613. // in gdipluspath.h.
  614. //--------------------------------------------------------------------------
  615. //--------------------------------------------------------------------------
  616. // Hatch Brush Object
  617. //--------------------------------------------------------------------------
  618. class HatchBrush : public Brush
  619. {
  620. public:
  621. friend class Pen;
  622. HatchBrush(IN HatchStyle hatchStyle,
  623. IN const GdiPlusColor& foreColor,
  624. IN const GdiPlusColor& backColor = GdiPlusColor())
  625. {
  626. GpHatch *brush = NULL;
  627. lastResult = DllExports::GdipCreateHatchBrush(hatchStyle,
  628. foreColor.GetValue(),
  629. backColor.GetValue(),
  630. &brush);
  631. SetNativeBrush(brush);
  632. }
  633. HatchStyle GetHatchStyle() const
  634. {
  635. HatchStyle hatchStyle;
  636. SetStatus(DllExports::GdipGetHatchStyle((GpHatch*)nativeBrush,
  637. &hatchStyle));
  638. return hatchStyle;
  639. }
  640. Status GetForegroundColor(OUT GdiPlusColor* color) const
  641. {
  642. ARGB argb;
  643. if (color == NULL)
  644. {
  645. return SetStatus(InvalidParameter);
  646. }
  647. Status status = SetStatus(DllExports::GdipGetHatchForegroundColor(
  648. (GpHatch*)nativeBrush,
  649. &argb));
  650. color->SetValue(argb);
  651. return status;
  652. }
  653. Status GetBackgroundColor(OUT GdiPlusColor *color) const
  654. {
  655. ARGB argb;
  656. if (color == NULL)
  657. {
  658. return SetStatus(InvalidParameter);
  659. }
  660. Status status = SetStatus(DllExports::GdipGetHatchBackgroundColor(
  661. (GpHatch*)nativeBrush,
  662. &argb));
  663. color->SetValue(argb);
  664. return status;
  665. }
  666. private:
  667. HatchBrush(const HatchBrush &);
  668. HatchBrush& operator=(const HatchBrush &);
  669. protected:
  670. HatchBrush()
  671. {
  672. }
  673. };
  674. #endif