ExtColorCtrl.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:19k
源码类别:

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #if (!defined __EXTCOLORCTRL_H)
  22. #define __EXTCOLORCTRL_H
  23. // 
  24. // The idea of the HSL colorspace algorithm  belongs to Patrick Prache
  25. // The idea of the hexagon pallette algorithm belongs to Jack Mesic
  26. //
  27. #if (!defined __EXT_MFC_DEF_H)
  28. #include <ExtMfcDef.h>
  29. #endif // __EXT_MFC_DEF_H
  30. #if (!defined __EXT_MOUSECAPTURESINK_H)
  31. #include <../Src/ExtMouseCaptureSink.h>
  32. #endif
  33. #if _MSC_VER > 1000
  34. #pragma once
  35. #endif // _MSC_VER > 1000
  36. #include <math.h>
  37. #if (!defined __AFXPLEX_H__)
  38. #include <AfxTempl.h>
  39. #endif
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CExtColorCtrl window
  42. class __PROF_UIS_API CExtColorCtrl
  43. : public CWnd
  44. , public CExtMouseCaptureSink
  45. , public CExtPmBridge
  46. {
  47. // Construction
  48. public:
  49. enum e_mode_t
  50. {
  51. MODE_HEXAGON = 0,
  52. MODE_HSL_PANEL = 1,
  53. MODE_HSL_BASIC_HUE = 2,
  54. MODE_HSL_ROLLER = 3,
  55. MODE_RGB_CUBE = 4,
  56. MODE_RGB_MIX = 5,
  57. MODE_GRAY_SCALE_MIX = 6,
  58. MODE_CMY_CUBE = 7,
  59. MODE_CMY_MIX = 8,
  60. MODE_XYZ_R = 9,
  61. MODE_XYZ_G = 10,
  62. MODE_XYZ_B = 11,
  63. MODE_XYZ_C = 12,
  64. MODE_XYZ_M = 13,
  65. MODE_XYZ_Y = 14,
  66. MODE_DIFF = 15,
  67. MODE_VAL_MIN = 0,
  68. MODE_VAL_MAX = 15,
  69. MODE_NAMED_MIN = 0,
  70. MODE_NAMED_MAX = 14,
  71. };
  72. static CExtSafeString GetColorModeName( e_mode_t eMode );
  73. DECLARE_DYNCREATE( CExtColorCtrl );
  74. DECLARE_CExtPmBridge_MEMBERS( CExtColorCtrl );
  75. CExtColorCtrl(
  76. e_mode_t eMode = MODE_HEXAGON
  77. );
  78. struct __PROF_UIS_API selection_colors_t
  79. {
  80. COLORREF m_clrCurrent;
  81. COLORREF m_clrNew;
  82. COLORREF m_clrPrev;
  83. selection_colors_t(
  84. COLORREF clrCurrent = RGB(255,255,255),
  85. COLORREF clrNew = RGB(255,255,255),
  86. COLORREF clrPrev = RGB(255,255,255)
  87. )
  88. : m_clrCurrent( clrCurrent )
  89. , m_clrNew( clrNew )
  90. , m_clrPrev( clrPrev )
  91. {
  92. }
  93. selection_colors_t(
  94. const selection_colors_t & other
  95. )
  96. : m_clrCurrent( RGB(255,255,255) )
  97. , m_clrNew( RGB(255,255,255) )
  98. , m_clrPrev( RGB(255,255,255) )
  99. {
  100. AssignFromOther( other );
  101. }
  102. ~selection_colors_t()
  103. {
  104. }
  105. selection_colors_t & operator = (
  106. const selection_colors_t & other
  107. )
  108. {
  109. AssignFromOther( other );
  110. return *this;
  111. }
  112. private:
  113. void AssignFromOther(
  114. const selection_colors_t & other
  115. )
  116. {
  117. m_clrCurrent = other.m_clrCurrent;
  118. m_clrNew = other.m_clrNew;
  119. m_clrPrev = other.m_clrPrev;
  120. }
  121. }; // struct selection_colors_t
  122. // Attributes
  123. public:
  124. private:
  125. e_mode_t m_eMode;
  126. bool m_bMouseTracking;
  127. struct __PROF_UIS_API any_picker_data_t
  128. {
  129. enum eMoveMode_t
  130. {
  131. _MM_NONE = 0,
  132. _MM_RED = 1,
  133. _MM_GREEN = 2,
  134. _MM_BLUE = 3,
  135. _MM_SLIDER = 4,
  136. _MM_PICKER = 5,
  137. _MM_CELL_SCAN = 6,
  138. };
  139. eMoveMode_t m_eMoveMode;
  140. CSize m_sizeTotal;
  141. COLORREF m_clr;
  142. COLORREF m_clrOld;
  143. double
  144. m_fCurrLuminance,
  145. m_fCurrSaturation,
  146. m_fCurrHue;
  147. any_picker_data_t();
  148. ~any_picker_data_t();
  149. virtual void OnInit(
  150. CDC & dc,
  151. CPalette * pPalette,
  152. CSize sizeTotal,
  153. bool bOnlySizeChanged
  154. );
  155. virtual void OnDone() = 0;
  156. virtual void OnDraw(
  157. CDC & dc,
  158. CPalette * pPalette
  159. ) = 0;
  160. virtual void OnLButtonDown(
  161. UINT nFlags,
  162. CPoint point
  163. ) = 0; 
  164. virtual void OnLButtonUp(
  165. UINT nFlags,
  166. CPoint point
  167. ) = 0; 
  168. virtual void OnMouseMove(
  169. UINT nFlags,
  170. CPoint point
  171. ) = 0; 
  172. virtual void OnSetOldRGB(
  173. COLORREF clr
  174. );
  175. virtual void OnSetRGB(
  176. COLORREF clr
  177. );
  178. virtual void OnSetHLS(
  179. double hue,
  180. double luminance,
  181. double saturation
  182. );
  183. }; // struct any_picker_data_t
  184. struct __PROF_UIS_API cell_t
  185. {
  186. COLORREF m_clr;
  187. CRect m_rcPosition;
  188. int m_nBorderSize;
  189. CPoint m_vPoints[6];
  190. bool m_bAtFirstType;
  191. cell_t( COLORREF clr = RGB(255,255,255) )
  192. : m_clr( clr )
  193. , m_nBorderSize( 1 )
  194. , m_bAtFirstType( true )
  195. {
  196. for( int i = 0; i < 6; i++ )
  197. m_vPoints[i] = CPoint(0,0);
  198. }
  199. cell_t( const cell_t & other )
  200. : m_clr( RGB(255,255,255) )
  201. , m_nBorderSize( 1 )
  202. , m_bAtFirstType( true )
  203. {
  204. for( int i = 0; i < 6; i++ )
  205. m_vPoints[i] = CPoint(0,0);
  206. AssignFromOther( other );
  207. }
  208. ~cell_t()
  209. {
  210. }
  211. cell_t& operator = ( const cell_t & other )
  212. {
  213. AssignFromOther( other );
  214. return *this;
  215. }
  216. cell_t& operator = ( COLORREF clr )
  217. {
  218. m_clr = clr;
  219. return *this;
  220. }
  221. void AdjustCellPosition(
  222. int x,
  223. int y,
  224. int nWidth
  225. )
  226. {
  227. float nSideLength =
  228. (float)((float)nWidth * 0.57735026918962F);
  229. m_vPoints[0] = CPoint(MoreNear(x - (float)(nWidth / 2)),MoreNear(y - (float)(nSideLength/2)));
  230. m_vPoints[1] = CPoint(MoreNear((float)x),MoreNear(y - (float)(nWidth / 2)));
  231. m_vPoints[2] = CPoint(MoreNear(x + (float)(nWidth / 2)),MoreNear(y - (float)(nSideLength/2)));
  232. m_vPoints[3] = CPoint(MoreNear(x + (float)(nWidth / 2)),MoreNear(y + (float)(nSideLength/2))+1);
  233. m_vPoints[4] = CPoint(MoreNear((float)x),MoreNear(y + (float)(nWidth / 2))+1);
  234. m_vPoints[5] = CPoint(MoreNear(x - (float)(nWidth / 2)),MoreNear(y + (float)(nSideLength/2))+1);
  235. }
  236. static int MoreNear(float fNear)
  237. {
  238. int nRound = (int)fabs(fNear);
  239. nRound = (fabs(fNear) - (float)nRound >= 0.5) ? nRound+1 : nRound;
  240. return (fNear < 0) ? -nRound : nRound;
  241. }
  242. void SetRect( const CRect & rcPos )
  243. {
  244. m_rcPosition = rcPos;
  245. }
  246. CRect GetRect() const
  247. {
  248. if( !m_bAtFirstType )
  249. {
  250. return m_rcPosition;
  251. }
  252. CRect rcBounds;
  253. rcBounds.left = rcBounds.right  = m_vPoints[0].x;
  254. rcBounds.top  = rcBounds.bottom = m_vPoints[0].y;
  255. for (int i=1; i<6; i++)
  256. {
  257. rcBounds.left   = min(rcBounds.left,   m_vPoints[i].x);
  258. rcBounds.top    = min(rcBounds.top,    m_vPoints[i].y);
  259. rcBounds.right  = max(rcBounds.right,  m_vPoints[i].x);
  260. rcBounds.bottom = max(rcBounds.bottom, m_vPoints[i].y);
  261. }
  262. return rcBounds;
  263. }
  264. void SetCellColor(const COLORREF &cr) 
  265. m_clr = cr; 
  266. }
  267. void OnDraw(
  268. CDC & dc,
  269. CPalette * pPalette,
  270. bool bFocused
  271. );
  272. BOOL HitTest(CPoint point)
  273. {
  274. if( m_bAtFirstType )
  275. {
  276. CRgn rgn;
  277. rgn.CreatePolygonRgn(m_vPoints, 6, ALTERNATE);
  278. return rgn.PtInRegion (point);
  279. }
  280. else
  281. {
  282. CRgn rgn;
  283. rgn.CreateRectRgn(m_rcPosition.left,m_rcPosition.top,m_rcPosition.right,m_rcPosition.bottom);
  284. return rgn.PtInRegion (point);
  285. }
  286. }
  287. private:
  288. void AssignFromOther( const cell_t & other )
  289. {
  290. m_clr = other.m_clr;
  291. m_rcPosition = other.m_rcPosition;
  292. m_nBorderSize = other.m_nBorderSize;
  293. for( int i = 0; i < 6; i++ )
  294. m_vPoints[i] = other.m_vPoints[i];
  295. m_bAtFirstType = other.m_bAtFirstType;
  296. }
  297. }; // struct cell_t
  298. typedef
  299. CArray < cell_t, cell_t & >
  300. vCells_t;
  301. struct __PROF_UIS_API cell_based_data_t : public any_picker_data_t
  302. {
  303. vCells_t m_vCells;
  304. cell_based_data_t()
  305. {
  306. }
  307. ~cell_based_data_t()
  308. {
  309. ReleaseAll();
  310. }
  311. virtual void OnInit(
  312. CDC & dc,
  313. CPalette * pPalette,
  314. CSize sizeTotal,
  315. bool bOnlySizeChanged
  316. );
  317. virtual void OnDone();
  318. virtual void OnDraw(
  319. CDC & dc,
  320. CPalette * pPalette
  321. );
  322. virtual void OnLButtonDown(
  323. UINT nFlags,
  324. CPoint point
  325. ); 
  326. virtual void OnLButtonUp(
  327. UINT nFlags,
  328. CPoint point
  329. ); 
  330. virtual void OnMouseMove(
  331. UINT nFlags,
  332. CPoint point
  333. ); 
  334. private:
  335. void Generate(
  336. bool bOnlySizeChanged
  337. );
  338. void ReleaseAll();
  339. }; // struct cell_based_data_t
  340. struct __PROF_UIS_API grayscale_mixer_data_t : public cell_based_data_t
  341. {
  342. grayscale_mixer_data_t()
  343. {
  344. }
  345. ~grayscale_mixer_data_t()
  346. {
  347. }
  348. virtual void OnInit(
  349. CDC & dc,
  350. CPalette * pPalette,
  351. CSize sizeTotal,
  352. bool bOnlySizeChanged
  353. );
  354. virtual void OnDraw(
  355. CDC & dc,
  356. CPalette * pPalette
  357. );
  358. }; // struct grayscale_mixer_data_t
  359. struct __PROF_UIS_API rgb_mixer_data_t : public cell_based_data_t
  360. {
  361. rgb_mixer_data_t()
  362. {
  363. }
  364. ~rgb_mixer_data_t()
  365. {
  366. }
  367. virtual void OnInit(
  368. CDC & dc,
  369. CPalette * pPalette,
  370. CSize sizeTotal,
  371. bool bOnlySizeChanged
  372. );
  373. virtual void OnDraw(
  374. CDC & dc,
  375. CPalette * pPalette
  376. );
  377. virtual void OnMouseMove(
  378. UINT nFlags,
  379. CPoint point
  380. ); 
  381. }; // struct rgb_mixer_data_t
  382. struct __PROF_UIS_API rgb_cube_data_t : public any_picker_data_t
  383. {
  384. CDC m_dcCube;
  385. CSize m_sizeHalfSelBox;
  386. CRect m_rcCube;
  387. int m_nSideGap;
  388. CPoint
  389. m_ptCubeR,m_ptCubeG,m_ptCubeB,m_ptCubeC,
  390. m_ptClrR,m_ptClrG,m_ptClrB,m_ptClrCurr,
  391. m_ptPlainRG,m_ptPlainRB,m_ptPlainGB;
  392. rgb_cube_data_t();
  393. ~rgb_cube_data_t();
  394. virtual void OnInit(
  395. CDC & dc,
  396. CPalette * pPalette,
  397. CSize sizeTotal,
  398. bool bOnlySizeChanged
  399. );
  400. virtual void OnDone();
  401. virtual void OnDraw(
  402. CDC & dc,
  403. CPalette * pPalette
  404. );
  405. virtual void OnLButtonDown(
  406. UINT nFlags,
  407. CPoint point
  408. ); 
  409. virtual void OnLButtonUp(
  410. UINT nFlags,
  411. CPoint point
  412. ); 
  413. virtual void OnMouseMove(
  414. UINT nFlags,
  415. CPoint point
  416. ); 
  417. virtual void OnSetRGB(
  418. COLORREF clr
  419. );
  420. virtual void OnSetHLS(
  421. double hue,
  422. double luminance,
  423. double saturation
  424. );
  425. private:
  426. void ReleaseAll();
  427. void Generate(
  428. CDC & dc,
  429. CPalette * pPalette
  430. );
  431. void RecalcLayout();
  432. }; // struct rgb_cube_data_t
  433. struct __PROF_UIS_API cmy_mixer_data_t : public cell_based_data_t
  434. {
  435. cmy_mixer_data_t()
  436. {
  437. }
  438. ~cmy_mixer_data_t()
  439. {
  440. }
  441. virtual void OnInit(
  442. CDC & dc,
  443. CPalette * pPalette,
  444. CSize sizeTotal,
  445. bool bOnlySizeChanged
  446. );
  447. virtual void OnDraw(
  448. CDC & dc,
  449. CPalette * pPalette
  450. );
  451. virtual void OnMouseMove(
  452. UINT nFlags,
  453. CPoint point
  454. ); 
  455. }; // struct cmy_mixer_data_t
  456. struct __PROF_UIS_API cmy_cube_data_t : public any_picker_data_t
  457. {
  458. CDC m_dcCube;
  459. CSize m_sizeHalfSelBox;
  460. CRect m_rcCube;
  461. int m_nSideGap;
  462. CPoint
  463. m_ptCubeR,m_ptCubeG,m_ptCubeB,m_ptCubeC,
  464. m_ptClrR,m_ptClrG,m_ptClrB,m_ptClrCurr,
  465. m_ptPlainRG,m_ptPlainRB,m_ptPlainGB;
  466. cmy_cube_data_t();
  467. ~cmy_cube_data_t();
  468. virtual void OnInit(
  469. CDC & dc,
  470. CPalette * pPalette,
  471. CSize sizeTotal,
  472. bool bOnlySizeChanged
  473. );
  474. virtual void OnDone();
  475. virtual void OnDraw(
  476. CDC & dc,
  477. CPalette * pPalette
  478. );
  479. virtual void OnLButtonDown(
  480. UINT nFlags,
  481. CPoint point
  482. ); 
  483. virtual void OnLButtonUp(
  484. UINT nFlags,
  485. CPoint point
  486. ); 
  487. virtual void OnMouseMove(
  488. UINT nFlags,
  489. CPoint point
  490. ); 
  491. virtual void OnSetRGB(
  492. COLORREF clr
  493. );
  494. virtual void OnSetHLS(
  495. double hue,
  496. double luminance,
  497. double saturation
  498. );
  499. private:
  500. void ReleaseAll();
  501. void Generate(
  502. CDC & dc,
  503. CPalette * pPalette
  504. );
  505. void RecalcLayout();
  506. }; // struct cmy_cube_data_t
  507. struct __PROF_UIS_API hsl_panel_data_t : public any_picker_data_t
  508. {
  509. CDC m_dcPicker;
  510. CDC m_dcSlider;
  511. bool m_bBmpValidPicker;
  512. bool m_bBmpValidSlider;
  513. CPoint m_ptMousePos; // position of the picker
  514. SIZE m_sizeColorPicker;
  515. SIZE m_sizeColorSlider;
  516. int m_nLumBarDy;
  517. int m_nAreaGap;
  518. hsl_panel_data_t();
  519. ~hsl_panel_data_t();
  520. virtual void OnInit(
  521. CDC & dc,
  522. CPalette * pPalette,
  523. CSize sizeTotal,
  524. bool bOnlySizeChanged
  525. );
  526. virtual void OnDone();
  527. virtual void OnDraw(
  528. CDC & dc,
  529. CPalette * pPalette
  530. );
  531. virtual void OnLButtonDown(
  532. UINT nFlags,
  533. CPoint point
  534. ); 
  535. virtual void OnLButtonUp(
  536. UINT nFlags,
  537. CPoint point
  538. ); 
  539. virtual void OnMouseMove(
  540. UINT nFlags,
  541. CPoint point
  542. ); 
  543. virtual void OnSetRGB(
  544. COLORREF clr
  545. );
  546. virtual void OnSetHLS(
  547. double hue,
  548. double luminance,
  549. double saturation
  550. );
  551. private:
  552. void ReleaseAll();
  553. protected:
  554. virtual void GenerateSlider(
  555. CDC &dc,
  556. CPalette * pPalette
  557. );
  558. virtual void GeneratePicker(
  559. CDC &dc,
  560. CPalette * pPalette
  561. );
  562. void DrawCrossAt(
  563. CPoint & point,
  564. CDC & dc,
  565. SIZE & sz
  566. );
  567. }; // struct hsl_panel_data_t
  568. struct __PROF_UIS_API hsl_basic_hue_data_t : public hsl_panel_data_t
  569. {
  570. hsl_basic_hue_data_t()
  571. {
  572. }
  573. ~hsl_basic_hue_data_t()
  574. {
  575. }
  576. virtual void OnDraw(
  577. CDC & dc,
  578. CPalette * pPalette
  579. );
  580. virtual void OnMouseMove(
  581. UINT nFlags,
  582. CPoint point
  583. ); 
  584. virtual void OnSetRGB(
  585. COLORREF clr
  586. );
  587. virtual void OnSetHLS(
  588. double hue,
  589. double luminance,
  590. double saturation
  591. );
  592. protected:
  593. virtual void GenerateSlider(
  594. CDC &dc,
  595. CPalette * pPalette
  596. );
  597. virtual void GeneratePicker(
  598. CDC &dc,
  599. CPalette * pPalette
  600. );
  601. }; // struct hsl_basic_hue_data_t
  602. struct __PROF_UIS_API hsl_roller_data_t : public hsl_panel_data_t
  603. {
  604. hsl_roller_data_t()
  605. {
  606. m_ptCenterSpaceHueSat.x = m_ptCenterSpaceHueSat.y = 0;
  607. m_nSatTranslation = 1;
  608. }
  609. ~hsl_roller_data_t()
  610. {
  611. }
  612. virtual void OnDraw(
  613. CDC & dc,
  614. CPalette * pPalette
  615. );
  616. virtual void OnLButtonDown(
  617. UINT nFlags,
  618. CPoint point
  619. ); 
  620. virtual void OnLButtonUp(
  621. UINT nFlags,
  622. CPoint point
  623. ); 
  624. virtual void OnMouseMove(
  625. UINT nFlags,
  626. CPoint point
  627. ); 
  628. virtual void OnSetRGB(
  629. COLORREF clr
  630. );
  631. virtual void OnSetHLS(
  632. double hue,
  633. double luminance,
  634. double saturation
  635. );
  636. protected:
  637. virtual void GeneratePicker(
  638. CDC &dc,
  639. CPalette * pPalette
  640. );
  641. CPoint m_ptCenterSpaceHueSat;
  642. CRgn m_rgnSpaceHueSat,m_rgnMouseSelHueSat;
  643. INT m_nSatTranslation;
  644. }; // struct hsl_roller_data_t
  645. struct __PROF_UIS_API xyz_plain_data_t : public hsl_panel_data_t
  646. {
  647. enum eXYZmode_t
  648. {
  649. MXYZ_R = 0,
  650. MXYZ_G = 1,
  651. MXYZ_B = 2,
  652. MXYZ_C = 3,
  653. MXYZ_M = 4,
  654. MXYZ_Y = 5,
  655. MXYZ_MIN = 0,
  656. MXYZ_MAX = 5
  657. };
  658. eXYZmode_t m_eXYZmode;
  659. xyz_plain_data_t(
  660. eXYZmode_t eXYZmode
  661. )
  662. : m_eXYZmode( eXYZmode )
  663. {
  664. ASSERT(
  665. MXYZ_MIN <= m_eXYZmode
  666. && m_eXYZmode <= MXYZ_MAX
  667. );
  668. }
  669. ~xyz_plain_data_t()
  670. {
  671. }
  672. virtual void OnDraw(
  673. CDC & dc,
  674. CPalette * pPalette
  675. );
  676. virtual void OnMouseMove(
  677. UINT nFlags,
  678. CPoint point
  679. ); 
  680. virtual void OnSetRGB(
  681. COLORREF clr
  682. );
  683. virtual void OnSetHLS(
  684. double hue,
  685. double luminance,
  686. double saturation
  687. );
  688. protected:
  689. virtual void GenerateSlider(
  690. CDC &dc,
  691. CPalette * pPalette
  692. );
  693. virtual void GeneratePicker(
  694. CDC &dc,
  695. CPalette * pPalette
  696. );
  697. COLORREF CalcColorPicker( int nX, int nY );
  698. COLORREF CalcColorSlider( int nZ );
  699. void CalcPoints(
  700. int &nX,
  701. int &nY,
  702. int &nZ,
  703. bool bDcScale
  704. );
  705. void RecalcByZ(
  706. int nZ
  707. );
  708. }; // struct xyz_plain_data_t
  709. struct __PROF_UIS_API diff_data_t : public grayscale_mixer_data_t
  710. {
  711. diff_data_t()
  712. {
  713. }
  714. ~diff_data_t()
  715. {
  716. }
  717. virtual void OnInit(
  718. CDC & dc,
  719. CPalette * pPalette,
  720. CSize sizeTotal,
  721. bool bOnlySizeChanged
  722. );
  723. virtual void OnDraw(
  724. CDC & dc,
  725. CPalette * pPalette
  726. );
  727. virtual void OnSetRGB(
  728. COLORREF clr
  729. );
  730. virtual void OnSetHLS(
  731. double hue,
  732. double luminance,
  733. double saturation
  734. );
  735. private:
  736. void Generate( bool bOnlySizeChanged );
  737. }; // struct diff_data_t
  738. public:
  739. selection_colors_t m_selClrs;
  740. private:
  741. cell_based_data_t m_hexagon_data;
  742. grayscale_mixer_data_t m_grayscale_mixer_data;
  743. rgb_mixer_data_t m_rgb_mixer_data;
  744. rgb_cube_data_t m_rgb_cube_data;
  745. cmy_mixer_data_t m_cmy_mixer_data;
  746. cmy_cube_data_t m_cmy_cube_data;
  747. hsl_panel_data_t m_hsl_panel_data;
  748. hsl_basic_hue_data_t m_hsl_basic_hue_data;
  749. hsl_roller_data_t m_hsl_roller_data;
  750. xyz_plain_data_t m_xyz_r;
  751. xyz_plain_data_t m_xyz_g;
  752. xyz_plain_data_t m_xyz_b;
  753. xyz_plain_data_t m_xyz_c;
  754. xyz_plain_data_t m_xyz_m;
  755. xyz_plain_data_t m_xyz_y;
  756. diff_data_t m_diff_data;
  757. any_picker_data_t * m_algorithms[MODE_VAL_MAX+1];
  758. COLORREF m_clrBackground;
  759. // Operations
  760. public:
  761. void SetupColor(
  762. COLORREF clr,
  763. bool bNotifyChanged
  764. );
  765. void SetupOldColor( // suggested by Olaf Baeyens
  766. COLORREF clr
  767. );
  768. COLORREF SetBkColor( COLORREF clrBk );
  769. COLORREF GetBkColor() const;
  770. // get / set mode
  771. operator e_mode_t() const
  772. {
  773. return m_eMode;
  774. }
  775. CExtColorCtrl & operator = ( e_mode_t eMode )
  776. {
  777. ASSERT(
  778. MODE_VAL_MIN <= eMode
  779. && eMode <= MODE_VAL_MAX
  780. );
  781. _Cleanup();
  782. m_eMode = eMode;
  783. _Init( false );
  784. Invalidate();
  785. UpdateWindow();
  786. return *this;
  787. }
  788. private:
  789. void _Cleanup();
  790. void _Init( bool bOnlySizeChanged );
  791. void _MouseTracking( bool bStart = true );
  792. public:
  793. static UINT g_nMsgColorChanged;
  794. protected:
  795. virtual void NotifyColorChanged();
  796. virtual void DoPaint( 
  797. CDC * pDC,
  798. CRect & rcClient
  799. );
  800. // Overrides
  801. // ClassWizard generated virtual function overrides
  802. //{{AFX_VIRTUAL(CExtColorCtrl)
  803. protected:
  804. virtual void PreSubclassWindow();
  805. //}}AFX_VIRTUAL
  806. // Implementation
  807. public:
  808. virtual ~CExtColorCtrl();
  809. // Generated message map functions
  810. protected:
  811. //{{AFX_MSG(CExtColorCtrl)
  812. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  813. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  814. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  815. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  816. afx_msg void OnCancelMode();
  817. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  818. afx_msg void OnPaint();
  819. afx_msg BOOL OnQueryNewPalette();
  820. afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
  821. afx_msg void OnKillFocus(CWnd* pNewWnd);
  822. afx_msg void OnCaptureChanged(CWnd *pWnd);
  823. afx_msg void OnSize(UINT nType, int cx, int cy);
  824. afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  825. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  826. afx_msg void OnMButtonDblClk(UINT nFlags, CPoint point);
  827. afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
  828. afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
  829. afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
  830. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  831. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  832. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  833. //}}AFX_MSG
  834. DECLARE_MESSAGE_MAP()
  835. };
  836. __PROF_UIS_API void AFXAPI __EXT_MFC_DDX_ColorCtrl( CDataExchange * pDX, INT nIDC, COLORREF & value );
  837. /////////////////////////////////////////////////////////////////////////////
  838. //{{AFX_INSERT_LOCATION}}
  839. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  840. #endif // __EXTCOLORCTRL_H