XTPImageManager.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:59k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPImageManager.h : interface for the CXTPImageManager class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPIMAGEMANAGER_H__)
  22. #define __XTPIMAGEMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. //-----------------------------------------------------------------------
  28. // Summary:
  29. //     Image state enumerators.
  30. // Example:
  31. // <code>
  32. // // Set Icons
  33. // pCommandBars->GetImageManager()->SetIcons(IDR_MAINFRAME, xtpImageNormal);
  34. // pCommandBars->GetImageManager()->SetIcons(IDR_MAINFRAME, IDR_MAINFRAME_HOT, xtpImageHot);
  35. // </code>
  36. // See Also: CXTPImageManager::SetIcon, CXTPImageManager::SetIcons
  37. //
  38. // <KEYWORDS xtpImageNormal, xtpImageDisabled, xtpImageHot, xtpImageChecked>
  39. //-----------------------------------------------------------------------
  40. enum XTPImageState
  41. {
  42. xtpImageNormal,     // Normal image.
  43. xtpImageDisabled,   // Disabled image.
  44. xtpImageHot,        // Hot image.
  45. xtpImageChecked,    // Checked(selected) image.
  46. xtpImagePressed     // Pressed image.
  47. };
  48. class CXTPImageManager;
  49. class CXTPImageManagerIconSet;
  50. class CXTPImageManagerImageList;
  51. class CXTPImageManagerIconHandle;
  52. class CXTPImageManagerResource;
  53. class CXTPPropExchange;
  54. struct XTP_IMAGERESOURCE_INFO
  55. {
  56. BOOL bAlpha;
  57. CRect rc;
  58. CXTPImageManagerResource* pResource;
  59. };
  60. class CXTPImageManagerResource
  61. {
  62. protected:
  63. class CBitmapDC : public CDC
  64. {
  65. public:
  66. CBitmapDC()
  67. {
  68. m_hOldBitmap = 0;
  69. }
  70. ~CBitmapDC()
  71. {
  72. if (m_hOldBitmap)
  73. {
  74. ::SelectObject(GetSafeHdc(), m_hOldBitmap);
  75. }
  76. }
  77. void SetBitmap(HBITMAP hBitmap)
  78. {
  79. if (hBitmap)
  80. {
  81. m_hOldBitmap = (HBITMAP)::SelectObject(GetSafeHdc(), hBitmap);
  82. }
  83. else if (m_hOldBitmap)
  84. {
  85. ::SelectObject(GetSafeHdc(), m_hOldBitmap);
  86. m_hOldBitmap = NULL;
  87. }
  88. }
  89. HBITMAP m_hOldBitmap;
  90. };
  91. public:
  92. CXTPImageManagerResource(CXTPImageManager* pImageManager, CSize szIcon);
  93. ~CXTPImageManagerResource();
  94. XTP_IMAGERESOURCE_INFO* Add(const CXTPImageManagerIconHandle& hHandle);
  95. void Clear(XTP_IMAGERESOURCE_INFO* pRInfo);
  96. void Draw(CDC* pDC, XTP_IMAGERESOURCE_INFO* pRInfo, CPoint pt, CSize szIcon, BOOL bDrawComposited);
  97. void CreateIcon(CXTPImageManagerIconHandle& hHandle, XTP_IMAGERESOURCE_INFO* pRInfo);
  98. CSize GetExtent() const;
  99. private:
  100. XTP_IMAGERESOURCE_INFO* AllocBitmap();
  101. void RemoveAll();
  102. void DrawIconComposited(CDC* pDC, XTP_IMAGERESOURCE_INFO* pRInfo, CPoint pt, CSize szIcon);
  103. protected:
  104. HBITMAP m_hbmpImage;
  105. HBITMAP m_hbmpMask;
  106. CBitmapDC m_dc;
  107. BYTE* m_pBits;
  108. CXTPImageManager* m_pImageManager;
  109. CSize m_szIcon;
  110. int m_nAllocWidth;
  111. CArray<XTP_IMAGERESOURCE_INFO*, XTP_IMAGERESOURCE_INFO*> m_arrIcons;
  112. CArray<XTP_IMAGERESOURCE_INFO*, XTP_IMAGERESOURCE_INFO*> m_arrAlloc;
  113. CRITICAL_SECTION m_cs;
  114. friend class CXTPImageManager;
  115. };
  116. //===========================================================================
  117. // Summary:
  118. //     CXTPImageManagerIconHandle is HICON wrapper class.
  119. //===========================================================================
  120. class _XTP_EXT_CLASS CXTPImageManagerIconHandle
  121. {
  122. public:
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     Constructs a CXTPImageManagerIconHandle object
  126. // Parameters:
  127. //     hIcon - Icon handle
  128. //     hBitmap - Bitmap handle
  129. //     hHandle - CXTPImageManagerIconHandle reference
  130. //-----------------------------------------------------------------------
  131. CXTPImageManagerIconHandle();
  132. CXTPImageManagerIconHandle(HICON hIcon, BOOL bUseResources = TRUE); // <combine CXTPImageManagerIconHandle::CXTPImageManagerIconHandle>
  133. CXTPImageManagerIconHandle(HBITMAP hBitmap); // <combine CXTPImageManagerIconHandle::CXTPImageManagerIconHandle>
  134. CXTPImageManagerIconHandle(const CXTPImageManagerIconHandle& hHandle); // <combine CXTPImageManagerIconHandle::CXTPImageManagerIconHandle>
  135. //-------------------------------------------------------------------------
  136. // Summary:
  137. //     Destroys a CXTPImageManagerIconHandle object, handles cleanup and deallocation
  138. //-------------------------------------------------------------------------
  139. ~CXTPImageManagerIconHandle();
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     This operator returns a HICON object whose value is copied from this CXTPImageManagerIconHandle object.
  143. // Returns:
  144. //     HICON handle.
  145. //-----------------------------------------------------------------------
  146. operator HICON() const;
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     Copies data from an HBITMAP or CXTPImageManagerIconHandle object
  150. // Parameters:
  151. //     handle - CXTPImageManagerIconHandle object
  152. //     hBitmap - Alpha bitmap handler
  153. //-----------------------------------------------------------------------
  154. void CopyHandle(HBITMAP hBitmap);
  155. void CopyHandle(const CXTPImageManagerIconHandle& handle); // <combine CXTPImageManagerIconHandle::CopyHandle@HBITMAP>
  156. void BeforeModify();
  157. void AfterModify();
  158. public:
  159. //-----------------------------------------------------------------------
  160. // Summary:
  161. //     Checks if the image has alpha channel.
  162. // Returns:
  163. //     TRUE if the image has alpha channel; otherwise returns FALSE
  164. //-----------------------------------------------------------------------
  165. BOOL IsAlpha() const;
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     Returns TRUE if class has no icon.
  169. // Returns:
  170. //     TRUE if m_hIcon member is NULL.
  171. //-----------------------------------------------------------------------
  172. BOOL IsEmpty() const;
  173. //-----------------------------------------------------------------------
  174. // Summary:
  175. //     Retrieves bitmap handle
  176. // Returns:
  177. //     32bit alpha bitmap
  178. //-----------------------------------------------------------------------
  179. HBITMAP GetBitmap() const;
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     Retrieves the icon handle.
  183. // Returns:
  184. //     Icon handle.
  185. //-----------------------------------------------------------------------
  186. HICON GetIcon() const;
  187. //-----------------------------------------------------------------------
  188. // Summary:
  189. //     Retrieves the size of the icon.
  190. // Returns:
  191. //     Size of the icon.
  192. //-----------------------------------------------------------------------
  193. CSize GetExtent() const;
  194. void Draw(CDC* pDC, CPoint pt, CSize szIcon, BOOL bDrawComposited = FALSE);
  195. public:
  196. //-------------------------------------------------------------------------
  197. // Summary:
  198. //     Release bitmap and icon handlers
  199. //-------------------------------------------------------------------------
  200. void Clear();
  201. //-------------------------------------------------------------------------
  202. // Summary:
  203. //     Creates an icon from resource bits describing the icon.
  204. // Parameters:
  205. //     hInst - Application instance handler
  206. //     lpszResourceName - Resource name identifier
  207. //     szIcon - Specifies the desired width and height, in pixels, of the icon.
  208. //     bGroupResource - TRUE to check if RT_GROUP_ICON resource exists.
  209. // Returns:
  210. //     TRUE if successful; otherwise returns FALSE.
  211. //-------------------------------------------------------------------------
  212. BOOL CreateIconFromResource(LPCTSTR lpszResourceName, CSize szIcon, BOOL bGroupResource = TRUE);
  213. BOOL CreateIconFromResource(HINSTANCE hInst, LPCTSTR lpszResourceName, CSize szIcon, BOOL bGroupResource); // <combine CXTPImageManagerIconHandle::CreateIconFromResource@LPCTSTR@CSize@BOOL>
  214. public:
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //     This operator assigns the icon handler to a CXTPImageManagerIconHandle object.
  218. // Parameters:
  219. //     hIcon - source icon handler
  220. //-----------------------------------------------------------------------
  221. const CXTPImageManagerIconHandle& operator=(const HICON hIcon);
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     This operator assigns the alpha bitmap handler to a CXTPImageManagerIconHandle object.
  225. // Parameters:
  226. //     hBitmap - Alpha bitmap handler
  227. const CXTPImageManagerIconHandle& operator=(const HBITMAP hBitmap);
  228. //-----------------------------------------------------------------------
  229. // Summary:
  230. //     Create alpha bitmap with valid alpha layer.
  231. // Returns:
  232. //     TRUE if successful; otherwise returns FALSE.
  233. //-----------------------------------------------------------------------
  234. LPBYTE PreMultiply();
  235. protected:
  236. void Init();
  237. private:
  238. const CXTPImageManagerIconHandle& operator=(const CXTPImageManagerIconHandle&);
  239. CSize _GetExtent() const;
  240. protected:
  241. HICON   m_hIcon;          // The underlying HICON handler for this CXTPImageManagerIconHandle object.
  242. HBITMAP m_hBitmap;        // The underlying Alpha bitmap handler for this CXTPImageManagerIconHandle object.
  243. LPBYTE m_pBits;           // Alpha bitmap bits;
  244. BOOL    m_bClearHandles;  // TRUE if object must destroy handlers.
  245. CXTPImageManager* m_pImageManager;
  246. XTP_IMAGERESOURCE_INFO* m_pRInfo;
  247. CSize m_szIcon;
  248. BOOL m_bUseResources;
  249. private:
  250. friend class CXTPImageManagerIcon;
  251. friend class CXTPImageManagerResource;
  252. };
  253. //===========================================================================
  254. // Summary:
  255. //     Icons holder class.
  256. //===========================================================================
  257. class _XTP_EXT_CLASS CXTPImageManagerIcon : public CXTPCmdTarget
  258. {
  259. private:
  260. struct ICONDIRENTRY;
  261. struct ICONDIRHEADER;
  262. struct ICONIMAGE;
  263. struct GRPICONDIRENTRY;
  264. struct GRPICONDIR;
  265. public:
  266. //-----------------------------------------------------------------------
  267. // Summary:
  268. //     Constructs a CXTPImageManagerIcon object.
  269. // Parameters:
  270. //     nID - Icon identifier.
  271. //     nWidth - Initial width for the icon.
  272. //     nHeight - Initial height for the icon.
  273. //     pIconSet - Parent icon set icon will belong.
  274. //     pImageList - Parent icon set icon will belong.
  275. //-----------------------------------------------------------------------
  276. CXTPImageManagerIcon(UINT nID, int nWidth, int nHeight, CXTPImageManagerIconSet* pIconSet = NULL);
  277. CXTPImageManagerIcon(UINT nID, int nWidth, int nHeight, CXTPImageManagerImageList* pImageList); //<combine CXTPImageManagerIcon::CXTPImageManagerIcon@UINT@int@int@CXTPImageManagerIconSet*>
  278. //-----------------------------------------------------------------------
  279. // Summary:
  280. //     Destroys a CXTPImageManagerIcon object, handles cleanup and deallocation.
  281. //-----------------------------------------------------------------------
  282. ~CXTPImageManagerIcon();
  283. //-----------------------------------------------------------------------
  284. // Summary:
  285. //     Retrieves the image identifier.
  286. // Returns:
  287. //     Identifier of the image
  288. //-----------------------------------------------------------------------
  289. UINT GetID() const;
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     Checks if the image has alpha channel.
  293. // Returns:
  294. //     TRUE if the image has alpha channel; otherwise returns FALSE
  295. //-----------------------------------------------------------------------
  296. BOOL IsAlpha() const;
  297. //-------------------------------------------------------------------------
  298. // Summary:
  299. //     Checks if icons was scaled from another CXTPImageManagerIcon object.
  300. //-------------------------------------------------------------------------
  301. BOOL IsScaled() const;
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     Retrieves the icon handle.
  305. // Parameters:
  306. //     imageState - Image state for icon to retrieve
  307. // Returns:
  308. //     Icon handle.
  309. // See Also: XTPImageState
  310. //-----------------------------------------------------------------------
  311. CXTPImageManagerIconHandle& GetIcon();
  312. CXTPImageManagerIconHandle& GetIcon(XTPImageState imageState); // <combine CXTPImageManagerIcon::GetIcon>
  313. //-----------------------------------------------------------------------
  314. // Summary:
  315. //     Retrieves the faded icon.
  316. // Returns:
  317. //     Icon handle.
  318. //-----------------------------------------------------------------------
  319. CXTPImageManagerIconHandle& GetFadedIcon();
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     Retrieves the shadow for the icon.
  323. // Returns:
  324. //     Icon handle.
  325. //-----------------------------------------------------------------------
  326. CXTPImageManagerIconHandle& GetShadowIcon();
  327. //-----------------------------------------------------------------------
  328. // Summary:
  329. //     Retrieves the shadow for the icon.
  330. // Returns:
  331. //     Icon handle.
  332. //-----------------------------------------------------------------------
  333. CXTPImageManagerIconHandle& GetCheckedIcon();
  334. //-----------------------------------------------------------------------
  335. // Summary:
  336. //     Retrieves the pressed icon.
  337. // Returns:
  338. //     Icon handle.
  339. //-----------------------------------------------------------------------
  340. CXTPImageManagerIconHandle& GetPressedIcon();
  341. //-----------------------------------------------------------------------
  342. // Summary:
  343. //     Retrieves hot icon.
  344. // Returns:
  345. //     Icon handle.
  346. //-----------------------------------------------------------------------
  347. CXTPImageManagerIconHandle& GetHotIcon();
  348. //-----------------------------------------------------------------------
  349. // Summary:
  350. //     Retrieves the disabled icon.
  351. // Parameters:
  352. //     bCreateIfNotExists - Create if image not exists.
  353. // Returns:
  354. //     Icon handle.
  355. //-----------------------------------------------------------------------
  356. CXTPImageManagerIconHandle& GetDisabledIcon(BOOL bCreateIfNotExists = TRUE);
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     Determines if disabled icon exists
  360. // Returns:
  361. //     TRUE if disabled icon exists
  362. //-----------------------------------------------------------------------
  363. BOOL HasDisabledIcon() const;
  364. //-----------------------------------------------------------------------
  365. // Summary:
  366. //     Creates a disabled icon.
  367. // Parameters:
  368. //     clrDisabledLight - The lightest color of icon to generate
  369. //     clrDisabledDark -  The darkest color of icon to generate
  370. //-----------------------------------------------------------------------
  371. void CreateDisabledIcon(COLORREF clrDisabledLight = (COLORREF)-1, COLORREF clrDisabledDark = (COLORREF)-1);
  372. //-----------------------------------------------------------------------
  373. // Summary:
  374. //     Sets the icon.
  375. // Parameters:
  376. //     hIcon - Icon handle to set.
  377. //     nIDResourceIcon - Icon resource identifier.
  378. //     nWidth - Width of icon.
  379. //     nHeight - Height of icon.
  380. // Returns:
  381. //     TRUE if successful; otherwise returns FALSE
  382. //-----------------------------------------------------------------------
  383. BOOL SetIcon(const CXTPImageManagerIconHandle& hIcon);
  384. BOOL SetIcon(const CXTPImageManagerIconHandle& hIcon, XTPImageState imageState); // <combine CXTPImageManagerIcon::SetIcon@CXTPImageManagerIconHandle>
  385. BOOL SetIcon(UINT nIDResourceIcon, int nWidth, int nHeight); // <combine CXTPImageManagerIcon::SetIcon@CXTPImageManagerIconHandle>
  386. //-----------------------------------------------------------------------
  387. // Summary:
  388. //     Sets the disabled icon.
  389. // Parameters:
  390. //     hIcon - Icon handle to set.
  391. //-----------------------------------------------------------------------
  392. void SetDisabledIcon(const CXTPImageManagerIconHandle& hIcon);
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     Sets the hot icon.
  396. // Parameters:
  397. //     hIcon - Icon handle to set.
  398. //-----------------------------------------------------------------------
  399. void SetHotIcon(const CXTPImageManagerIconHandle& hIcon);
  400. //-----------------------------------------------------------------------
  401. // Summary:
  402. //     Sets the checked icon.
  403. // Parameters:
  404. //     hIcon - Icon handle to set.
  405. //-----------------------------------------------------------------------
  406. void SetCheckedIcon(const CXTPImageManagerIconHandle& hIcon);
  407. //-----------------------------------------------------------------------
  408. // Summary:
  409. //     Sets the icon.
  410. // Parameters:
  411. //     hIcon - Icon handle to set.
  412. //-----------------------------------------------------------------------
  413. void SetNormalIcon(const CXTPImageManagerIconHandle& hIcon);
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Sets the pressed icon.
  417. // Parameters:
  418. //     hIcon - Icon handle to set.
  419. //-----------------------------------------------------------------------
  420. void SetPressedIcon(const CXTPImageManagerIconHandle& hIcon);
  421. //-----------------------------------------------------------------------
  422. // Summary:
  423. //     Retrieves the size of the icon.
  424. // Parameters:
  425. //     hIcon - Icon handle.
  426. // Returns:
  427. //     Size of the icon.
  428. //-----------------------------------------------------------------------
  429. CSize GetExtent() const;
  430. static CSize AFX_CDECL GetExtent(HICON hIcon); // <COMBINE CXTPImageManagerIcon::GetExtent@const>
  431. //-----------------------------------------------------------------------
  432. // Summary:
  433. //     This method tests if file is alpha bitmap.
  434. // Parameters:
  435. //     pszFileName - File path.
  436. // Returns:
  437. //     TRUE if file is alpha bitmap
  438. //-----------------------------------------------------------------------
  439. static BOOL AFX_CDECL IsAlphaBitmapFile(LPCTSTR pszFileName);
  440. //-----------------------------------------------------------------------
  441. // Summary:
  442. //     This method tests if file is png image.
  443. // Parameters:
  444. //     pszFileName - File path.
  445. // Returns:
  446. //     TRUE if file is png image
  447. //-----------------------------------------------------------------------
  448. static BOOL AFX_CDECL IsPngBitmapFile(LPCTSTR pszFileName);
  449. //-----------------------------------------------------------------------
  450. // Summary:
  451. //     This method loads alpha bitmap from icon file.
  452. // Parameters:
  453. //     pszFileName - File path.
  454. //     nWidth - Icon width to load.
  455. // Returns:
  456. //     Alpha bitmap if icon with specified width was found; otherwise returns NULL.
  457. //-----------------------------------------------------------------------
  458. static HBITMAP AFX_CDECL LoadAlphaIcon(LPCTSTR pszFileName, int nWidth);
  459. //-----------------------------------------------------------------------
  460. // Summary:
  461. //     This method loads Alpha bitmap from resource file
  462. // Parameters:
  463. //     nIDResource - Resource identifier
  464. //     hModule - Handle to the instance of the module whose executable file contains the bitmap to be loaded.
  465. //     lpszResource - Long pointer to a null-terminated string that contains the name of the bitmap resource to be loaded
  466. // Remarks:
  467. //     Don't use LoadImage to load alpha bitmap, it loose alpha channel in some Windows.
  468. // Returns:
  469. //     Alpha bitmap handler.
  470. //-----------------------------------------------------------------------
  471. static HBITMAP AFX_CDECL LoadAlphaBitmap(UINT nIDResource);
  472. static HBITMAP AFX_CDECL LoadAlphaBitmap(HMODULE hModule, LPCTSTR lpszResource); // <combine CXTPImageManagerIcon::LoadAlphaBitmap@UINT>
  473. //-----------------------------------------------------------------------
  474. // Summary:
  475. //     This method loads bitmap from file on disk
  476. // Parameters:
  477. //     lpszFileName - File name of bitmap or png file
  478. //     lbAlphaBitmap - Determines if bitmap contained alpha layer
  479. // Remarks:
  480. //     This method loads png or bitmap from file
  481. // Returns:
  482. //     Bitmap handler.
  483. //-----------------------------------------------------------------------
  484. static HBITMAP AFX_CDECL LoadBitmapFromFile(LPCTSTR lpszFileName, BOOL* lbAlphaBitmap = NULL);
  485. //-----------------------------------------------------------------------
  486. // Summary:
  487. //     This method loads Alpha bitmap from resource file
  488. // Parameters:
  489. //     hModule - Handle to the instance of the module whose executable file contains the bitmap to be loaded.
  490. //     lpszResource - Long pointer to a null-terminated string that contains the name of the bitmap resource to be loaded
  491. //     lbAlphaBitmap - Determines if bitmap contained alpha layer
  492. // Remarks:
  493. //     This method loads png or bitmap resource from file
  494. // Returns:
  495. //     Alpha bitmap handler.
  496. //-----------------------------------------------------------------------
  497. static HBITMAP AFX_CDECL LoadBitmapFromResource(LPCTSTR lpszResource, BOOL* lbAlphaBitmap);
  498. static HBITMAP AFX_CDECL LoadBitmapFromResource(HMODULE hModule, LPCTSTR lpszResource, BOOL* lbAlphaBitmap); // <combine CXTPImageManagerIcon::LoadBitmapFromResource@LPCTSTR@BOOL*>
  499. //-----------------------------------------------------------------------
  500. // Summary:
  501. //     Checks if bitmap with specified resource has alpha channel.
  502. // Parameters:
  503. //     hModule - Module of the bitmap to check.
  504. //     lpBitmapName - Resource name of the bitmap to check.
  505. // Returns:
  506. //     TRUE if bitmap has alpha channel; otherwise returns FALSE.
  507. //-----------------------------------------------------------------------
  508. static BOOL AFX_CDECL IsAlphaBitmapResource(HMODULE hModule, LPCTSTR lpBitmapName);
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //     Checks if bitmap with specified resource is png resource.
  512. // Parameters:
  513. //     hModule - Module of the bitmap to check.
  514. //     lpBitmapName - Resource name of the bitmap to check.
  515. // Returns:
  516. //     TRUE if bitmap is png resource; otherwise returns FALSE.
  517. //-----------------------------------------------------------------------
  518. static BOOL AFX_CDECL IsPngBitmapResource(HMODULE hModule, LPCTSTR lpBitmapName);
  519. //-----------------------------------------------------------------------
  520. // Summary:
  521. //     The DrawAlphaBitmap function displays bitmaps that have transparent or semitransparent pixels.
  522. // Parameters:
  523. //     pDC     - Pointer to destination device context
  524. //     ptDest      - upper-left corner of the  destination rectangle
  525. //     ptSrc      - upper-left corner of the source rectangle
  526. //     hBitmap - Alpha bitmap handler
  527. //     szDest  - Destination size
  528. //     szSrc   - Source size
  529. //-----------------------------------------------------------------------
  530. static void AFX_CDECL DrawAlphaBitmap(CDC* pDC, HBITMAP hBitmap, CPoint ptDest, CSize szDest, CPoint ptSrc = 0, CSize szSrc = 0);
  531. //-----------------------------------------------------------------------
  532. // Summary:
  533. //     Creates valid alpha bits to use in AlphaBlend.
  534. // Parameters:
  535. //     hBitmap - Alpha bitmap handler
  536. // Returns:
  537. //     Valid alpha bits
  538. // See Also: BLENDFUNCTION, AlphaBlend
  539. //-----------------------------------------------------------------------
  540. static HBITMAP AFX_CDECL PreMultiplyAlphaBitmap(HBITMAP hBitmap, BOOL* pbAlpha = NULL, LPBYTE* lpBits = NULL);
  541. //-----------------------------------------------------------------------
  542. // Summary:
  543. //     This method is called to create mirror copy of bitmap
  544. // Parameters:
  545. //     hBitmap - Bitmap handle to make copy
  546. // Returns: new mirror bitmap
  547. //-----------------------------------------------------------------------
  548. static HBITMAP AFX_CDECL InvertAlphaBitmap(HBITMAP hBitmap);
  549. //-----------------------------------------------------------------------
  550. // Summary:
  551. //     This helper method retrieves information about alpha bitmap and its alpha bits.
  552. // Parameters:
  553. //     dcSrc   - Reference to CDC
  554. //     hBitmap - Alpha bitmap
  555. //     pbmi    - Bitmap information
  556. //     pBits   - Bitmap bits
  557. //     nSize   - Size of bits array
  558. // Returns:
  559. //     TRUE if successful; otherwise returns FALSE
  560. //-----------------------------------------------------------------------
  561. static BOOL AFX_CDECL GetBitmapBits(CDC& dcSrc, HBITMAP hBitmap, PBITMAPINFO& pbmi, LPVOID& pBits, UINT& nSize);
  562. //-----------------------------------------------------------------------
  563. // Summary:
  564. //     Copies alpha bitmap.
  565. // Parameters:
  566. //     hBitmap - Bitmap handler to be copied.
  567. // Returns:
  568. //     new alpha bitmap handler.
  569. //-----------------------------------------------------------------------
  570. static HBITMAP AFX_CDECL CopyAlphaBitmap(HBITMAP hBitmap, LPBYTE* lpBits = NULL);
  571. //-----------------------------------------------------------------------
  572. // Summary:
  573. //     Retrieves the icon height.
  574. // Returns:
  575. //     Height of the icon.
  576. //-----------------------------------------------------------------------
  577. int GetHeight() const;
  578. //-----------------------------------------------------------------------
  579. // Summary:
  580. //     Retrieves the icon width.
  581. // Returns:
  582. //     Width of the icon.
  583. //-----------------------------------------------------------------------
  584. int GetWidth() const;
  585. //-----------------------------------------------------------------------
  586. // Summary:
  587. //     Reads or writes this object from or to an archive.
  588. // Parameters:
  589. //     ar - A CArchive object to serialize to or from.
  590. //-----------------------------------------------------------------------
  591. void Serialize(CArchive& ar);
  592. void Copy(CXTPImageManagerIcon* pIcon);
  593. //-----------------------------------------------------------------------
  594. // Summary:
  595. //     Reads or writes this object from or to an archive.
  596. // Parameters:
  597. //     hIcon - Icon to be serialized
  598. //     ar - A CArchive object to serialize to or from.
  599. //-----------------------------------------------------------------------
  600. void SerializeIcon(CXTPImageManagerIconHandle& hIcon, CArchive& ar, long nSchema);
  601. //-----------------------------------------------------------------------
  602. // Summary:
  603. //     Draws the image in specified location.
  604. // Parameters:
  605. //     pDC    - Destination device context.
  606. //     pt     - Specifies the location of the image
  607. //     hIcon  - A handle to an icon.
  608. //     szIcon - Specifies the size of the image.
  609. //-----------------------------------------------------------------------
  610. void Draw(CDC* pDC, CPoint pt);
  611. void Draw(CDC* pDC, CPoint pt, CSize szIcon); // <combine CXTPImageManagerIcon::Draw@CDC*@CPoint>
  612. void Draw(CDC* pDC, CPoint pt, CXTPImageManagerIconHandle& hIcon, CSize szIcon = 0); // <combine CXTPImageManagerIcon::Draw@CDC*@CPoint>
  613. //-----------------------------------------------------------------------
  614. // Summary:
  615. //     Draws the image using the brush specified by the clrBrush parameter.
  616. // Parameters:
  617. //     pDC      - Destination device context.
  618. //     pt       - Specifies the location of the image.
  619. //     hIcon    - A handle to an icon.
  620. //     clrBrush - color of the brush used to draw the image.
  621. //-----------------------------------------------------------------------
  622. void DrawMono(CDC* pDC, CPoint pt, CXTPImageManagerIconHandle& hIcon, CSize szIcon, COLORREF clrBrush);
  623. //-------------------------------------------------------------------------
  624. // Summary:
  625. //     Redraw Fade and Shadow icons.
  626. //-------------------------------------------------------------------------
  627. void Refresh();
  628. public:
  629. //-----------------------------------------------------------------------
  630. // Summary:
  631. //     Use this method to scale icon.
  632. // Parameters:
  633. //     hIcon - Icon to be scaled.
  634. //     szExtent - Source icon size.
  635. //     nWidth - With of result icon.
  636. //-----------------------------------------------------------------------
  637. static HICON AFX_CDECL ScaleToFit(HICON hIcon, CSize szExtent, int nWidth);
  638. //-----------------------------------------------------------------------
  639. // Summary:
  640. //     Call this method to draw non-alpha icon in composited Vista Glass rectangle
  641. // Parameters:
  642. //     pDC - Pointer to device context
  643. //     pt - Pointer to draw icon
  644. //     szIcon - Size of the icon
  645. //     hIcon - Icon handle to draw
  646. //-----------------------------------------------------------------------
  647. static void AFX_CDECL DrawIconComposited(CDC* pDC, CPoint pt, CSize szIcon, HICON hIcon);
  648. private:
  649. void InitBimaps(CImageList& imageList, int nIndex);
  650. void CreateFadedIcon();
  651. void CreateShadowIcon();
  652. void Clear(BOOL bIcon = FALSE);
  653. COLORREF LightenColor(COLORREF clr, double factor);
  654. BOOL GetDIBBitmap(HBITMAP hBitmap, PBYTE& pBits, UINT& nBitsSize, PBITMAPINFO& pBitmapInfo, UINT& nBitmapInfoSize);
  655. HBITMAP ReadDIBBitmap(CArchive& ar, LPBYTE* pBits1);
  656. void WriteDIBBitmap(CArchive& ar, HBITMAP hBitmap);
  657. CXTPImageManager* GetImageManager() const;
  658. private:
  659. CXTPImageManagerIcon(const CXTPImageManagerIcon&): m_nID(0) {};
  660. const CXTPImageManagerIcon& operator=(const CXTPImageManagerIcon&) {return *this;};
  661. public:
  662. BOOL m_bDrawComposited; // Draw on Vista composited rects.
  663. private:
  664. const UINT m_nID;
  665. UINT m_nWidth;
  666. UINT m_nHeight;
  667. CXTPImageManagerIconHandle m_hIcon;
  668. CXTPImageManagerIconHandle m_hFaded;
  669. CXTPImageManagerIconHandle m_hShadow;
  670. CXTPImageManagerIconHandle m_hHot;
  671. CXTPImageManagerIconHandle m_hChecked;
  672. CXTPImageManagerIconHandle m_hPressed;
  673. CXTPImageManagerIconHandle m_hDisabled;
  674. CXTPImageManagerIconHandle m_hDisabledAuto;
  675. CXTPImageManagerIconSet* m_pIconSet;
  676. CXTPImageManagerImageList* m_pImageList;
  677. private:
  678. friend class CXTPImageManager;
  679. friend class CXTPImageManagerIconSet;
  680. friend class CXTPImageManagerIconHandle;
  681. };
  682. //===========================================================================
  683. // Summary:
  684. //     CXTPImageManagerIconSet represents the collection of icons for specified identifier.
  685. //===========================================================================
  686. class _XTP_EXT_CLASS CXTPImageManagerIconSet : public CXTPCmdTarget
  687. {
  688. public:
  689. typedef CMap<UINT, UINT, CXTPImageManagerIcon*, CXTPImageManagerIcon*> CIconSetMap; // Icons collection.
  690. public:
  691. //-----------------------------------------------------------------------
  692. // Summary:
  693. //     Constructs a CXTPImageManagerIconSet object.
  694. // Parameters:
  695. //     nID - Icon set identifier.
  696. //     pImageManager - Parent image manager CXTPImageManagerIconSet belongs.
  697. //-----------------------------------------------------------------------
  698. CXTPImageManagerIconSet(UINT nID, CXTPImageManager* pImageManager);
  699. //-----------------------------------------------------------------------
  700. // Summary:
  701. //     Destroys a CXTPImageManagerIconSet object, handles cleanup and deallocation.
  702. //-----------------------------------------------------------------------
  703. ~CXTPImageManagerIconSet();
  704. //-----------------------------------------------------------------------
  705. // Summary:
  706. //     Call this member to get the icon with the specified width
  707. // Parameters:
  708. //     nWidth - Width of the icon to retrieve.
  709. //     bScaled - TRUE to scale icon.
  710. // Returns:
  711. //     A pointer to a CXTPImageManagerIcon object
  712. //-----------------------------------------------------------------------
  713. CXTPImageManagerIcon* GetIcon(UINT nWidth, BOOL bScaled = TRUE);
  714. //-----------------------------------------------------------------------
  715. // Summary:
  716. //     Retrieves the collection of icons
  717. // Returns:
  718. //     A pointer to a CIconSetMap object
  719. //-----------------------------------------------------------------------
  720. CIconSetMap* GetIcons();
  721. //-----------------------------------------------------------------------
  722. // Summary:
  723. //     Retrieves the identifier of the collection set.
  724. // Returns:
  725. //     Identifier of icons.
  726. //-----------------------------------------------------------------------
  727. UINT GetID() const;
  728. //-------------------------------------------------------------------------
  729. // Summary:
  730. //     Removes all icons
  731. //-------------------------------------------------------------------------
  732. void RemoveAll();
  733. //-------------------------------------------------------------------------
  734. // Summary:
  735. //     Redraws all icons.
  736. //-------------------------------------------------------------------------
  737. void RefreshAll();
  738. private:
  739. CXTPImageManagerIcon* CreateIcon(UINT nWidth);
  740. void SetIcon(const CXTPImageManagerIconHandle& hIcon, UINT nWidth);
  741. void SetDisabledIcon(const CXTPImageManagerIconHandle& hIcon, UINT nWidth);
  742. void SetHotIcon(const CXTPImageManagerIconHandle& hIcon, UINT nWidth);
  743. void SetCheckedIcon(const CXTPImageManagerIconHandle& hIcon, UINT nWidth);
  744. void SetPressedIcon(const CXTPImageManagerIconHandle& hIcon, UINT nWidth);
  745. private:
  746. CXTPImageManagerIconSet(const CXTPImageManagerIconSet&): m_nID(0) {};
  747. const CXTPImageManagerIconSet& operator=(const CXTPImageManagerIconSet&) {return *this;};
  748. private:
  749. CIconSetMap m_mapIcons;
  750. const UINT m_nID;
  751. CXTPImageManager* m_pImageManager;
  752. private:
  753. friend class CXTPImageManager;
  754. friend class CXTPImageManagerIcon;
  755. };
  756. //{{AFX_CODEJOCK_PRIVATE
  757. class _XTP_EXT_CLASS CXTPImageManagerImageList
  758. {
  759. public:
  760. CXTPImageManagerImageList();
  761. ~CXTPImageManagerImageList();
  762. public:
  763. BOOL Lookup(UINT nCommand);
  764. CXTPImageManagerIcon* GetIcon(UINT nCommand);
  765. void Draw(CDC* pDC, CPoint pt, CXTPImageManagerIcon* pIcon, CSize szIcon);
  766. void RemoveAll();
  767. CSize GetIconSize() const;
  768. private:
  769. HIMAGELIST m_hImageList;
  770. BOOL m_bDestroyImageList;
  771. UINT m_nBaseCommand;
  772. CXTPImageManager* m_pImageManager;
  773. CMap<UINT, UINT, CXTPImageManagerIcon*, CXTPImageManagerIcon*> m_mapIcons;
  774. friend class CXTPImageManager;
  775. };
  776. //}}AFX_CODEJOCK_PRIVATE
  777. //===========================================================================
  778. // Summary:
  779. //     CXTPImageManager is a stand alone class. It is used to manipulate icons.
  780. //===========================================================================
  781. class _XTP_EXT_CLASS CXTPImageManager : public CXTPCmdTarget
  782. {
  783. public:
  784. //-----------------------------------------------------------------------
  785. // Summary:
  786. //     Constructs a CXTPImageManager object.
  787. //-----------------------------------------------------------------------
  788. CXTPImageManager();
  789. //-----------------------------------------------------------------------
  790. // Summary:
  791. //     Destroys a CXTPImageManager object, handles cleanup and deallocation.
  792. //-----------------------------------------------------------------------
  793. ~CXTPImageManager();
  794. public:
  795. //-----------------------------------------------------------------------
  796. // Summary:
  797. //     Adds the icons.
  798. // Parameters:
  799. //     nIDResourceBitmap  - Bitmap resource identifier
  800. //     lpszResourceBitmap - Bitmap resource identifier
  801. //     nIDResourceToolBar - Toolbar resource identifier
  802. //     bmpIcons           - Bitmap containing icons to be added.
  803. //     imlIcons           - Image list containing the icons to be added.
  804. //     pCommands          - Pointer to an array of IDs.
  805. //     nCount             - Number of elements in the array pointed to by lpIDArray.
  806. //     szIcon             - Size of the icons.
  807. //     imageState         - Images state.
  808. //     bAlpha             - TRUE if bitmap has alpha channel.
  809. // Returns:
  810. //     TRUE if successful; otherwise returns FALSE
  811. // Example:
  812. // <code>
  813. //
  814. // static UINT buttons[] =
  815. // {
  816. //     ID_BACK,
  817. //     ID_FORWARD,
  818. //     ID_STOP,
  819. //     ID_REFRESH,
  820. //     ID_HOME
  821. // }
  822. //
  823. // XTPImageManager()->SetMaskColor(RGB(0, 0xFF, 0));
  824. //
  825. // XTPImageManager()->SetIcons(IDR_TOOLBAR_NORMAL_SMALL, buttons, _countof(buttons), CSize(16, 16), xtpImageNormal);
  826. // XTPImageManager()->SetIcons(IDR_TOOLBAR_HOT_SMALL, buttons, _countof(buttons), CSize(16, 16), xtpImageHot);
  827. //
  828. // XTPImageManager()->SetIcons(IDR_TOOLBAR_NORMAL_LARGE, buttons, _countof(buttons), CSize(24, 24), xtpImageNormal);
  829. // XTPImageManager()->SetIcons(IDR_TOOLBAR_HOT_LARGE, buttons, _countof(buttons), CSize(24, 24), xtpImageHot);
  830. // </code>
  831. // See Also: XTPImageState, SetIcon
  832. //-----------------------------------------------------------------------
  833. BOOL SetIcons(UINT nIDResourceToolBar, XTPImageState imageState = xtpImageNormal);
  834. BOOL SetIcons(UINT nIDResourceToolBar, UINT nIDResourceBitmap, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  835. BOOL SetIcons(CBitmap& bmpIcons, UINT* pCommands, int nCount, CSize szIcon, XTPImageState imageState = xtpImageNormal, BOOL bAlpha = FALSE); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  836. BOOL SetIcons(UINT nIDResourceToolBar, CBitmap& bmpIcons, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  837. BOOL SetIcons(UINT nIDResourceBitmap, UINT* pCommands, int nCount, CSize szIcon, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  838. BOOL SetIcons(LPCTSTR lpszResourceBitmap, UINT* pCommands, int nCount, CSize szIcon, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  839. BOOL SetIcons(CImageList& imlIcons, UINT* pCommands, int nCount, CSize szIcon, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  840. BOOL SetIcons(UINT nIDResourceToolBar, CImageList& imlIcons, XTPImageState imageState = xtpImageNormal); // <COMBINE CXTPImageManager::SetIcons@UINT@XTPImageState>
  841. //-----------------------------------------------------------------------
  842. // Summary:
  843. //     This method loads icon from ico file
  844. // Parameters:
  845. //     lpszFileName - Path to ico file
  846. //     nIDCommand   - Icon command
  847. //     szIcon       - Size of the icons.
  848. //     imageState   - Images state.
  849. // Returns:
  850. //     TRUE if successful; otherwise returns FALSE
  851. //-----------------------------------------------------------------------
  852. BOOL SetIconFromIcoFile(LPCTSTR lpszFileName, UINT nIDCommand, CSize szIcon, XTPImageState imageState);
  853. //-----------------------------------------------------------------------
  854. // Summary:
  855. //     Call this to attach images from a HIMAGELIST control to the image manager
  856. // Parameters:
  857. //     hImageList - Pointer to an imagelist that holds icons
  858. //     nBaseCommand - ID to start numbering icons from the imagelist
  859. //     bDestoryImageList - Destroy imagelist control after the icons are copied to the imagemanager
  860. //-----------------------------------------------------------------------
  861. BOOL SetImageList(HIMAGELIST hImageList, int nBaseCommand, BOOL bDestoryImageList = FALSE);
  862. //-----------------------------------------------------------------------
  863. // Summary:
  864. //     Call this to create system HIMAGELIST from bitmap and add it to image manager
  865. // Parameters:
  866. //     nIDResourceBitmap - Bitmap resource identifier
  867. //     cx - Width of the icons
  868. //     nBaseCommand - ID to start numbering icons from the imagelist
  869. //     clrMask - Mask color for bitmap
  870. // Remarks:
  871. //     SetIcons method loads bitmaps and creates HICON for each icon in bitmap, SetImageList creates only
  872. //     one HIMAGELIST. use SetImageList to create only one GDI object for all icons.
  873. // See Also: SetIcons
  874. //-----------------------------------------------------------------------
  875. BOOL SetImageList(UINT nIDResourceBitmap, int cx, int nBaseCommand = 0, COLORREF clrMask = (COLORREF)-1);
  876. //-----------------------------------------------------------------------
  877. // Summary:
  878. //     Adds the icons from another image manager.
  879. // Parameters:
  880. //     pImageManager - A pointer to another image manager. The icons in pImageManager will be added to this image manager.
  881. //-----------------------------------------------------------------------
  882. void AddIcons(CXTPImageManager* pImageManager);
  883. void AddIcons(CXTPImageManagerIconSet* pIconSet);
  884. //-----------------------------------------------------------------------
  885. // Summary:
  886. //     Adds the icon.
  887. // Parameters:
  888. //     hIcon           - Icon handle to add
  889. //     nIDResourceIcon - Icon resource identifier
  890. //     nIDCommand      - Icon identifier.
  891. //     szIcon          - Size of the icons.
  892. //     imageState      - Images state.
  893. // Returns:
  894. //     TRUE if successful; otherwise returns FALSE
  895. // See Also: XTPImageState, SetIcons
  896. //-----------------------------------------------------------------------
  897. BOOL SetIcon(const CXTPImageManagerIconHandle& hIcon, UINT nIDCommand, CSize szIcon = 0, XTPImageState imageState = xtpImageNormal);
  898. BOOL SetIcon(UINT nIDResourceIcon, UINT nIDCommand, CSize szIcon = 0, XTPImageState imageState = xtpImageNormal); // <combine CXTPImageManager::SetIcon@CXTPImageManagerIconHandle@UINT@CSize@XTPImageState>
  899. BOOL SetIcon(LPCTSTR lpszResourceIcon, UINT nIDCommand, CSize szIcon = 0, XTPImageState imageState = xtpImageNormal); // <combine CXTPImageManager::SetIcon@CXTPImageManagerIconHandle@UINT@CSize@XTPImageState>
  900. //-----------------------------------------------------------------------
  901. // Summary:
  902. //     Call this method to set the color mask of the bitmaps that will be added.
  903. // Parameters:
  904. //     clrMask - Mask color to be set.
  905. // Returns:
  906. //     Previous color mask.
  907. //-----------------------------------------------------------------------
  908. COLORREF SetMaskColor(COLORREF clrMask);
  909. //-----------------------------------------------------------------------
  910. // Summary:
  911. //     Retrieves color mask.
  912. // Returns:
  913. //     Current color mask.
  914. //-----------------------------------------------------------------------
  915. COLORREF GetMaskColor() const;
  916. //-----------------------------------------------------------------------
  917. // Summary:
  918. //     Mirrors images around the y-axis, useful in RTL (Right-To-Left) Languages.
  919. // Parameters:
  920. //     bDrawReverted - If TRUE, images are "flipped" or Mirrored.
  921. //                     This should be used when displaying images in an
  922. //                     application that uses RTL (Right-To-Left) Languages.
  923. //-----------------------------------------------------------------------
  924. void DrawReverted(BOOL bDrawReverted);
  925. //-----------------------------------------------------------------------
  926. // Summary:
  927. //     Removes all icons.
  928. //-----------------------------------------------------------------------
  929. void RemoveAll();
  930. //-----------------------------------------------------------------------
  931. // Summary:
  932. //     Removes the specified icon.
  933. // Parameters:
  934. //     nIDCommand - Id of icon to be removed
  935. //-----------------------------------------------------------------------
  936. void RemoveIcon(UINT nIDCommand);
  937. //-----------------------------------------------------------------------
  938. // Summary:
  939. //     Redraws all icons.
  940. //-----------------------------------------------------------------------
  941. void RefreshAll();
  942. //-----------------------------------------------------------------------
  943. // Summary:
  944. //     This method used by CommandBars to add custom icons
  945. // Parameters:
  946. //     hIcon - Icon Handler to be added
  947. // Returns:
  948. //     Identifier of new added icon.
  949. //-----------------------------------------------------------------------
  950. UINT AddCustomIcon(const CXTPImageManagerIconHandle& hIcon);
  951. //-----------------------------------------------------------------------
  952. // Summary:
  953. //     Call this member to get the icons with the specified Id and width.
  954. // Parameters:
  955. //     nCommand - ID of the icon to be retrieved
  956. //     nWidth - Width of the icon to be retrieved
  957. // Returns:
  958. //     A pointer to a CXTPImageManagerIcon
  959. //-----------------------------------------------------------------------
  960. CXTPImageManagerIcon* GetImage(UINT nCommand, int nWidth = 16) const;
  961. //-----------------------------------------------------------------------
  962. // Summary:
  963. //     Call this method to determine if non scaled image exists in image manager
  964. // Parameters:
  965. //     nCommand - Image identifier to check
  966. //     nWidth - Image width to check
  967. // Returns:
  968. //     TRUE if image non scaled image exists.
  969. // See Also: GetImage
  970. //-----------------------------------------------------------------------
  971. BOOL IsPrimaryImageExists(UINT nCommand, int nWidth) const;
  972. //-----------------------------------------------------------------------
  973. // Summary:
  974. //     Call this member to get the icons set with the specified Id.
  975. // Parameters:
  976. //     nCommand - ID of the icon set to be retrieved
  977. // Returns:
  978. //     A pointer to a CXTPImageManagerIconSet object
  979. //-----------------------------------------------------------------------
  980. CXTPImageManagerIconSet* GetIconSet(UINT nCommand) const;
  981. //-----------------------------------------------------------------------
  982. // Summary:
  983. //     Call this member to get the icons set with the specified Id from an image list.
  984. // Parameters:
  985. //     nCommand - ID of the icon set to be retrieved
  986. // Returns:
  987. //     A pointer to a CXTPImageManagerImageList object
  988. //-----------------------------------------------------------------------
  989. CXTPImageManagerImageList* GetImageList(UINT nCommand) const;
  990. //-----------------------------------------------------------------------
  991. // Summary:
  992. //     Retrieves a collection of images.
  993. // Returns:
  994. //     A CMap object
  995. //-----------------------------------------------------------------------
  996. CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*>* GetImages();
  997. //-----------------------------------------------------------------------
  998. // Summary:
  999. //     Checks if icons set exists with the specified ID.
  1000. // Parameters:
  1001. //     nCommand - Identifier needed to check.
  1002. // Returns:
  1003. //     TRUE if successful; otherwise returns FALSE
  1004. //-----------------------------------------------------------------------
  1005. BOOL Lookup(UINT nCommand) const;
  1006. //-----------------------------------------------------------------------
  1007. // Summary:
  1008. //     Checks if the icons are drawn mirroredreverted.
  1009. // Returns:
  1010. //     TRUE if icons are drawn reverted; FALSE if drawn normal.
  1011. //-----------------------------------------------------------------------
  1012. BOOL IsDrawReverted() const;
  1013. BOOL IsDrawReverted(CDC* pDC) const;
  1014. CXTPImageManagerResource* GetResource(CSize szIcon);
  1015. public:
  1016. //-----------------------------------------------------------------------
  1017. // Summary:
  1018. //     Reads or writes icons from or to an archive.
  1019. // Parameters:
  1020. //     nCommand - Specified command to serialize.
  1021. //     ar - A CArchive object to serialize to or from.
  1022. //     pPX - A CXTPPropExchange object to serialize to or from.
  1023. //-----------------------------------------------------------------------
  1024. void Serialize(CArchive& ar);
  1025. void Serialize(UINT nCommand, CArchive& ar); //<COMBINE CXTPImageManager::Serialize@CArchive&>
  1026. //-----------------------------------------------------------------------
  1027. // Summary:
  1028. //     Reads or writes icons from or to an archive.
  1029. // Parameters:
  1030. //     nCommand - Specified command to serialize.
  1031. //     ar - A CArchive object to serialize to or from.
  1032. //     pPX - A CXTPPropExchange object to serialize to or from.
  1033. //-----------------------------------------------------------------------
  1034. void DoPropExchange(CXTPPropExchange* pPX);
  1035. void DoPropExchange(UINT nCommand, CXTPPropExchange* pPX); //<COMBINE CXTPImageManager::DoPropExchange@CXTPPropExchange*>
  1036. public:
  1037. //-----------------------------------------------------------------------
  1038. // Summary:
  1039. //     Checks if bitmap with specified resource has alpha channel.
  1040. // Parameters:
  1041. //     nIDResourceBitmap - Resource identifier of the bitmap to check.
  1042. // Returns:
  1043. //     TRUE if successful; otherwise returns FALSE.
  1044. //-----------------------------------------------------------------------
  1045. static BOOL AFX_CDECL IsAlphaBitmapResource(UINT nIDResourceBitmap);
  1046. static BOOL AFX_CDECL IsPngBitmapResource(UINT nIDResourceBitmap);
  1047. //-----------------------------------------------------------------------
  1048. // Summary:
  1049. //     Determines if the OS supports alpha icons.
  1050. // Returns:
  1051. //     TRUE if successful; otherwise returns FALSE.
  1052. // See Also: IsAlphaIconsImageListSupported
  1053. //-----------------------------------------------------------------------
  1054. BOOL IsAlphaIconsSupported() const;
  1055. //-----------------------------------------------------------------------
  1056. // Summary:
  1057. //     Determines if the OS supports alpha image list.
  1058. // Returns:
  1059. //     TRUE if successful; otherwise returns FALSE
  1060. // See Also: IsAlphaIconsSupported
  1061. //-----------------------------------------------------------------------
  1062. static BOOL AFX_CDECL IsAlphaIconsImageListSupported();
  1063. //-----------------------------------------------------------------------
  1064. // Summary:
  1065. //     Retrieves color of top-left pixel.
  1066. // Parameters:
  1067. //     bmp       - CBitmap reference.
  1068. //     nIDBitmap - Bitmap identifier.
  1069. //     pt        - location of pixel to retrieve.
  1070. // Returns:
  1071. //     COLORREF that will be used as transparent color.
  1072. //-----------------------------------------------------------------------
  1073. static COLORREF AFX_CDECL GetBitmapMaskColor(CBitmap& bmp, CPoint pt = 0);
  1074. static COLORREF AFX_CDECL GetBitmapMaskColor(UINT nIDBitmap, CPoint pt = 0); // <COMBINE CXTPImageManager::GetBitmapMaskColor@CBitmap&@CPoint>
  1075. //-----------------------------------------------------------------------
  1076. // Summary:
  1077. //     This method creates 24bit bitmap from 32bit alpha bitmaps to draw it in old OSes
  1078. // Parameters:
  1079. //     bmpAlpha - Resource bitmap identifier.
  1080. //     clrMask  - Mask color to be used
  1081. //     nIDBitmap - Resource bitmap identifier.
  1082. // Returns:
  1083. //     Reduced bitmap handler.
  1084. //-----------------------------------------------------------------------
  1085. static HBITMAP AFX_CDECL ResampleAlphaLayer(HBITMAP bmpAlpha, COLORREF clrMask);
  1086. static HBITMAP AFX_CDECL ResampleAlphaLayer(UINT nIDBitmap, COLORREF clrMask); // <COMBINE CXTPImageManager::ResampleAlphaLayer@HBITMAP@COLORREF>
  1087. //-----------------------------------------------------------------------
  1088. // Summary:
  1089. //     The TransparentBlt function performs a bit-block transfer of the color data corresponding to
  1090. //     a rectangle of pixels from the specified source device context into a destination device context.
  1091. // Parameters:
  1092. //     hdcDest - handle to destination DC
  1093. //     rcDest - destination rectangle
  1094. //     hdcSrc - handle to source DC
  1095. //     rcSrc - source rectangle
  1096. //     crTransparent - color to make transparent
  1097. // Returns:
  1098. //     If the function succeeds, the return value is TRUE.
  1099. // See Also: AlphaBlend
  1100. //-----------------------------------------------------------------------
  1101. BOOL TransparentBlt(HDC hdcDest, const CRect& rcDest,HDC hdcSrc, const CRect& rcSrc, UINT crTransparent) const;
  1102. //-----------------------------------------------------------------------
  1103. // Summary:
  1104. //     The AlphaBlend function displays bitmaps that have transparent or semitransparent pixels.
  1105. // Parameters:
  1106. //     hdcDest - handle to destination DC
  1107. //     rcDest - destination rectangle
  1108. //     hdcSrc - handle to source DC
  1109. //     rcSrc - source rectangle
  1110. // Returns:
  1111. //     If the function succeeds, the return value is TRUE.
  1112. // See Also: TransparentBlt
  1113. //-----------------------------------------------------------------------
  1114. BOOL AlphaBlend(HDC hdcDest, const CRect& rcDest,HDC hdcSrc, const CRect& rcSrc) const;
  1115. //{{AFX_CODEJOCK_PRIVATE
  1116. BOOL AlphaBlend2(HDC hdcDest, const CRect& rcDest,HDC hdcSrc, const CRect& rcSrc, BYTE Transparency) const;
  1117. //}}AFX_CODEJOCK_PRIVATE
  1118. //-----------------------------------------------------------------------
  1119. // Summary:
  1120. //     This function make a rectangle on device context as disabled.
  1121. // Parameters:
  1122. //     hDC              - A handle to DC
  1123. //     rcRect           - A rectangle to be disabled
  1124. //     clrDisabledLight - The lightest color of icon to generate
  1125. //     clrDisabledDark  - The darkest color of icon to generate
  1126. // Returns:
  1127. //     If the function succeeds, the return value is TRUE.
  1128. // See Also: BlackWhiteBitmap
  1129. //-----------------------------------------------------------------------
  1130. BOOL DisableBitmap(HDC hDC, const CRect& rcRect, COLORREF clrDisabledLight = (COLORREF)-1, COLORREF clrDisabledDark = (COLORREF)-1);
  1131. //-----------------------------------------------------------------------
  1132. // Summary:
  1133. //     This function make a rectangle on device context as gray scale.
  1134. // Parameters:
  1135. //     hDC                    - A handle to DC
  1136. //     rcRect                 - A rectangle to be disabled
  1137. //     nBlackAndWhiteContrast - Black-white contrast as integer from 0 to 255
  1138. // Returns:
  1139. //     If the function succeeds, the return value is TRUE.
  1140. // See Also: DisableBitmap
  1141. //-----------------------------------------------------------------------
  1142. BOOL BlackWhiteBitmap(HDC hDC, const CRect& rcRect, int nBlackAndWhiteContrast = 0);
  1143. //-----------------------------------------------------------------------
  1144. // Summary:
  1145. //     This helper method creates 32bit bitmap
  1146. // Parameters:
  1147. //     hDC - Pointer to valid context (can be NULL)
  1148. //     iWidth - Width of bitmap
  1149. //     iHeight - Height of bitmap
  1150. //     lpBits - Pointer to bits to return
  1151. // Returns:
  1152. //     Bitmap handle was created.
  1153. //-----------------------------------------------------------------------
  1154. static HBITMAP AFX_CDECL Create32BPPDIBSection(HDC hDC, int iWidth, int iHeight, LPBYTE* lpBits = NULL);
  1155. private:
  1156. BOOL LoadToolbar(UINT nIDResourceToolBar, UINT*& pItems, int& nCount, CSize& szIcon) const;
  1157. UINT PasteCustomImage(COleDataObject& data);
  1158. void CopyImage(UINT nCommand);
  1159. BOOL SplitBitmap(HBITMAP hbmSource, int nCount, HBITMAP* pDest) const;
  1160. BOOL IsWindow2000() const;
  1161. BOOL BitmapsCompatible(LPBITMAP lpbm1, LPBITMAP lpbm2) const;
  1162. BOOL McTransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  1163. int nWidthDest, int nHeightDest, HDC hdcSrc,
  1164. int nXOriginSrc, int nYOriginSrc, int nWidthSrc,
  1165. int nHeightSrc, UINT crTransparent) const;
  1166. BOOL BlendImages(HBITMAP hbmSrc1, BOOL bRTL1, HBITMAP hbmSrc2, BOOL bRTL2, HBITMAP hbmDst) const;
  1167. BOOL DoAlphaBlend(HDC hdcDest, int nXOriginDest, int nYOriginDest,
  1168. int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc,
  1169. int nYOriginSrc, int nWidthSrc, int nHeightSrc) const;
  1170. BOOL DoDisableBitmap(HBITMAP hBmp, COLORREF clrDisabledLight = (COLORREF)-1, COLORREF clrDisabledDark = (COLORREF)-1,
  1171.  int nBlackAndWhiteContrast = -1);
  1172. public:
  1173. static double m_dDisabledBrightnessFactor;  // Brightness factor of disabled icons.
  1174. static double m_dDisabledAlphaFactor;       // Alpha factor of disabled icons.
  1175. static BOOL   m_bAutoResample;              // TRUE to automatically re-sample alpha bitmaps if msimg32 not found.
  1176. static CLIPFORMAT m_nImageClipFormat;       // Clipboard format of icons.
  1177. static CLIPFORMAT m_nAlphaClipFormat;       // Clipboard format of icons.
  1178. BOOL   m_bUseResources;                     // TRUE to create single bitmap for all icons
  1179. private:
  1180. COLORREF m_clrMask;
  1181. CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*> m_mapImages;
  1182. CArray<CXTPImageManagerImageList*, CXTPImageManagerImageList*> m_arrImageList;
  1183. CMap<DWORD, DWORD, CXTPImageManagerResource*, CXTPImageManagerResource*> m_mapResources;
  1184. UINT m_nCustomID;
  1185. BOOL m_bDrawReverted;
  1186. private:
  1187. friend _XTP_EXT_CLASS CXTPImageManager* AFX_CDECL XTPImageManager();
  1188. friend class CXTPCustomizeSheet;
  1189. friend class CXTPImageManagerIcon;
  1190. friend class CXTPImageManagerIconHandle;
  1191. };
  1192. //===========================================================================
  1193. // Summary:
  1194. //    CXTPTempColorMask class can be used to temporarily set the color mask
  1195. //    used by XTPImageManager when using images with different color masks.
  1196. //    When the destructor is called the default mask is reset for
  1197. //    XTPImageManager.
  1198. // Example:
  1199. //    The following example demonstrates using CXTPTempColorMask.
  1200. // <code>
  1201. //    // temporarily change the mask color.
  1202. //    CXTPTempColorMask mask(RGB(0,255,0));
  1203. //    XTPImageManager()->SetIcons(IDB_FAVORITES,
  1204. //        icons, _countof(icons) CSize(16,16));
  1205. //
  1206. //    // set another mask color, CXTPTempColorMask will handle resetting
  1207. //    // the default color mask when it is destroyed.
  1208. //    XTPImageManager()->SetMaskColor(RGB(255,0,255));
  1209. //    XTPImageManager()->SetIcons(IDR_TOOLBAR_MASKED,
  1210. //        buttons, _countof(buttons), CSize(16,16), xtpImageNormal);
  1211. // </code>
  1212. // See Also:
  1213. //    CXTPImageManager::GetMaskColor, CXTPImageManager::SetMaskColor,
  1214. //    CXTPPaintManagerColor::GetStandardColor
  1215. //========================================================================
  1216. class _XTP_EXT_CLASS CXTPTempColorMask
  1217. {
  1218. public:
  1219. //-----------------------------------------------------------------------
  1220. // Summary:
  1221. //     Constructs a CXTPTempColorMask object and initializes the
  1222. //     application defined mask color and saves the default mask color
  1223. //     used by XTPImageManager.
  1224. // Parameters:
  1225. //     crNewMask - An RGB value that represents the new color mask value used
  1226. //                 by XTPImageManager.
  1227. //-----------------------------------------------------------------------
  1228. CXTPTempColorMask(COLORREF crNewMask);
  1229. //-----------------------------------------------------------------------
  1230. // Summary:
  1231. //     Destructor for CXTPTempColorMask. Resets the default mask color
  1232. //     used by XTPImageManager back to its original color value.
  1233. //-----------------------------------------------------------------------
  1234. virtual ~CXTPTempColorMask();
  1235. private:
  1236. COLORREF m_crMask;
  1237. };
  1238. //////////////////////////////////////////////////////////////////////////
  1239. AFX_INLINE CXTPImageManagerIconHandle::operator HICON() const {
  1240. return m_hIcon;
  1241. }
  1242. AFX_INLINE UINT CXTPImageManagerIconSet::GetID() const {
  1243. return m_nID;
  1244. }
  1245. AFX_INLINE BOOL CXTPImageManagerIcon::IsScaled() const {
  1246. return FALSE;
  1247. }
  1248. _XTP_EXT_CLASS CXTPImageManager* AFX_CDECL XTPImageManager();
  1249. AFX_INLINE CXTPImageManagerIconSet::CIconSetMap* CXTPImageManagerIconSet::GetIcons() {
  1250. return &m_mapIcons;
  1251. }
  1252. AFX_INLINE CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*>* CXTPImageManager::GetImages() {
  1253. return  &m_mapImages;
  1254. }
  1255. AFX_INLINE void CXTPImageManager::DrawReverted(BOOL bDrawReverted) {
  1256. m_bDrawReverted = bDrawReverted;
  1257. }
  1258. AFX_INLINE BOOL CXTPImageManager::IsDrawReverted() const {
  1259. return m_bDrawReverted;
  1260. }
  1261. AFX_INLINE CXTPTempColorMask::CXTPTempColorMask(COLORREF crNewMask) {
  1262. m_crMask = XTPImageManager()->SetMaskColor(crNewMask);
  1263. }
  1264. AFX_INLINE CXTPTempColorMask::~CXTPTempColorMask() {
  1265. XTPImageManager()->SetMaskColor(m_crMask);
  1266. }
  1267. #endif //#if !defined(__XTPIMAGEMANAGER_H__)