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

界面编程

开发平台:

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 __EXT_CMD_ICON_H)
  22. #define __EXT_CMD_ICON_H
  23. #if (!defined __EXT_MFC_DEF_H)
  24. #include <ExtMfcDef.h>
  25. #endif // __EXT_MFC_DEF_H
  26. #include <math.h>
  27. class CExtPaintManager;
  28. #define __EXT_MFC_RGBA(r,g,b,a) (((COLORREF)RGB(r,g,b))|(((DWORD)(BYTE)(a))<<24))
  29. #define __EXT_MFC_GetAValue(rgba)   ((BYTE)((rgba)>>24))
  30. #define __EXT_MFC_SHADEBLENDCAPS      45
  31. #define __EXT_MFC_SB_NONE             0x00000000
  32. #define __EXT_MFC_SB_CONST_ALPHA      0x00000001
  33. #define __EXT_MFC_SB_PIXEL_ALPHA      0x00000002
  34. #define __EXT_MFC_SB_PREMULT_ALPHA    0x00000004
  35. #define __EXT_MFC_SB_GRAD_RECT        0x00000010
  36. #define __EXT_MFC_SB_GRAD_TRI         0x00000020
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CExtBitmap
  39. #define __EXT_BMP_FLAG_PREMULTIPLIED_RGB_CHANNELS 0x00000001
  40. #define __EXT_BMP_FLAG_NO_RTL_DETECTION 0x00000002
  41. #define __EXT_BMP_FLAG_USER_DEFINED_29 0x00000004
  42. #define __EXT_BMP_FLAG_USER_DEFINED_28 0x00000008
  43. #define __EXT_BMP_FLAG_USER_DEFINED_27 0x00000010
  44. #define __EXT_BMP_FLAG_USER_DEFINED_26 0x00000020
  45. #define __EXT_BMP_FLAG_USER_DEFINED_25 0x00000040
  46. #define __EXT_BMP_FLAG_USER_DEFINED_24 0x00000080
  47. #define __EXT_BMP_FLAG_USER_DEFINED_23 0x00000100
  48. #define __EXT_BMP_FLAG_USER_DEFINED_22 0x00000200
  49. #define __EXT_BMP_FLAG_USER_DEFINED_21 0x00000400
  50. #define __EXT_BMP_FLAG_USER_DEFINED_20 0x00000800
  51. #define __EXT_BMP_FLAG_USER_DEFINED_19 0x00001000
  52. #define __EXT_BMP_FLAG_USER_DEFINED_18 0x00002000
  53. #define __EXT_BMP_FLAG_USER_DEFINED_17 0x00004000
  54. #define __EXT_BMP_FLAG_USER_DEFINED_16 0x00008000
  55. #define __EXT_BMP_FLAG_USER_DEFINED_15 0x00010000
  56. #define __EXT_BMP_FLAG_USER_DEFINED_14 0x00020000
  57. #define __EXT_BMP_FLAG_USER_DEFINED_13 0x00040000
  58. #define __EXT_BMP_FLAG_USER_DEFINED_12 0x00080000
  59. #define __EXT_BMP_FLAG_USER_DEFINED_11 0x00100000
  60. #define __EXT_BMP_FLAG_USER_DEFINED_10 0x00200000
  61. #define __EXT_BMP_FLAG_USER_DEFINED_09 0x00400000
  62. #define __EXT_BMP_FLAG_USER_DEFINED_08 0x00800000
  63. #define __EXT_BMP_FLAG_USER_DEFINED_07 0x01000000
  64. #define __EXT_BMP_FLAG_USER_DEFINED_06 0x02000000
  65. #define __EXT_BMP_FLAG_USER_DEFINED_05 0x04000000
  66. #define __EXT_BMP_FLAG_USER_DEFINED_04 0x08000000
  67. #define __EXT_BMP_FLAG_USER_DEFINED_03 0x10000000
  68. #define __EXT_BMP_FLAG_USER_DEFINED_02 0x20000000
  69. #define __EXT_BMP_FLAG_USER_DEFINED_01 0x40000000
  70. #define __EXT_BMP_FLAG_USER_DEFINED_00 0x80000000
  71. class __PROF_UIS_API CExtBitmap
  72. {
  73. protected:
  74. LPBYTE m_pImageBuffer;
  75. public:
  76. class __PROF_UIS_API Filter
  77. {
  78. public:
  79. enum e_filter_type
  80. {
  81. box           =  0,
  82. linear        =  1, // filter width is not used
  83. bilinear      =  2,
  84. hermite       =  3, // filter width is not used
  85. sinc          =  4, // filter width is not used
  86. catmull_rom   =  5, // filter width is not used
  87. b_spline      =  6, // filter width is not used
  88. blackman      =  7,
  89. lanczos       =  8,
  90. quadratic     =  9, // filter width is not used
  91. gaussian      = 10,
  92. hamming       = 11,
  93. bicubic       = 12, // filter width is not used
  94. ft_min_number =  0,
  95. ft_max_number = 12,
  96. ft_default    =  0,
  97. };
  98. protected:
  99. e_filter_type m_eFT;
  100. double m_lfWidth, m_arrParmBuffer[10];
  101. static double stat_rCalc( double lfV );
  102. public:
  103. Filter(
  104. e_filter_type eFT = ft_default,
  105. double * pArrParms = NULL,
  106. INT nParmCount = 0
  107. );
  108. virtual ~Filter();
  109. virtual double Process(
  110. double lfV
  111. );
  112. static double static_DefaultWidth(
  113. e_filter_type eFT
  114. );
  115. virtual e_filter_type FilterTypeGet() const;
  116. virtual void FilterTypeSet(
  117. e_filter_type eFT
  118. );
  119. virtual double FilterWidthGet() const;
  120. virtual void FilterWidthSet(
  121. double lfWidth
  122. );
  123. virtual void FilterWidthSetDefault();
  124. static bool stat_FilterWidthIsUsed(
  125. e_filter_type eFT
  126. );
  127. virtual bool FilterWidthIsUsed() const;
  128. virtual INT FilterParameterGetCount();
  129. virtual double FilterParameterGetAt(
  130. INT nPos
  131. ) const;
  132. virtual void FilterParameterSetAt(
  133. INT nPos,
  134. double lfV
  135. );
  136. static __EXT_MFC_SAFE_LPCTSTR stat_FilterNameGet(
  137. e_filter_type eFT
  138. );
  139. virtual __EXT_MFC_SAFE_LPCTSTR FilterNameGet() const;
  140. }; // class Filter
  141. private:
  142. class __PROF_UIS_API WT
  143. {
  144. struct __PROF_UIS_API WE
  145. {
  146. public:
  147. double * m_pWV;
  148. INT m_nMin, m_nMax;
  149. WE()
  150. : m_pWV( NULL )
  151. , m_nMin( 0 )
  152. , m_nMax( 0 )
  153. {
  154. }
  155. ~WE()
  156. {
  157. if( m_pWV != NULL )
  158. delete [ ] m_pWV;
  159. }
  160. }; // struct WE
  161. protected:
  162. UINT m_nImageLineSize, m_nReviewSize;
  163. WE * m_pWT;
  164. public:
  165. WT(
  166. Filter & _f,
  167. UINT nLineSizeDst,
  168. UINT nLineSizeSrc
  169. );
  170. ~WT();
  171. INT GetMin( INT nPos ) const
  172. {
  173. return m_pWT[ nPos ].m_nMin;
  174. }
  175. INT GetMax( INT nPos ) const
  176. {
  177. return m_pWT[ nPos ].m_nMax;
  178. }
  179. double Weight(
  180. INT nPosDst,
  181. INT nPosSrc
  182. ) const
  183. {
  184. return m_pWT[ nPosDst ].m_pWV[ nPosSrc ];
  185. }
  186. }; // class WT
  187. public:
  188. enum e_DrawMethod_t
  189. {
  190. __EDM_HOLLOW = 0,
  191. __EDM_CENTER = 1,
  192. __EDM_STRETCH = 2,
  193. __EDM_TILE_H = 3,
  194. __EDM_TILE_V = 4,
  195. __EDM_TILE = 5,
  196. __EDM_COUNT = 6,
  197. __EDM_DEFAULT = __EDM_STRETCH,
  198. };
  199. CExtBitmap();
  200. CExtBitmap(
  201. const CExtBitmap & other
  202. );
  203. virtual ~CExtBitmap();
  204. CExtBitmap & operator = (
  205. const CExtBitmap & other
  206. );
  207. virtual bool AssignFromHICON(
  208. HICON hIcon,
  209. bool bForceLowColorMode = false
  210. );
  211. virtual bool AssignFromOther(
  212. const CExtBitmap & other,
  213. bool bEnableThrowException = false
  214. );
  215. virtual void Empty();
  216. virtual bool IsEmpty() const;
  217. virtual void SerializeUnpacked( CArchive & ar );
  218. virtual bool Clipboard_Copy(
  219. HWND hWnd = NULL,
  220. bool bProvideWinFormat = true,
  221. bool bProvideExtFormat = true
  222. ) const;
  223. virtual bool Clipboard_Paste(
  224. HWND hWnd = NULL,
  225. bool bProvideWinFormat = true,
  226. bool bProvideExtFormat = true
  227. );
  228. virtual bool Clipboard_CanCopy(
  229. bool bProvideWinFormat = true,
  230. bool bProvideExtFormat = true
  231. ) const;
  232. virtual bool Clipboard_CanPaste(
  233. HWND hWnd = NULL,
  234. bool bProvideWinFormat = true,
  235. bool bProvideExtFormat = true
  236. ) const;
  237. virtual CLIPFORMAT Clipboard_GetExtFormat() const;
  238. static __EXT_MFC_SAFE_LPCTSTR g_strExtBitmapClipboardFormatName;
  239. virtual CExtSafeString Clipboard_GetExtFormatName() const;
  240. bool Process(
  241. LONG * pMatrix,
  242. LONG nMatrixSize,
  243. LONG nFactor,
  244. LONG nOffset,
  245. LPCRECT pRect = NULL
  246. );
  247. virtual bool Flip(
  248. bool bHorizontal,
  249. bool bVertVertical,
  250. LPCRECT pRectFlip = NULL
  251. );
  252. bool FlipHorizontal(
  253. LPCRECT pRectFlip = NULL
  254. );
  255. bool FlipVertical(
  256. LPCRECT pRectFlip = NULL
  257. );
  258. virtual bool Scale(
  259. INT nWidth,
  260. INT nHeight,
  261. Filter & _f
  262. );
  263. bool Scale(
  264. INT nWidth,
  265. INT nHeight
  266. );
  267. bool LoadBMP_Resource(
  268. __EXT_MFC_SAFE_LPCTSTR sResourceID,
  269. __EXT_MFC_SAFE_LPCTSTR sResourceType = RT_BITMAP, // default bitmap section
  270. HINSTANCE hInst = NULL, // find it automatically
  271. bool bMake32 = false,
  272. bool bEnableThrowException = false
  273. );
  274. bool LoadBMP_Resource(
  275. HINSTANCE hInst,
  276. HRSRC hRsrc,
  277. bool bMake32 = false,
  278. bool bEnableThrowException = false
  279. );
  280. bool LoadBMP_Buffer(
  281. LPCVOID pBuffer,
  282. UINT nByteCount,
  283. bool bMake32 = false,
  284. bool bEnableThrowException = false,
  285. bool bResourceFormat = false
  286. );
  287. bool LoadBMP_File(
  288. __EXT_MFC_SAFE_LPCTSTR strFilePath,
  289. bool bMake32 = false,
  290. bool bEnableThrowException = false,
  291. bool bResourceFormat = false
  292. );
  293. bool LoadBMP_File(
  294. CFile & _file,
  295. bool bMake32 = false,
  296. bool bEnableThrowException = false,
  297. bool bResourceFormat = false
  298. );
  299. bool LoadBMP(
  300. CArchive & ar,
  301. bool bMake32 = false,
  302. bool bEnableThrowException = false,
  303. bool bResourceFormat = false
  304. );
  305. bool SaveBMP_File(
  306. __EXT_MFC_SAFE_LPCTSTR strFilePath,
  307. bool bMake32 = false,
  308. bool bEnableThrowException = false,
  309. bool bUseIndexedRLE = true
  310. );
  311. bool SaveBMP_File(
  312. CFile & _file,
  313. bool bMake32 = false,
  314. bool bEnableThrowException = false,
  315. bool bUseIndexedRLE = true
  316. );
  317. bool SaveBMP(
  318. CArchive & ar,
  319. bool bMake32 = false,
  320. bool bEnableThrowException = false,
  321. bool bUseIndexedRLE = true
  322. );
  323. #ifndef _AFX_NO_OLE_SUPPORT
  324. static bool stat_OlePictureLoad(
  325. IStream * pStream, DWORD dwImageSize, IPicture ** ppPicture,
  326. CSize * pSizeImage, OLE_XSIZE_HIMETRIC * p_nWidthHM, OLE_YSIZE_HIMETRIC * p_nHeightHM,
  327. bool bShowMsgBoxes = false
  328. );
  329. static bool stat_OlePictureLoad(
  330. LPCTSTR strPictureFilePath, IPicture ** ppPicture,
  331. CSize * pSizeImage, OLE_XSIZE_HIMETRIC * p_nWidthHM, OLE_YSIZE_HIMETRIC * p_nHeightHM,
  332. bool bShowMsgBoxes = false
  333. );
  334. bool OlePictureLoad(
  335. __EXT_MFC_SAFE_LPCTSTR sResourceID,
  336. __EXT_MFC_SAFE_LPCTSTR sResourceType = RT_BITMAP, // default bitmap section
  337. HINSTANCE hInst = NULL, // find it automatically
  338. bool bMake32 = false,
  339. bool bEnableThrowException = false,
  340. bool bShowMsgBoxes = false
  341. );
  342. bool OlePictureLoad(
  343. HINSTANCE hInst,
  344. HRSRC hRsrc,
  345. bool bMake32 = false,
  346. bool bEnableThrowException = false,
  347. bool bShowMsgBoxes = false
  348. );
  349. bool OlePictureLoad(
  350. CFile & _file,
  351. bool bMake32 = false,
  352. bool bEnableThrowException = false,
  353. bool bShowMsgBoxes = false
  354. );
  355. bool OlePictureLoad(
  356. CArchive & ar,
  357. bool bMake32 = false,
  358. bool bEnableThrowException = false,
  359. bool bShowMsgBoxes = false
  360. );
  361. bool OlePictureLoad(
  362. IStream * pStream,
  363. bool bMake32 = false,
  364. bool bEnableThrowException = false,
  365. bool bShowMsgBoxes = false
  366. );
  367. bool OlePictureLoad(
  368. IStream * pStream,
  369. DWORD dwImageSize,
  370. bool bMake32 = false,
  371. bool bEnableThrowException = false,
  372. bool bShowMsgBoxes = false
  373. );
  374. bool OlePictureLoad(
  375. LPCTSTR strPictureFilePath,
  376. bool bMake32,
  377. bool bEnableThrowException = false,
  378. bool bShowMsgBoxes = false
  379. );
  380. #endif // _AFX_NO_OLE_SUPPORT
  381. bool Make32(
  382. bool bEnableThrowException = false
  383. );
  384. bool FromColor(
  385. COLORREF clr,
  386. const SIZE & _dimension,
  387. BYTE nAlpha = BYTE(255),
  388. bool bEnableThrowException = false
  389. );
  390. bool FromSurface(
  391. HDC hDC,
  392. const RECT & rcSrc,
  393. bool bEnableThrowException = false
  394. );
  395. bool FromBitmap(
  396. HBITMAP hBitmap,
  397. bool bEnableThrowException = false,
  398. bool bNoAdjustAlpha = false
  399. );
  400. bool FromBitmap(
  401. HBITMAP hBitmap,
  402. LPCRECT pRectBitmapSrc, // = NULL - entire bitmap
  403. bool bEnableThrowException,
  404. bool bNoAdjustAlpha
  405. );
  406. bool FromBitmap(
  407. const CExtBitmap & _other,
  408. LPCRECT pRectBitmapSrc, // = NULL - entire bitmap
  409. bool bEnableThrowException = false
  410. );
  411. virtual bool ExtractEditableBitmap(
  412. HBITMAP & hBitmap,
  413. COLORREF & clrTransparent,
  414. CArray <COLORREF,COLORREF> * pArr = NULL, // recommended palette, item 0 is clrTransparent
  415. COLORREF ** ppClrSurface = NULL // if not NULL - force 32 bit
  416. ) const;
  417. bool CreateRotated9xStack(
  418. const CExtBitmap & bmpSrcStack,
  419. int nAngleCw90, // 0, 90, 180, 270, 360 clockwise
  420. int nStackItemCount, // >= 1
  421. int nSrcItemWidth,
  422. int nSrcItemHeight,
  423. bool bSrcStackIsHorizontal,
  424. bool bDstStackIsHorizontal
  425. );
  426. virtual HICON CreateHICON(
  427. bool bReplaceSysColors = true,
  428. COLORREF clrTransparent = COLORREF(-1L)
  429. ) const;
  430. HBITMAP CreateBitmap( 
  431. HDC hDC, 
  432. bool bCreateDDB
  433. ) const;
  434. HBITMAP CreateBitmap(
  435. bool bCreateDDB
  436. ) const;
  437. HBITMAP CreateBitmap( 
  438. HDC hDC, 
  439. COLORREF ** ppClrSurface,
  440. COLORREF clrFillBk = COLORREF(-1L)
  441. ) const;
  442. HBITMAP CreateBitmap(
  443. COLORREF ** ppClrSurface,
  444. COLORREF clrFillBk = COLORREF(-1L)
  445. ) const;
  446. static bool g_bIsAutoPreMultiplyRGBChannels;
  447. virtual bool IsAutoPreMultiplyRGBChannels() const;
  448. virtual void PreMultiplyRGBChannels(
  449. bool bForward = true
  450. );
  451. virtual bool PreMultipliedRGBChannelsGet() const;
  452. virtual void PreMultipliedRGBChannelsSet( bool bPreMultiplied );
  453. void MakeMono(
  454. COLORREF clrMono = COLORREF(-1L),
  455. LPCRECT pRect = NULL
  456. );
  457. void AlphaColor(
  458. COLORREF clr,
  459. COLORREF clrTolerance,
  460. BYTE nAlpha,
  461. LPCRECT pRect = NULL
  462. );
  463. void AlphaColorDistance(
  464. COLORREF clr,
  465. INT nDistance,
  466. BYTE nAlpha,
  467. LPCRECT pRect = NULL
  468. );
  469. void AlphaRect(
  470. const RECT & rcFrame,
  471. BYTE nAlpha,
  472. COLORREF clrTransparent = COLORREF(-1L),
  473. COLORREF clrOpaque = COLORREF(-1L)
  474. );
  475. void AlphaFrame(
  476. const RECT & rcFrame,
  477. const RECT & rcPadding,
  478. BYTE nAlpha,
  479. COLORREF clrTransparent = COLORREF(-1L),
  480. COLORREF clrOpaque = COLORREF(-1L)
  481. );
  482. virtual int DrawImpl(
  483. HDC hDC,
  484. int nDstX,
  485. int nDstY,
  486. int nDstWidth,
  487. int nDstHeight,
  488. int nSrcX,
  489. int nSrcY,
  490. int nSrcWidth,
  491. int nSrcHeight,
  492. DWORD dwRop = SRCCOPY
  493. ) const;
  494. virtual int Draw(
  495. HDC hDC,
  496. int nDstX,
  497. int nDstY,
  498. int nDstWidth,
  499. int nDstHeight,
  500. int nSrcX,
  501. int nSrcY,
  502. int nSrcWidth,
  503. int nSrcHeight,
  504. DWORD dwRop = SRCCOPY
  505. ) const;
  506. int Draw(
  507. HDC hDC,
  508. int nDstX,
  509. int nDstY,
  510. int nDstWidth,
  511. int nDstHeight,
  512. DWORD dwRop = SRCCOPY
  513. ) const;
  514. int Draw(
  515. HDC hDC,
  516. const RECT & rcDst,
  517. const RECT & rcSrc,
  518. DWORD dwRop = SRCCOPY
  519. ) const;
  520. int Draw(
  521. HDC hDC,
  522. const RECT & rcDst,
  523. DWORD dwRop = SRCCOPY
  524. ) const;
  525. virtual bool DrawNcFrame(
  526. HDC hDC,
  527. const RECT & rcDstDraw,
  528. const RECT & rcSrcDraw,
  529. const RECT & rcPadding,
  530. INT nCaptionHeightDst = 0,
  531. INT nCaptionHeightSrc = 0,
  532. bool bDrawMiddlePart = false,
  533. bool bSmootherAsPossible = true,
  534. DWORD dwRop = SRCCOPY
  535. ) const;
  536. bool DrawNcFrame(
  537. HDC hDC,
  538. const RECT & rcDstDraw,
  539. const RECT & rcPadding,
  540. INT nCaptionHeightDst = 0,
  541. INT nCaptionHeightSrc = 0,
  542. bool bDrawMiddlePart = false,
  543. bool bSmootherAsPossible = true,
  544. DWORD dwRop = SRCCOPY
  545. ) const;
  546. virtual bool DrawSkinParts(
  547. HDC hDC,
  548. const RECT & rcDstDraw,
  549. const RECT & rcSrcDraw,
  550. const RECT & rcPadding,
  551. e_DrawMethod_t eDM,
  552. bool bDrawMiddlePart = true,
  553. bool bSmootherAsPossible = false,
  554. DWORD dwRop = SRCCOPY
  555. ) const;
  556. bool DrawSkinParts(
  557. HDC hDC,
  558. const RECT & rcDstDraw,
  559. const RECT & rcPadding,
  560. e_DrawMethod_t eDM,
  561. bool bDrawMiddlePart = true,
  562. bool bSmootherAsPossible = false,
  563. DWORD dwRop = SRCCOPY
  564. ) const;
  565. virtual int AlphaBlend(
  566. HDC hDC,
  567. int nDstX,
  568. int nDstY,
  569. int nDstWidth,
  570. int nDstHeight,
  571. int nSrcX,
  572. int nSrcY,
  573. int nSrcWidth,
  574. int nSrcHeight,
  575. BYTE nSCA = 0xFF
  576. ) const;
  577. int AlphaBlend(
  578. HDC hDC,
  579. int nDstX,
  580. int nDstY,
  581. int nDstWidth,
  582. int nDstHeight,
  583. BYTE nSCA = 0xFF
  584. ) const;
  585. int AlphaBlend(
  586. HDC hDC,
  587. const RECT & rcDst,
  588. const RECT & rcSrc,
  589. BYTE nSCA = 0xFF
  590. ) const;
  591. int AlphaBlend(
  592. HDC hDC,
  593. const RECT & rcDst,
  594. BYTE nSCA = 0xFF
  595. ) const;
  596. virtual bool AlphaBlendSkinParts(
  597. HDC hDC,
  598. const RECT & rcDstDraw,
  599. const RECT & rcSrcDraw,
  600. const RECT & rcPadding,
  601. e_DrawMethod_t eDM,
  602. bool bDrawMiddlePart = true,
  603. bool bSmootherAsPossible = false,
  604. BYTE nSCA = 0xFF
  605. ) const;
  606. bool AlphaBlendSkinParts(
  607. HDC hDC,
  608. const RECT & rcDstDraw,
  609. const RECT & rcPadding,
  610. e_DrawMethod_t eDM,
  611. bool bDrawMiddlePart = true,
  612. bool bSmootherAsPossible = false,
  613. BYTE nSCA = 0xFF
  614. ) const;
  615. virtual bool GetPixel(
  616. INT nX,
  617. INT nY,
  618. RGBQUAD & _pixel
  619. ) const;
  620. COLORREF GetPixel(
  621. INT nX,
  622. INT nY,
  623. BYTE * p_nAlpha = NULL
  624. ) const;
  625. virtual bool SetPixel(
  626. INT nX,
  627. INT nY,
  628. const RGBQUAD & _pixel,
  629. bool bSetRed = true,
  630. bool bSetGreen = true,
  631. bool bSetBlue = true,
  632. bool bSetAlpha = true
  633. );
  634. bool SetPixel(
  635. INT nX,
  636. INT nY,
  637. COLORREF clr, // if COLORREF( -1L ) - do not set color
  638. INT nAlpha = -1 // less than zero - do not set alpha
  639. );
  640. bool ColorizeMono(
  641. COLORREF clrTransparent,
  642. COLORREF clrTarget,
  643. LPCRECT pRect = NULL
  644. );
  645. bool AdjustAlpha(
  646. double percentAlpha,
  647. LPCRECT pRect = NULL
  648. );
  649. bool AdjustHLS(
  650. COLORREF clrTransparent = RGB(0,0,0),
  651. COLORREF clrTolerance = RGB(0,0,0),
  652. double percentH = 0.0,
  653. double percentL = 0.0,
  654. double percentS = 0.0,
  655. LPCRECT pRect = NULL
  656. );
  657. HGLOBAL GenerateHGLOBAL(
  658. HPALETTE hPalDst = NULL
  659. ) const;
  660. static HGLOBAL stat_HBITMAPtoHGLOBAL(
  661. HBITMAP hBmpSrc,
  662. HPALETTE hPalDst = NULL
  663. );
  664. static bool stat_CloneBitmap(
  665. CBitmap & bmpDst,
  666. const CBitmap & bmpSrc,
  667. const RECT * pRcPart = NULL,
  668. COLORREF ** ppSurface = NULL // if not NULL - create 32 bit surface
  669. );
  670. static HBITMAP stat_CloneBitmap(
  671. HBITMAP hBmpSrc,
  672. const RECT * pRcPart = NULL,
  673. COLORREF ** ppSurface = NULL // if not NULL - create 32 bit surface
  674. );
  675. HRGN GenerateColorHRGN(
  676. bool bRTL,
  677. COLORREF clrTransparent,
  678. COLORREF clrTolerance = RGB(0,0,0)
  679. ) const;
  680. HRGN GenerateSkinPartColorRGN(
  681. bool bRTL,
  682. const RECT & rcDst,
  683. const RECT & rcSrc,
  684. const RECT & rcPadding,
  685. COLORREF clrTransparent,
  686. bool bLeft,
  687. bool bTop
  688. ) const;
  689. HRGN GenerateSkinPartColorRGN(
  690. bool bRTL,
  691. const RECT & rcDst,
  692. const RECT & rcPadding,
  693. COLORREF clrTransparent,
  694. bool bLeft,
  695. bool bTop
  696. ) const;
  697. HRGN GenerateSkinFrameColorRGN(
  698. bool bRTL,
  699. const RECT & rcDst,
  700. const RECT & rcSrc,
  701. const RECT & rcPadding,
  702. COLORREF clrTransparent
  703. ) const;
  704. HRGN GenerateSkinFrameColorRGN(
  705. bool bRTL,
  706. const RECT & rcDst,
  707. const RECT & rcPadding,
  708. COLORREF clrTransparent
  709. ) const;
  710. HRGN GenerateSkinPartAlphaRGN(
  711. bool bRTL,
  712. const RECT & rcDst,
  713. const RECT & rcSrc,
  714. const RECT & rcPadding,
  715. bool bLeft,
  716. bool bTop,
  717. BYTE nAlphaMin = BYTE(0),
  718. BYTE nAlphaMax = BYTE(0)
  719. ) const;
  720. HRGN GenerateSkinPartAlphaRGN(
  721. bool bRTL,
  722. const RECT & rcDst,
  723. const RECT & rcPadding,
  724. bool bLeft,
  725. bool bTop,
  726. BYTE nAlphaMin = BYTE(0),
  727. BYTE nAlphaMax = BYTE(0)
  728. ) const;
  729. HRGN GenerateSkinFrameAlphaRGN(
  730. bool bRTL,
  731. const RECT & rcDst,
  732. const RECT & rcSrc,
  733. const RECT & rcPadding,
  734. BYTE nAlphaMin = BYTE(0),
  735. BYTE nAlphaMax = BYTE(0)
  736. ) const;
  737. HRGN GenerateSkinFrameAlphaRGN(
  738. bool bRTL,
  739. const RECT & rcDst,
  740. const RECT & rcPadding,
  741. BYTE nAlphaMin = BYTE(0),
  742. BYTE nAlphaMax = BYTE(0)
  743. ) const;
  744. CSize GetSize() const;
  745. ULONG GetBPP() const;
  746. static ULONG stat_RcLine(
  747. ULONG nWidth,
  748. ULONG nBPP
  749. );
  750. static ULONG stat_RcScanLineSize(
  751. ULONG nLineIndex
  752. );
  753. static ULONG stat_RcScanLineSize(
  754. ULONG nWidth,
  755. ULONG nBPP
  756. );
  757. static ULONG stat_RcUPE(
  758. ULONG nBPP
  759. );
  760. static LPBYTE stat_RcOffsetToScanLine(
  761. LPBYTE pBitsStart,
  762. ULONG nScanLineSize,
  763. ULONG nLineIndex
  764. );
  765. static ULONG stat_RcImageBufferSize(
  766. ULONG nWidth,
  767. ULONG hHeight,
  768. ULONG nBPP
  769. );
  770. static LPBITMAPINFOHEADER stat_RcInfoHeader(
  771. LPBYTE pImageBuffer
  772. );
  773. static LPBITMAPINFO stat_RcInfo(
  774. LPBYTE pImageBuffer
  775. );
  776. static LPBYTE stat_RcScanLine(
  777. LPBYTE pImageBuffer,
  778. ULONG nLineIndex,
  779. ULONG nScanLineSize
  780. );
  781. static LPBYTE stat_RcSurface(
  782. LPBYTE pImageBuffer
  783. );
  784. static LPVOID stat_AllocLL(
  785. __EXT_MFC_ULONG_PTR amount,
  786. __EXT_MFC_ULONG_PTR alignment
  787. );
  788. static void stat_FreeLL(
  789. LPVOID pMemToFree
  790. );
  791. static LPBYTE stat_AllocHL(
  792. ULONG nWidth,
  793. ULONG hHeight,
  794. ULONG nBPP,
  795. ULONG nMaskRed,
  796. ULONG nMaskGreen,
  797. ULONG nMaskBlue,
  798. ULONG nMaskAlpha,
  799. ULONG nFlags
  800. );
  801. static void stat_FreeHL(
  802. LPVOID pMemToFree
  803. );
  804. static LPBYTE stat_BmpLoad(
  805. CArchive & ar,
  806. bool bEnableThrowException,
  807. bool bResourceFormat
  808. );
  809. static bool stat_BmpSave(
  810. LPBYTE pImageBuffer,
  811. CArchive & ar,
  812. bool bEnableThrowException,
  813. bool bUseIndexedRLE
  814. );
  815. static LPBYTE stat_RcTo32(
  816. LPBYTE pImageBuffer,
  817. bool bEnableThrowException
  818. );
  819. static LPBYTE stat_rcResize(
  820. LPBYTE pImageBuffer,
  821. ULONG nWidth,
  822. ULONG nHeight,
  823. Filter & _f,
  824. bool bEnableAlphaMarginAdjustment
  825. );
  826. static void stat_rcResizeH(
  827. LPBYTE pImageBufferSrc,
  828. ULONG nWidthSrc,
  829. LPBYTE pImageBufferDst,
  830. ULONG nWidthDst,
  831. ULONG nHeightDst,
  832. Filter & _f,
  833. bool bEnableAlphaMarginAdjustment
  834. );
  835. static void stat_rcResizeV(
  836. LPBYTE pImageBufferSrc,
  837. ULONG nHeightSrc,
  838. LPBYTE pImageBufferDst,
  839. ULONG nWidthDst,
  840. ULONG nHeightDst,
  841. Filter & _f,
  842. bool bEnableAlphaMarginAdjustment
  843. );
  844. static ULONG stat_MaskRed( LPBYTE pImageBuffer );
  845. static ULONG stat_MaskGreen( LPBYTE pImageBuffer );
  846. static ULONG stat_MaskBlue( LPBYTE pImageBuffer );
  847. static ULONG stat_MaskAlpha( LPBYTE pImageBuffer );
  848. static ULONG stat_RunTimeFlagsGet( LPBYTE pImageBuffer );
  849. static void stat_RunTimeFlagsSet( LPBYTE pImageBuffer, ULONG nFlags );
  850. static bool stat_PreMultipliedRGBChannelsGet( LPBYTE pImageBuffer );
  851. static void stat_PreMultipliedRGBChannelsSet( LPBYTE pImageBuffer, bool PreMultiplied );
  852. const BYTE * GetBuffer() const;
  853. ULONG MaskRed() const;
  854. ULONG MaskGreen() const;
  855. ULONG MaskBlue() const;
  856. ULONG MaskAlpha() const;
  857. ULONG RunTimeFlagsGet() const;
  858. void RunTimeFlagsSet( ULONG nFlags ) const;
  859. virtual void OnLoad();
  860. virtual void OnContentChanged();
  861. static __EXT_MFC_SAFE_LPCTSTR stat_GetDrawMethodName(
  862. e_DrawMethod_t eDM
  863. );
  864. static e_DrawMethod_t stat_GetDrawMethodFromString(
  865. __EXT_MFC_SAFE_LPCTSTR str
  866. );
  867. INT GetBitmapColorMap( // returns bitmap's color bit count or zero if error
  868. CMap < COLORREF, COLORREF, DWORD, DWORD > & _map // key is color, value is count of color entries in bitmap
  869. ) const;
  870. INT GetBitmapColorArray( // returns bitmap's color bit count or zero if error
  871. CArray < COLORREF, COLORREF > & arr
  872. ) const;
  873. static COLORREF stat_RGBtoCMY( COLORREF clr );
  874. static COLORREF stat_CMYtoRGB( COLORREF clr );
  875. //----------------------------------------------------------------------
  876. // Conversion between the HSL (Hue, Saturation, and Luminosity) 
  877. // and RBG color model.
  878. //----------------------------------------------------------------------
  879. // The conversion algorithms presented here come from the book by 
  880. // Fundamentals of Interactive Computer Graphics by Foley and van Dam. 
  881. // In the example code, HSL values are represented as floating point 
  882. // number in the range 0 to 1. RGB tridrants use the Windows convention 
  883. // of 0 to 255 of each element. 
  884. //----------------------------------------------------------------------
  885. static double stat_HuetoRGB(double m1, double m2, double h );
  886. static COLORREF stat_HLStoRGB( double H, double L, double S );
  887. static void stat_RGBtoHSL( COLORREF rgb, double *H, double *S, double *L );
  888. static BYTE stat_GetRGBFromHue(float rm1, float rm2, float rh);
  889. static COLORREF stat_GetRGBFromHLSExtend( double H, double L, double S );
  890. static COLORREF stat_HLS_Adjust(
  891. COLORREF clr,
  892. double percentH = 0.0,
  893. double percentL = 0.0,
  894. double percentS = 0.0
  895. );
  896. static COLORREF stat_RGB_Enlight( 
  897. COLORREF clrLight, 
  898. COLORREF clrDark, 
  899. INT nEnlighten
  900. );
  901. static COLORREF stat_RGB_Blend( 
  902. COLORREF clrFrom, 
  903. COLORREF clrTo, 
  904. INT nAlpha
  905. );
  906. }; // class CExtBitmap
  907. /////////////////////////////////////////////////////////////////////////////
  908. // CExtBitmapCache
  909. class __PROF_UIS_API CExtBitmapCache : public CExtBitmap
  910. {
  911. HBITMAP m_hBitmapCache;
  912. void _InitCache( const CExtBitmap & _bmp );
  913. public:
  914. CExtBitmapCache();
  915. CExtBitmapCache(
  916. const CExtBitmap & other
  917. );
  918. virtual ~CExtBitmapCache();
  919. virtual bool AssignFromOther(
  920. const CExtBitmap & other,
  921. bool bEnableThrowException = false
  922. );
  923. virtual void Empty();
  924. virtual bool IsEmpty() const;
  925. virtual int AlphaBlend(
  926. HDC hDC,
  927. int nDstX,
  928. int nDstY,
  929. int nDstWidth,
  930. int nDstHeight,
  931. int nSrcX,
  932. int nSrcY,
  933. int nSrcWidth,
  934. int nSrcHeight,
  935. BYTE nSCA = 0xFF
  936. ) const;
  937. virtual void OnContentChanged();
  938. }; // class CExtBitmapCache
  939. /////////////////////////////////////////////////////////////////////////////
  940. // CExtCmdIcon
  941. // command icon class
  942. // CExtCmdIcon::m_dwFlagsValues
  943. #define __EXT_ICON_PERSISTENT_BITMAP_DISABLED 0x00000001
  944. #define __EXT_ICON_PERSISTENT_BITMAP_HOVER 0x00000002
  945. #define __EXT_ICON_PERSISTENT_BITMAP_PRESSED 0x00000004
  946. #define __EXT_ICON_FLAGS_DEFAULT 0x00000000
  947. class __PROF_UIS_API CExtCmdIcon
  948. {
  949. public:
  950. enum e_paint_type_t
  951. {
  952. __PAINT_NORMAL      = 0,
  953. __PAINT_DISABLED    = 1,
  954. __PAINT_HOVER       = 2,
  955. __PAINT_PRESSED     = 3,
  956. __PAINT_INVISIBLE   = 4,
  957. __PAINT_VAL_MIN     = 0,
  958. __PAINT_VAL_MAX     = 4,
  959. __PAINT_VAL_COUNT   = 5,
  960. };
  961. CExtBitmap m_bmpNormal, m_bmpDisabled, m_bmpHover, m_bmpPressed;
  962. DWORD m_dwFlags;
  963. CExtCmdIcon();
  964. //  CExtCmdIcon(
  965. //  HICON hIcon,
  966. //  bool bCreateCopy // if false - delete hIcon
  967. //  );
  968. //  CExtCmdIcon(
  969. //  HBITMAP hBitmap,
  970. //  COLORREF clrTransparent = RGB( 0, 0, 0 ),
  971. //  LPCRECT pRectBitmapSrc = NULL,
  972. //  bool bCloneBitmap = true // if false - pRectBitmapSrc must be NULL and will delete hBitmap
  973. //  );
  974. CExtCmdIcon( const CExtCmdIcon & other );
  975. virtual ~CExtCmdIcon();
  976. CExtCmdIcon & operator = ( const CExtCmdIcon & other );
  977. virtual void AssignFromOther( const CExtCmdIcon & other );
  978. virtual void AssignFromHICON(
  979. HICON hIcon,
  980. bool bCreateCopy, // if false - delete hIcon
  981. bool bForceLowColorMode = false
  982. );
  983. virtual void AssignFromHBITMAP(
  984. HBITMAP hBitmap,
  985. COLORREF clrTransparent = COLORREF(-1L), // COLORREF(-1L) - no force transparent pixels
  986. LPCRECT pRectBitmapSrc = NULL,
  987. bool bCloneBitmap = true // if false - pRectBitmapSrc must be NULL and will delete hBitmap
  988. );
  989. virtual bool IsEmpty() const;
  990. virtual void Empty();
  991. virtual void Serialize( CArchive & ar );
  992. virtual CSize GetSize() const;
  993. operator CSize () const;
  994. virtual void OnGlobalPaintManagerChanged();
  995. virtual void OnEmptyGeneratedBitmaps();
  996. virtual void OnContentChanged();
  997. virtual void SyncSysColors(
  998. CExtPaintManager * pPM
  999. );
  1000. virtual void OnSysColorChange(
  1001. CExtPaintManager * pPM
  1002. );
  1003. virtual void OnSettingChange(
  1004. CExtPaintManager * pPM,
  1005. UINT uFlags,
  1006. __EXT_MFC_SAFE_LPCTSTR lpszSection
  1007. );
  1008. virtual void OnDisplayChange(
  1009. CExtPaintManager * pPM,
  1010. INT nDepthBPP,
  1011. CPoint ptSizes
  1012. );
  1013. virtual void OnThemeChanged(
  1014. CExtPaintManager * pPM,
  1015. WPARAM wParam,
  1016. LPARAM lParam
  1017. );
  1018. virtual bool Scale(
  1019. const SIZE & newSize
  1020. );
  1021. virtual bool CreateScaledCopy(
  1022. const CExtCmdIcon & other,
  1023. const SIZE & newSize
  1024. );
  1025. virtual bool CreateCheckMarkIcon(
  1026. CExtPaintManager * pPM,
  1027. COLORREF clrMark = COLORREF(-1L),
  1028. COLORREF clrTransparent = COLORREF(-1L),
  1029. CSize sizeIcon = CSize(16,16)
  1030. );
  1031. virtual bool CreateIndeterminatedSquareIcon(
  1032. CExtPaintManager * pPM,
  1033. COLORREF clrMark = COLORREF(-1L),
  1034. COLORREF clrTransparent = COLORREF(-1L),
  1035. CSize sizeIcon = CSize(16,16)
  1036. );
  1037. virtual bool CreateRadioMarkIcon(
  1038. CExtPaintManager * pPM,
  1039. COLORREF clrMark = COLORREF(-1L),
  1040. COLORREF clrTransparent = COLORREF(-1L),
  1041. CSize sizeIcon = CSize(16,16)
  1042. );
  1043. virtual bool CreateEmptyIcon(
  1044. CExtPaintManager * pPM,
  1045. COLORREF clrTransparent = COLORREF(-1L),
  1046. CSize sizeIcon = CSize(16,16)
  1047. );
  1048. virtual HICON ExtractHICON(
  1049. bool bReplaceSysColors = true,
  1050. COLORREF clrTransparent = COLORREF(-1L)
  1051. ) const;
  1052. virtual CExtBitmap & GetBitmap(
  1053. e_paint_type_t ePT = __PAINT_NORMAL,
  1054. CExtPaintManager * pPM = NULL
  1055. );
  1056. const CExtBitmap & GetBitmap(
  1057. e_paint_type_t ePT = __PAINT_NORMAL,
  1058. CExtPaintManager * pPM = NULL
  1059. ) const;
  1060. void Paint(
  1061. CExtPaintManager * pPM,
  1062. HDC hDC,
  1063. const RECT & rc,
  1064. e_paint_type_t ePT = __PAINT_NORMAL,
  1065. BYTE nSCA = BYTE(255)
  1066. ) const;
  1067. virtual void Paint(
  1068. CExtPaintManager * pPM,
  1069. HDC hDC,
  1070. INT nX,
  1071. INT nY,
  1072. INT nDX, // -1 use default size
  1073. int nDY, // -1 use default size
  1074. e_paint_type_t ePT = __PAINT_NORMAL,
  1075. BYTE nSCA = BYTE(255)
  1076. ) const;
  1077. virtual void PaintAccentEmboss(
  1078. CExtPaintManager * pPM,
  1079. HDC hDC,
  1080. COLORREF clrAccent,
  1081. INT nX,
  1082. INT nY,
  1083. INT nDX = -1, // -1 use default size
  1084. int nDY = -1,  // -1 use default size
  1085. BYTE nSCA = BYTE(255)
  1086. );
  1087. virtual void PaintAccentMono(
  1088. CExtPaintManager * pPM,
  1089. HDC hDC,
  1090. COLORREF clrAccent,
  1091. INT nX,
  1092. INT nY,
  1093. INT nDX = -1, // -1 use default size
  1094. int nDY = -1,  // -1 use default size
  1095. BYTE nSCA = BYTE(255)
  1096. );
  1097. virtual void PaintAccentColorized(
  1098. CExtPaintManager * pPM,
  1099. HDC hDC,
  1100. COLORREF clrAccent,
  1101. INT nX,
  1102. INT nY,
  1103. INT nDX = -1, // -1 use default size
  1104. int nDY = -1,  // -1 use default size
  1105. BYTE nSCA = BYTE(255)
  1106. );
  1107. virtual bool ExtractEditableBitmap(
  1108. HBITMAP & hBitmap,
  1109. COLORREF & clrTransparent,
  1110. CArray <COLORREF,COLORREF> * pArr = NULL, // recommended palette, item 0 is clrTransparent
  1111. COLORREF ** ppClrSurface = NULL // if not NULL - force 32 bit
  1112. ) const;
  1113. }; // class CExtCmdIcon
  1114. #endif // __EXT_CMD_ICON_H