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

界面编程

开发平台:

Visual C++

  1. ASSERT( FALSE );
  2. ::DeleteObject(
  3. ::SelectObject(
  4. hDstDC,
  5. hOldDst
  6. )
  7. );
  8. ::DeleteDC( hDstDC );
  9. return NULL;
  10. } // if( hSrcDC == NULL )
  11. BITMAP _bmpInfoDstDIB;
  12. ::memset(
  13. &_bmpInfoDstDIB,
  14. 0,
  15. sizeof(BITMAP)
  16. );
  17. ::GetObject(
  18. hDstDIB,
  19. sizeof(BITMAP),
  20. &_bmpInfoDstDIB
  21. );
  22. for( ; (_bmpInfoDstDIB.bmWidthBytes % 4) != 0; _bmpInfoDstDIB.bmWidthBytes ++ );
  23. HBITMAP hOldSrc = (HBITMAP)
  24. ::SelectObject(
  25. hSrcDC,
  26. hBitmapSrc
  27. );
  28. ::BitBlt(
  29. hDstDC,
  30. 0,
  31. 0,
  32. _bmpInfoSrcBmp.bmWidth,
  33. _bmpInfoSrcBmp.bmHeight,
  34. hSrcDC,
  35. 0,
  36. 0,
  37. SRCCOPY
  38. );
  39. BYTE nLowRed = GetRValue( clrTransparent );
  40. BYTE nLowGreen = GetGValue( clrTransparent );
  41. BYTE nLowBlue = GetBValue( clrTransparent );
  42. BYTE nHighRed = BYTE( min( 0xff, ( nLowRed + GetRValue(clrTolerance) ) ) );
  43. BYTE nHighGreen = BYTE( min( 0xff, ( nLowGreen + GetGValue(clrTolerance) ) ) );
  44. BYTE nHighBlue = BYTE( min( 0xff, ( nLowBlue + GetBValue(clrTolerance) ) ) );
  45. BYTE * pDstColorSurface =
  46. (BYTE *)_bmpInfoDstDIB.bmBits
  47. + (_bmpInfoDstDIB.bmHeight - 1) * _bmpInfoDstDIB.bmWidthBytes;
  48. for( int nY = 0; nY < _bmpInfoSrcBmp.bmHeight; nY++ )
  49. {
  50. for( int nX = 0; nX < _bmpInfoSrcBmp.bmWidth; nX++ )
  51. {
  52. LPLONG ptrLinePart = (LPLONG)pDstColorSurface + nX;
  53. BYTE nColorPart = GetRValue( (*ptrLinePart) );
  54. if( nColorPart >= nLowRed && nColorPart <= nHighRed )
  55. {
  56. nColorPart = GetGValue( (*ptrLinePart) );
  57. if( nColorPart >= nLowGreen && nColorPart <= nHighGreen )
  58. {
  59. nColorPart = GetBValue( (*ptrLinePart) );
  60. if( nColorPart >= nLowBlue && nColorPart <= nHighBlue )
  61. continue;
  62. } // if( nColorPart >= nLowGreen && nColorPart <= nHighGreen )
  63. } // if( nColorPart >= nLowRed && nColorPart <= nHighRed )
  64. (*ptrLinePart) =
  65. CExtBitmap::stat_HLS_Adjust(
  66. (*ptrLinePart),
  67. percentH,
  68. percentL,
  69. percentS
  70. );
  71. } // for( int nX = 0; nX < _bmpInfoSrcBmp.bmWidth; nX++ )
  72. pDstColorSurface -= _bmpInfoDstDIB.bmWidthBytes;
  73. } // for( int nY = 0; nY < _bmpInfoSrcBmp.bmHeight; nY++ )
  74. ::SelectObject(
  75. hSrcDC,
  76. hOldSrc
  77. );
  78. ::DeleteDC( hSrcDC );
  79. ::SelectObject(
  80. hDstDC,
  81. hOldDst
  82. );
  83. ::DeleteDC( hDstDC );
  84. return hDstDIB;
  85. }
  86. bool CExtPaintManager::stat_HLS_Adjust_Bitmap(
  87. CBitmap & _bmp,
  88. COLORREF clrTransparent, // = RGB(0,0,0)
  89. COLORREF clrTolerance, // = RGB(0,0,0)
  90. double percentH, // = 0.0
  91. double percentL, // = 0.0
  92. double percentS // = 0.0
  93. )
  94. {
  95. HBITMAP hBitmapSrc = (HBITMAP)_bmp.GetSafeHandle();
  96. if( hBitmapSrc == NULL )
  97. return false;
  98. if( percentH == 0.0
  99. && percentL == 0.0
  100. && percentS == 0.0
  101. )
  102. return true;
  103. HBITMAP hBitmapDst =
  104. CExtPaintManager::stat_HLS_Adjust_Bitmap(
  105. hBitmapSrc,
  106. clrTransparent,
  107. clrTolerance,
  108. percentH,
  109. percentL,
  110. percentS
  111. );
  112. if( hBitmapDst == NULL )
  113. return false;
  114. _bmp.Detach();
  115. _bmp.Attach( hBitmapDst );
  116. ::DeleteObject( hBitmapSrc );
  117. return true;
  118. }
  119. // based on the source code by Jean-Edouard Lachand-Robert
  120. HRGN CExtPaintManager::stat_HBITMAPtoHRGN(
  121. HBITMAP hBitmap,
  122. COLORREF clrTransparent,
  123. COLORREF clrTolerance // = RGB(0,0,0)
  124. )
  125. {
  126. if( hBitmap == NULL )
  127. {
  128. ASSERT( FALSE );
  129. return NULL;
  130. } // if( hBitmap == NULL )
  131. HDC hDstDC = ::CreateCompatibleDC( NULL );
  132. if( hDstDC == NULL )
  133. {
  134. ASSERT( FALSE );
  135. return NULL;
  136. } // if( hDstDC == NULL )
  137. BITMAP _bmpInfoSrcBmp;
  138. ::memset( &_bmpInfoSrcBmp, 0, sizeof(BITMAP) );
  139. ::GetObject( hBitmap, sizeof(BITMAP), &_bmpInfoSrcBmp );
  140. BITMAPINFOHEADER _bmpInfoHdr =
  141. {
  142. sizeof(BITMAPINFOHEADER),
  143. _bmpInfoSrcBmp.bmWidth,
  144. _bmpInfoSrcBmp.bmHeight,
  145. 1,
  146. 32,
  147. BI_RGB,
  148. 0,
  149. 0,
  150. 0,
  151. 0,
  152. 0
  153. };
  154. LPVOID p32bitColorSurface = NULL; 
  155. HBITMAP hDstDIB = ::CreateDIBSection( hDstDC, (BITMAPINFO *)&_bmpInfoHdr, DIB_RGB_COLORS, &p32bitColorSurface, NULL, 0 );
  156. if( hDstDIB == NULL )
  157. {
  158. ASSERT( FALSE );
  159. ::DeleteDC( hDstDC );
  160. return NULL;
  161. } // if( hDstDIB == NULL )
  162. ASSERT( p32bitColorSurface != NULL );
  163. HBITMAP hOldDst = (HBITMAP) ::SelectObject( hDstDC, hDstDIB );
  164. HDC hSrcDC = ::CreateCompatibleDC( hDstDC );
  165. if( hSrcDC == NULL )
  166. {
  167. ASSERT( FALSE );
  168. ::DeleteObject( ::SelectObject( hDstDC, hOldDst ) );
  169. ::DeleteDC( hDstDC );
  170. return NULL;
  171. } // if( hSrcDC == NULL )
  172. BITMAP _bmpInfoDstDIB;
  173. ::memset( &_bmpInfoDstDIB, 0, sizeof(BITMAP) );
  174. ::GetObject( hDstDIB, sizeof(BITMAP), &_bmpInfoDstDIB );
  175. for( ; (_bmpInfoDstDIB.bmWidthBytes % 4) != 0; _bmpInfoDstDIB.bmWidthBytes ++ );
  176. HBITMAP hOldSrc = (HBITMAP) ::SelectObject( hSrcDC, hBitmap );
  177. ::BitBlt( hDstDC, 0, 0, _bmpInfoSrcBmp.bmWidth, _bmpInfoSrcBmp.bmHeight, hSrcDC, 0, 0, SRCCOPY );
  178. static const DWORD g_nReallocSize = 200;
  179. DWORD nMaxParts = g_nReallocSize;
  180. HANDLE hGlobal = ::GlobalAlloc( GMEM_MOVEABLE, sizeof(RGNDATAHEADER) + ( sizeof(RECT) * nMaxParts ) );
  181. RGNDATA * pRgnData = (RGNDATA *) ::GlobalLock( hGlobal );
  182. ::memset( LPVOID(pRgnData), 0, sizeof(RGNDATAHEADER) + ( sizeof(RECT) * nMaxParts ) );
  183. pRgnData->rdh.dwSize = sizeof(RGNDATAHEADER);
  184. pRgnData->rdh.iType = RDH_RECTANGLES;
  185. pRgnData->rdh.nCount = pRgnData->rdh.nRgnSize = 0;
  186. ::SetRect( &pRgnData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0 );
  187. BYTE nLowRed = GetRValue( clrTransparent );
  188. BYTE nLowGreen = GetGValue( clrTransparent );
  189. BYTE nLowBlue = GetBValue( clrTransparent );
  190. BYTE nHighRed = BYTE( min( 0xff, ( nLowRed + GetRValue(clrTolerance) ) ) );
  191. BYTE nHighGreen = BYTE( min( 0xff, ( nLowGreen + GetGValue(clrTolerance) ) ) );
  192. BYTE nHighBlue = BYTE( min( 0xff, ( nLowBlue + GetBValue(clrTolerance) ) ) );
  193. BYTE * pDstColorSurface = (BYTE *)_bmpInfoDstDIB.bmBits + (_bmpInfoDstDIB.bmHeight - 1) * _bmpInfoDstDIB.bmWidthBytes;
  194. HRGN hRgnResult = NULL;
  195. for( int nY = 0; nY < _bmpInfoSrcBmp.bmHeight; nY++ )
  196. {
  197. for( int nX = 0; nX < _bmpInfoSrcBmp.bmWidth; nX++ )
  198. {
  199. LPLONG ptrLinePart = (LPLONG)pDstColorSurface + nX;
  200. int nSavedX = nX;
  201. for( ; nX < _bmpInfoSrcBmp.bmWidth; ptrLinePart++, nX++ )
  202. {
  203. BYTE nColorPart = GetRValue( (*ptrLinePart) );
  204. if( nColorPart >= nLowRed && nColorPart <= nHighRed )
  205. {
  206. nColorPart = GetGValue( (*ptrLinePart) );
  207. if( nColorPart >= nLowGreen && nColorPart <= nHighGreen )
  208. {
  209. nColorPart = GetBValue( (*ptrLinePart) );
  210. if( nColorPart >= nLowBlue && nColorPart <= nHighBlue )
  211. break;
  212. } // if( nColorPart >= nLowGreen && nColorPart <= nHighGreen )
  213. } // if( nColorPart >= nLowRed && nColorPart <= nHighRed )
  214. } // for( ; nX < _bmpInfoSrcBmp.bmWidth; ptrLinePart++, nX++ )
  215. if( nX > nSavedX )
  216. {
  217. if( pRgnData->rdh.nCount >= nMaxParts )
  218. {
  219. ::GlobalUnlock( hGlobal );
  220. DWORD dwPrevParts = nMaxParts;
  221. nMaxParts += g_nReallocSize;
  222. hGlobal = ::GlobalReAlloc( hGlobal, sizeof(RGNDATAHEADER) + (sizeof(RECT) * nMaxParts), GMEM_MOVEABLE );
  223. pRgnData = (RGNDATA *) ::GlobalLock( hGlobal );
  224. ::memset( LPVOID( LPBYTE(pRgnData) + sizeof(RGNDATAHEADER) + ( sizeof(RECT) * dwPrevParts ) ), 0, sizeof(RECT) * ( nMaxParts - dwPrevParts ) );
  225. } // if( pRgnData->rdh.nCount >= nMaxParts )
  226. LPRECT pRect = (LPRECT)&pRgnData->Buffer;
  227. ::SetRect( &pRect[pRgnData->rdh.nCount], nSavedX, nY, nX, nY + 1 );
  228. if( nSavedX < pRgnData->rdh.rcBound.left )
  229. pRgnData->rdh.rcBound.left = nSavedX;
  230. if( nY < pRgnData->rdh.rcBound.top )
  231. pRgnData->rdh.rcBound.top = nY;
  232. if( nX > pRgnData->rdh.rcBound.right )
  233. pRgnData->rdh.rcBound.right = nX;
  234. if( (nY + 1) > pRgnData->rdh.rcBound.bottom )
  235. pRgnData->rdh.rcBound.bottom = nY+1;
  236. pRgnData->rdh.nCount ++;
  237. if( pRgnData->rdh.nCount == 2000 )
  238. {
  239. HRGN hRgnPart = ::ExtCreateRegion( NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * nMaxParts), pRgnData );
  240. if( hRgnResult != NULL )
  241. {
  242. ::CombineRgn( hRgnResult, hRgnResult, hRgnPart, RGN_OR );
  243. ::DeleteObject( hRgnPart );
  244. } // if( hRgnResult != NULL )
  245. else
  246. hRgnResult = hRgnPart;
  247. pRgnData->rdh.nCount = 0;
  248. ::SetRect( &pRgnData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0 );
  249. } // if( pRgnData->rdh.nCount == 2000 )
  250. } // if( nX > nSavedX )
  251. } // for( int nX = 0; nX < _bmpInfoSrcBmp.bmWidth; nX++ )
  252. pDstColorSurface -= _bmpInfoDstDIB.bmWidthBytes;
  253. } // for( int nY = 0; nY < _bmpInfoSrcBmp.bmHeight; nY++ )
  254. HRGN hRgnPart =
  255. ::ExtCreateRegion( NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * nMaxParts), pRgnData );
  256. if( hRgnResult != NULL )
  257. {
  258. ::CombineRgn( hRgnResult, hRgnResult, hRgnPart, RGN_OR );
  259. ::DeleteObject( hRgnPart );
  260. } // if( hRgnResult != NULL )
  261. else
  262. hRgnResult = hRgnPart;
  263. ::GlobalFree( hGlobal );
  264. ::SelectObject( hSrcDC, hOldSrc );
  265. ::DeleteDC( hSrcDC );
  266. ::DeleteObject( ::SelectObject( hDstDC, hOldDst ) );
  267. ::DeleteDC( hDstDC );
  268. return hRgnResult;
  269. }
  270. #endif // __EXT_PM_BACK_COMPATIBILITY_BITMAP_API
  271. #if (!defined __EXT_MFC_NO_DOCK_MARKERS)
  272. CExtPaintManager::DockMarkerBase * CExtPaintManager::DockMarker_CreateObject(
  273. int eResizablePanelDockingType
  274. )
  275. {
  276. ASSERT_VALID( this );
  277. if( eResizablePanelDockingType == INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_XP) )
  278. return (new DockMarker2008XP( this, eResizablePanelDockingType ) );
  279. if( eResizablePanelDockingType == INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_VISTA) )
  280. return (new DockMarker2008Vista( this, eResizablePanelDockingType ) );
  281. switch( m_eStyle2005 )
  282. {
  283. case __ES2005_BETA1:
  284. return (new DockMarkerBase( this, eResizablePanelDockingType ) );
  285. case __ES2005_BETA2:
  286. case __ES2005_RC:
  287. return (new DockMarkerBeta2( this, eResizablePanelDockingType ) );
  288. default:
  289. {
  290. ASSERT( FALSE );
  291. AfxThrowNotSupportedException();
  292. }
  293. #if _MFC_VER < 0x710
  294. return NULL;
  295. #endif // #if _MFC_VER < 0x710
  296. } // switch( m_eStyle2005 )
  297. }
  298. CExtPaintManager::DockMarkerBase::DockMarkerBase(
  299. CExtPaintManager * pPM,
  300. int eResizablePanelDockingType,
  301. eDockMarkerType_t eDockMarkerType, // = __EDMT_EMPTY
  302. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  303. )
  304. : m_eDockMarkerType( __EDMT_EMPTY )
  305. , m_size( 0, 0 )
  306. , m_rcScreen( 0, 0, 0, 0 )
  307. , m_bSparsedMode( false )
  308. , m_ptOffsetInner( 0, 0 )
  309. , m_pPM( pPM )
  310. , m_eResizablePanelDockingType( eResizablePanelDockingType )
  311. {
  312. ASSERT_VALID( pPM );
  313. ASSERT(
  314. INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_MIN_VALUE) <= m_eResizablePanelDockingType
  315. && m_eResizablePanelDockingType <= INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_MAX_VALUE)
  316. );
  317. if( m_eResizablePanelDockingType == INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_AUTO) )
  318. {
  319. m_eResizablePanelDockingType = INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_XP);
  320. if( g_PaintManager.m_bIsWinVistaOrLater
  321. && g_PaintManager.m_DWM.IsCompositionEnabled()
  322. )
  323. m_eResizablePanelDockingType = INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_VISTA);
  324. }
  325. if( m_eResizablePanelDockingType == INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2008_XP)
  326. && (!(
  327. g_PaintManager.m_bIsWin2000orLater
  328. && CExtPaintManager::stat_GetBPP() >= 24
  329. ))
  330. )
  331. m_eResizablePanelDockingType = INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2005);
  332. if( eDockMarkerType != __EDMT_EMPTY )
  333. {
  334. VERIFY(
  335. Create(
  336. false,
  337. eDockMarkerType,
  338. rcScreen
  339. )
  340. );
  341. }
  342. }
  343. CExtPaintManager::DockMarkerBeta2::DockMarkerBeta2(
  344. CExtPaintManager * pPM,
  345. int eResizablePanelDockingType,
  346. eDockMarkerType_t eDockMarkerType, // = __EDMT_EMPTY
  347. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  348. )
  349. : CExtPaintManager::DockMarkerBase(
  350. pPM,
  351. eResizablePanelDockingType
  352. )
  353. {
  354. if( eDockMarkerType != __EDMT_EMPTY )
  355. {
  356. VERIFY(
  357. Create(
  358. false,
  359. eDockMarkerType,
  360. rcScreen
  361. )
  362. );
  363. }
  364. }
  365. CExtPaintManager::DockMarker2008XP::DockMarker2008XP(
  366. CExtPaintManager * pPM,
  367. int eResizablePanelDockingType,
  368. eDockMarkerType_t eDockMarkerType, // = __EDMT_EMPTY
  369. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  370. )
  371. : CExtPaintManager::DockMarkerBase(
  372. pPM,
  373. eResizablePanelDockingType
  374. )
  375. {
  376. if( eDockMarkerType != __EDMT_EMPTY )
  377. {
  378. VERIFY(
  379. Create(
  380. false,
  381. eDockMarkerType,
  382. rcScreen
  383. )
  384. );
  385. }
  386. }
  387. CExtPaintManager::DockMarker2008Vista::DockMarker2008Vista(
  388. CExtPaintManager * pPM,
  389. int eResizablePanelDockingType,
  390. eDockMarkerType_t eDockMarkerType, // = __EDMT_EMPTY
  391. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  392. )
  393. : CExtPaintManager::DockMarkerBase(
  394. pPM,
  395. eResizablePanelDockingType
  396. )
  397. {
  398. if( eDockMarkerType != __EDMT_EMPTY )
  399. {
  400. VERIFY(
  401. Create(
  402. false,
  403. eDockMarkerType,
  404. rcScreen
  405. )
  406. );
  407. }
  408. }
  409. CExtPaintManager::DockMarkerBase::~DockMarkerBase()
  410. {
  411. Empty();
  412. }
  413. CExtPaintManager::DockMarkerBeta2::~DockMarkerBeta2()
  414. {
  415. Empty();
  416. }
  417. CExtPaintManager::DockMarker2008XP::~DockMarker2008XP()
  418. {
  419. Empty();
  420. }
  421. CExtPaintManager::DockMarker2008Vista::~DockMarker2008Vista()
  422. {
  423. Empty();
  424. }
  425. bool CExtPaintManager::DockMarkerBase::IsEmpty() const
  426. {
  427. if( m_eDockMarkerType == __EDMT_EMPTY )
  428. {
  429. ASSERT( m_bmpIn.IsEmpty() );
  430. ASSERT( m_bmpOut.IsEmpty() );
  431. ASSERT( m_rgn.GetSafeHandle() == NULL );
  432. ASSERT( m_size.cx == 0 );
  433. ASSERT( m_size.cy == 0 );
  434. ASSERT( m_arrChildren.GetSize() == 0 );
  435. return true;
  436. } // if( m_rgn.GetSafeHandle() == NULL )
  437. return false;
  438. }
  439. bool CExtPaintManager::DockMarkerBase::CreateFromBitmapResources(
  440. CRect rcScreen,
  441. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  442. COLORREF clrTransparentIn,
  443. UINT nResourceBmpIn,
  444. UINT nResourceBmpOut,
  445. __EXT_MFC_SAFE_LPCTSTR strResourceTypeBmpIn, // = RT_BITMAP // default bitmap section
  446. __EXT_MFC_SAFE_LPCTSTR strResourceTypeBmpOut, // = RT_BITMAP // default bitmap section
  447. HINSTANCE hInstBmpIn, // = NULL // find it automatically
  448. HINSTANCE hInstBmpOut // = NULL // find it automatically
  449. )
  450. {
  451. return
  452. CreateFromBitmapResources(
  453. rcScreen,
  454. eDockMarkerType,
  455. clrTransparentIn,
  456. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE(nResourceBmpIn) ),
  457. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE(nResourceBmpOut) ),
  458. strResourceTypeBmpIn,
  459. strResourceTypeBmpOut,
  460. hInstBmpIn,
  461. hInstBmpOut
  462. );
  463. }
  464. bool CExtPaintManager::DockMarkerBase::CreateFromBitmapResources(
  465. CRect rcScreen,
  466. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  467. COLORREF clrTransparentIn,
  468. __EXT_MFC_SAFE_LPCTSTR strResourceBmpIn,
  469. __EXT_MFC_SAFE_LPCTSTR strResourceBmpOut, // = NULL
  470. __EXT_MFC_SAFE_LPCTSTR strResourceTypeBmpIn, // = RT_BITMAP // default bitmap section
  471. __EXT_MFC_SAFE_LPCTSTR strResourceTypeBmpOut, // = RT_BITMAP // default bitmap section
  472. HINSTANCE hInstBmpIn, // = NULL // find it automatically
  473. HINSTANCE hInstBmpOut // = NULL // find it automatically
  474. )
  475. {
  476. ASSERT( IsEmpty() );
  477. ASSERT( eDockMarkerType != __EDMT_EMPTY );
  478. ASSERT( strResourceBmpIn != NULL );
  479. if( strResourceBmpOut == NULL )
  480. {
  481.  strResourceBmpOut = strResourceBmpIn;
  482.  strResourceTypeBmpOut = strResourceTypeBmpIn;
  483.  hInstBmpOut = hInstBmpIn;
  484. } // if( strResourceBmpOut == NULL )
  485. CExtBitmap _bmpIn;
  486. if( ! _bmpIn.LoadBMP_Resource(
  487. strResourceBmpIn,
  488. strResourceTypeBmpIn,
  489. hInstBmpIn
  490. )
  491. )
  492. {
  493. ASSERT( FALSE );
  494. return false;
  495. }
  496. CExtBitmap _bmpOut;
  497. if( ! _bmpOut.LoadBMP_Resource(
  498. strResourceBmpOut,
  499. strResourceTypeBmpOut,
  500. hInstBmpOut
  501. )
  502. )
  503. {
  504. ASSERT( FALSE );
  505. return false;
  506. }
  507. return
  508. CreateFromBitmaps(
  509. rcScreen,
  510. eDockMarkerType,
  511. clrTransparentIn,
  512. _bmpIn,
  513. _bmpOut
  514. );
  515. }
  516. bool CExtPaintManager::DockMarkerBase::CreateFromBitmapData(
  517. CRect rcScreen,
  518. eDockMarkerType_t eDockMarkerType,
  519. COLORREF clrTransparentIn,
  520. const BYTE * pDataBmpIn,
  521. DWORD dwSizeDataBmpIn,
  522. const BYTE * pDataBmpOut, // = NULL
  523. DWORD dwSizeDataBmpOut // = 0
  524. )
  525. {
  526. ASSERT( IsEmpty() );
  527. ASSERT( eDockMarkerType != __EDMT_EMPTY );
  528. ASSERT(
  529. pDataBmpIn != NULL && dwSizeDataBmpIn > 0
  530. );
  531. ASSERT(
  532. ( pDataBmpOut != NULL && dwSizeDataBmpOut > 0 )
  533. || pDataBmpOut == NULL && dwSizeDataBmpOut == 0
  534. );
  535. if( pDataBmpOut == NULL )
  536. {
  537. pDataBmpOut = pDataBmpIn;
  538. dwSizeDataBmpOut = dwSizeDataBmpIn;
  539. } // if( pDataBmpOut == NULL )
  540. CExtBitmap _bmpIn;
  541. if( ! _bmpIn.LoadBMP_Buffer(
  542. pDataBmpIn,
  543. dwSizeDataBmpIn
  544. )
  545. )
  546. {
  547. ASSERT( FALSE );
  548. return false;
  549. }
  550. CExtBitmap _bmpOut;
  551. if( ! _bmpOut.LoadBMP_Buffer(
  552. pDataBmpOut,
  553. dwSizeDataBmpOut
  554. )
  555. )
  556. {
  557. ASSERT( FALSE );
  558. return false;
  559. }
  560. return
  561. CreateFromBitmaps(
  562. rcScreen,
  563. eDockMarkerType,
  564. clrTransparentIn,
  565. _bmpIn,
  566. _bmpOut
  567. );
  568. }
  569. bool CExtPaintManager::DockMarkerBase::CreateFromBitmaps(
  570. CRect rcScreen,
  571. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  572. COLORREF clrTransparentIn,
  573. const CExtBitmap & _bmpIn,
  574. const CExtBitmap & _bmpOut
  575. )
  576. {
  577. ASSERT( IsEmpty() );
  578. ASSERT( eDockMarkerType != __EDMT_EMPTY );
  579. ASSERT( ! _bmpIn.IsEmpty() );
  580. ASSERT( ! _bmpOut.IsEmpty() );
  581. CSize _sizeBmpInfoIn = _bmpIn.GetSize(), _sizeBmpInfoOut = _bmpOut.GetSize();
  582. ASSERT( _sizeBmpInfoIn.cx > 0 && _sizeBmpInfoIn.cy > 0 );
  583. ASSERT( _sizeBmpInfoOut.cx > 0 && _sizeBmpInfoOut.cy > 0 );
  584. if( _sizeBmpInfoIn.cx != _sizeBmpInfoOut.cx
  585. || _sizeBmpInfoIn.cy != _sizeBmpInfoOut.cy
  586. )
  587. {
  588. ASSERT( FALSE );
  589. return false;
  590. }
  591. // HRGN hRgn =
  592. //  CExtPaintManager::stat_HBITMAPtoHRGN(
  593. //  hBmpIn,
  594. //  clrTransparentIn
  595. //  );
  596. HRGN hRgn =
  597. _bmpIn.GenerateColorHRGN( false, clrTransparentIn );
  598. if( hRgn == NULL )
  599. {
  600. ASSERT( FALSE );
  601. return false;
  602. } // if( hRgn == NULL )
  603. m_size.cx = _sizeBmpInfoIn.cx;
  604. m_size.cy = _sizeBmpInfoIn.cy;
  605. m_bmpIn = _bmpIn;
  606. m_bmpOut = _bmpOut;
  607. m_rgn.Attach( hRgn );
  608. m_eDockMarkerType = eDockMarkerType;
  609. OnCalcScreenRect(
  610. eDockMarkerType,
  611. rcScreen
  612. );
  613. g_PaintManager->DockMarker_AdjustBmps(
  614. eDockMarkerType,
  615. m_bmpIn,
  616. clrTransparentIn,
  617. m_bmpOut,
  618. clrTransparentIn
  619. );
  620. return true;
  621. }
  622. void CExtPaintManager::DockMarkerBase::OnCalcScreenRect(
  623. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  624. CRect rcScreen,
  625. DockMarkerBase * pCenterMarker // = NULL
  626. )
  627. {
  628. pCenterMarker;
  629. m_rcScreen = rcScreen;
  630. switch( eDockMarkerType )
  631. {
  632. case __EDMT_2005_TOP:
  633. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  634. m_rcScreen.OffsetRect(
  635. ( m_rcScreen.Width() - m_size.cx ) / 2,
  636. 0
  637. );
  638. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  639. break;
  640. case __EDMT_2005_BOTTOM:
  641. m_rcScreen.top = m_rcScreen.bottom - m_size.cy;
  642. m_rcScreen.OffsetRect(
  643. ( m_rcScreen.Width() - m_size.cx ) / 2,
  644. 0
  645. );
  646. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  647. break;
  648. case __EDMT_2005_LEFT:
  649. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  650. m_rcScreen.OffsetRect(
  651. 0,
  652. ( m_rcScreen.Height() - m_size.cy ) / 2
  653. );
  654. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  655. break;
  656. case __EDMT_2005_RIGHT:
  657. m_rcScreen.left = m_rcScreen.right - m_size.cx;
  658. m_rcScreen.OffsetRect(
  659. 0,
  660. ( m_rcScreen.Height() - m_size.cy ) / 2
  661. );
  662. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  663. break;
  664. case __EDMT_2005_CENTER:
  665. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  666. case __EDMT_2005_TAB:
  667. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  668. m_rcScreen.OffsetRect(
  669. ( m_rcScreen.Width() - m_size.cx ) / 2,
  670. ( m_rcScreen.Height() - m_size.cy ) / 2
  671. );
  672. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  673. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  674. break;
  675. #ifdef _DEBUG
  676. default:
  677. ASSERT( FALSE );
  678. break;
  679. #endif // _DEBUG
  680. } // switch( eDockMarkerType )
  681. }
  682. void CExtPaintManager::DockMarkerBeta2::OnCalcScreenRect(
  683. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  684. CRect rcScreen,
  685. DockMarkerBase * pCenterMarker // = NULL
  686. )
  687. {
  688. DockMarkerBase::OnCalcScreenRect(
  689. eDockMarkerType,
  690. rcScreen,
  691. pCenterMarker
  692. );
  693. if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  694. {
  695. CRect rcOuterMargins = g_PaintManager->DockMarker_GetOuterDistance();
  696. switch( eDockMarkerType )
  697. {
  698. case __EDMT_2005_LEFT:
  699. {
  700. CExtBitmap _bitmap;
  701. _bitmap.LoadBMP_Resource(
  702. MAKEINTRESOURCE(
  703. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_OUTER_BK_LEFT
  704. )
  705. );
  706. if( ! _bitmap.IsEmpty() )
  707. {
  708. m_size = _bitmap.GetSize();
  709. m_ptOffsetInner.x = 4;
  710. m_ptOffsetInner.y = ( m_size.cy - m_rcScreen.Height() ) / 2;
  711. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  712. m_rcScreen.top -= m_ptOffsetInner.y;
  713. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  714. m_ptOffsetInner.y ++;
  715. m_rcScreen.OffsetRect( rcOuterMargins.left, 0 );
  716. m_bmpOuterBk = _bitmap;
  717. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(0,255,0) );
  718. if( hRgn != NULL )
  719. {
  720. if( m_rgn.GetSafeHandle() != NULL )
  721. m_rgn.DeleteObject();
  722. m_rgn.Attach( hRgn );
  723. } // if( hRgn != NULL )
  724. } // if( ! _bitmap.IsEmpty() )
  725. #ifdef _DEBUG
  726. else
  727. {
  728. ASSERT( FALSE );
  729. } // else from if( ! _bitmap.IsEmpty() )
  730. #endif // _DEBUG
  731. }
  732. break;
  733. case __EDMT_2005_RIGHT:
  734. {
  735. CExtBitmap _bitmap;
  736. _bitmap.LoadBMP_Resource(
  737. MAKEINTRESOURCE(
  738. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_OUTER_BK_RIGHT
  739. )
  740. );
  741. if( ! _bitmap.IsEmpty() )
  742. {
  743. m_size = _bitmap.GetSize();
  744. m_ptOffsetInner.x = 3;
  745. m_ptOffsetInner.y = ( m_size.cy - m_rcScreen.Height() ) / 2;
  746. m_rcScreen.left = m_rcScreen.right - m_size.cx;
  747. m_rcScreen.top -= m_ptOffsetInner.y;
  748. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  749. m_ptOffsetInner.y ++;
  750. m_rcScreen.OffsetRect( - rcOuterMargins.right, 0 );
  751. m_bmpOuterBk = _bitmap;
  752. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(0,255,0) );
  753. if( hRgn != NULL )
  754. {
  755. if( m_rgn.GetSafeHandle() != NULL )
  756. m_rgn.DeleteObject();
  757. m_rgn.Attach( hRgn );
  758. } // if( hRgn != NULL )
  759. } // if( ! _bitmap.IsEmpty() )
  760. #ifdef _DEBUG
  761. else
  762. {
  763. ASSERT( FALSE );
  764. } // else from if( ! _bitmap.IsEmpty() )
  765. #endif // _DEBUG
  766. }
  767. break;
  768. case __EDMT_2005_TOP:
  769. {
  770. CExtBitmap _bitmap;
  771. _bitmap.LoadBMP_Resource(
  772. MAKEINTRESOURCE(
  773. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_OUTER_BK_TOP
  774. )
  775. );
  776. if( ! _bitmap.IsEmpty() )
  777. {
  778. m_size = _bitmap.GetSize();
  779. m_ptOffsetInner.y = 4;
  780. m_ptOffsetInner.x = ( m_size.cx - m_rcScreen.Width() ) / 2;
  781. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  782. m_rcScreen.left -= m_ptOffsetInner.x;
  783. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  784. m_ptOffsetInner.x ++;
  785. m_rcScreen.OffsetRect( 0, rcOuterMargins.top );
  786. m_bmpOuterBk = _bitmap;
  787. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(0,255,0) );
  788. if( hRgn != NULL )
  789. {
  790. if( m_rgn.GetSafeHandle() != NULL )
  791. m_rgn.DeleteObject();
  792. m_rgn.Attach( hRgn );
  793. } // if( hRgn != NULL )
  794. } // if( ! _bitmap.IsEmpty() )
  795. #ifdef _DEBUG
  796. else
  797. {
  798. ASSERT( FALSE );
  799. } // else from if( ! _bitmap.IsEmpty() )
  800. #endif // _DEBUG
  801. }
  802. break;
  803. case __EDMT_2005_BOTTOM:
  804. {
  805. CExtBitmap _bitmap;
  806. _bitmap.LoadBMP_Resource(
  807. MAKEINTRESOURCE(
  808. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_OUTER_BK_BOTTOM
  809. )
  810. );
  811. if( ! _bitmap.IsEmpty() )
  812. {
  813. m_size = _bitmap.GetSize();
  814. m_ptOffsetInner.y = 3;
  815. m_ptOffsetInner.x = ( m_size.cx - m_rcScreen.Width() ) / 2;
  816. m_rcScreen.top = m_rcScreen.bottom - m_size.cy;
  817. m_rcScreen.left -= m_ptOffsetInner.x;
  818. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  819. m_ptOffsetInner.x ++;
  820. m_rcScreen.OffsetRect( 0, - rcOuterMargins.bottom );
  821. m_bmpOuterBk = _bitmap;
  822. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(0,255,0) );
  823. if( hRgn != NULL )
  824. {
  825. if( m_rgn.GetSafeHandle() != NULL )
  826. m_rgn.DeleteObject();
  827. m_rgn.Attach( hRgn );
  828. } // if( hRgn != NULL )
  829. } // if( ! _bitmap.IsEmpty() )
  830. #ifdef _DEBUG
  831. else
  832. {
  833. ASSERT( FALSE );
  834. } // else from if( ! _bitmap.IsEmpty() )
  835. #endif // _DEBUG
  836. }
  837. break;
  838. } // switch( pDM->m_eDockMarkerType )
  839. } // if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  840. if( pCenterMarker != NULL )
  841. {
  842. switch( eDockMarkerType )
  843. {
  844. case __EDMT_2005_LEFT:
  845. m_rcScreen.OffsetRect( 10, 1 );
  846. break;
  847. case __EDMT_2005_RIGHT:
  848. m_rcScreen.OffsetRect( -8, 1 );
  849. break;
  850. case __EDMT_2005_TOP:
  851. m_rcScreen.OffsetRect( 1, 10 );
  852. break;
  853. case __EDMT_2005_BOTTOM:
  854. m_rcScreen.OffsetRect( 1, -8 );
  855. break;
  856. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  857. case __EDMT_2005_TAB:
  858. m_rcScreen.OffsetRect( 1, 1 );
  859. break;
  860. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  861. } // switch( pDM->m_eDockMarkerType )
  862. } // if( pCenterMarker != NULL )
  863. else
  864. {
  865. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  866. switch( eDockMarkerType )
  867. {
  868. case __EDMT_2005_TAB:
  869. m_rcScreen.OffsetRect( 1, 1 );
  870. break;
  871. } // switch( pDM->m_eDockMarkerType )
  872. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  873. } // else from if( pCenterMarker != NULL )
  874. }
  875. void CExtPaintManager::DockMarker2008XP::OnCalcScreenRect(
  876. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  877. CRect rcScreen,
  878. DockMarkerBase * pCenterMarker // = NULL
  879. )
  880. {
  881. DockMarkerBase::OnCalcScreenRect(
  882. eDockMarkerType,
  883. rcScreen,
  884. pCenterMarker
  885. );
  886. if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  887. {
  888. CRect rcOuterMargins = g_PaintManager->DockMarker_GetOuterDistance();
  889. switch( eDockMarkerType )
  890. {
  891. case __EDMT_2005_LEFT:
  892. {
  893. CExtBitmap _bitmap;
  894. _bitmap.LoadBMP_Resource(
  895. ( m_bSparsedMode )
  896. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_LEFT ) )
  897. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_LEFT ) )
  898. );
  899. if( ! _bitmap.IsEmpty() )
  900. {
  901. m_size = _bitmap.GetSize();
  902. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  903. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  904. m_rcScreen.OffsetRect( rcOuterMargins.left, 0 );
  905. m_bmpOuterBk = _bitmap;
  906. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  907. if( hRgn != NULL )
  908. {
  909. if( m_rgn.GetSafeHandle() != NULL )
  910. m_rgn.DeleteObject();
  911. m_rgn.Attach( hRgn );
  912. } // if( hRgn != NULL )
  913. } // if( ! _bitmap.IsEmpty() )
  914. #ifdef _DEBUG
  915. else
  916. {
  917. ASSERT( FALSE );
  918. } // else from if( ! _bitmap.IsEmpty() )
  919. #endif // _DEBUG
  920. }
  921. break;
  922. case __EDMT_2005_RIGHT:
  923. {
  924. CExtBitmap _bitmap;
  925. _bitmap.LoadBMP_Resource(
  926. ( m_bSparsedMode )
  927. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_RIGHT ) )
  928. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_RIGHT ) )
  929. );
  930. if( ! _bitmap.IsEmpty() )
  931. {
  932. m_size = _bitmap.GetSize();
  933. m_rcScreen.left = m_rcScreen.right - m_size.cx;
  934. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  935. m_rcScreen.OffsetRect( - rcOuterMargins.right, 0 );
  936. m_bmpOuterBk = _bitmap;
  937. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  938. if( hRgn != NULL )
  939. {
  940. if( m_rgn.GetSafeHandle() != NULL )
  941. m_rgn.DeleteObject();
  942. m_rgn.Attach( hRgn );
  943. } // if( hRgn != NULL )
  944. } // if( ! _bitmap.IsEmpty() )
  945. #ifdef _DEBUG
  946. else
  947. {
  948. ASSERT( FALSE );
  949. } // else from if( ! _bitmap.IsEmpty() )
  950. #endif // _DEBUG
  951. }
  952. break;
  953. case __EDMT_2005_TOP:
  954. {
  955. CExtBitmap _bitmap;
  956. _bitmap.LoadBMP_Resource(
  957. ( m_bSparsedMode )
  958. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_TOP ) )
  959. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_TOP ) )
  960. );
  961. if( ! _bitmap.IsEmpty() )
  962. {
  963. m_size = _bitmap.GetSize();
  964. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  965. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  966. m_rcScreen.OffsetRect( 0, rcOuterMargins.top );
  967. m_bmpOuterBk = _bitmap;
  968. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  969. if( hRgn != NULL )
  970. {
  971. if( m_rgn.GetSafeHandle() != NULL )
  972. m_rgn.DeleteObject();
  973. m_rgn.Attach( hRgn );
  974. } // if( hRgn != NULL )
  975. } // if( ! _bitmap.IsEmpty() )
  976. #ifdef _DEBUG
  977. else
  978. {
  979. ASSERT( FALSE );
  980. } // else from if( ! _bitmap.IsEmpty() )
  981. #endif // _DEBUG
  982. }
  983. break;
  984. case __EDMT_2005_BOTTOM:
  985. {
  986. CExtBitmap _bitmap;
  987. _bitmap.LoadBMP_Resource(
  988. ( m_bSparsedMode )
  989. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_BOTTOM ) )
  990. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_BOTTOM ) )
  991. );
  992. if( ! _bitmap.IsEmpty() )
  993. {
  994. m_size = _bitmap.GetSize();
  995. m_rcScreen.top = m_rcScreen.bottom - m_size.cy;
  996. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  997. m_rcScreen.OffsetRect( 0, - rcOuterMargins.bottom );
  998. m_bmpOuterBk = _bitmap;
  999. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  1000. if( hRgn != NULL )
  1001. {
  1002. if( m_rgn.GetSafeHandle() != NULL )
  1003. m_rgn.DeleteObject();
  1004. m_rgn.Attach( hRgn );
  1005. } // if( hRgn != NULL )
  1006. } // if( ! _bitmap.IsEmpty() )
  1007. #ifdef _DEBUG
  1008. else
  1009. {
  1010. ASSERT( FALSE );
  1011. } // else from if( ! _bitmap.IsEmpty() )
  1012. #endif // _DEBUG
  1013. }
  1014. break;
  1015. } // switch( pDM->m_eDockMarkerType )
  1016. } // if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  1017. if( pCenterMarker != NULL )
  1018. {
  1019. switch( eDockMarkerType )
  1020. {
  1021. case __EDMT_2005_LEFT:
  1022. m_rcScreen.OffsetRect( -18, 0 );
  1023. break;
  1024. case __EDMT_2005_RIGHT:
  1025. m_rcScreen.OffsetRect( 18, 0 );
  1026. break;
  1027. case __EDMT_2005_TOP:
  1028. m_rcScreen.OffsetRect( 0, -18 );
  1029. break;
  1030. case __EDMT_2005_BOTTOM:
  1031. m_rcScreen.OffsetRect( 0, 18 );
  1032. break;
  1033. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1034. case __EDMT_2005_TAB:
  1035. break;
  1036. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1037. } // switch( pDM->m_eDockMarkerType )
  1038. } // if( pCenterMarker != NULL )
  1039. else
  1040. {
  1041. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1042. switch( eDockMarkerType )
  1043. {
  1044. case __EDMT_2005_TAB:
  1045. break;
  1046. } // switch( pDM->m_eDockMarkerType )
  1047. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1048. } // else from if( pCenterMarker != NULL )
  1049. }
  1050. void CExtPaintManager::DockMarker2008Vista::OnCalcScreenRect(
  1051. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  1052. CRect rcScreen,
  1053. DockMarkerBase * pCenterMarker // = NULL
  1054. )
  1055. {
  1056. DockMarkerBase::OnCalcScreenRect(
  1057. eDockMarkerType,
  1058. rcScreen,
  1059. pCenterMarker
  1060. );
  1061. if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  1062. {
  1063. CRect rcOuterMargins = g_PaintManager->DockMarker_GetOuterDistance();
  1064. switch( eDockMarkerType )
  1065. {
  1066. case __EDMT_2005_LEFT:
  1067. {
  1068. CExtBitmap _bitmap;
  1069. _bitmap.LoadBMP_Resource(
  1070. ( m_bSparsedMode )
  1071. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_LEFT ) )
  1072. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_LEFT ) )
  1073. );
  1074. if( ! _bitmap.IsEmpty() )
  1075. {
  1076. m_size = _bitmap.GetSize();
  1077. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  1078. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  1079. m_rcScreen.OffsetRect( rcOuterMargins.left, 0 );
  1080. m_bmpOuterBk = _bitmap;
  1081. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  1082. if( hRgn != NULL )
  1083. {
  1084. if( m_rgn.GetSafeHandle() != NULL )
  1085. m_rgn.DeleteObject();
  1086. m_rgn.Attach( hRgn );
  1087. } // if( hRgn != NULL )
  1088. } // if( ! _bitmap.IsEmpty() )
  1089. #ifdef _DEBUG
  1090. else
  1091. {
  1092. ASSERT( FALSE );
  1093. } // else from if( ! _bitmap.IsEmpty() )
  1094. #endif // _DEBUG
  1095. }
  1096. break;
  1097. case __EDMT_2005_RIGHT:
  1098. {
  1099. CExtBitmap _bitmap;
  1100. _bitmap.LoadBMP_Resource(
  1101. ( m_bSparsedMode )
  1102. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_RIGHT ) )
  1103. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_RIGHT ) )
  1104. );
  1105. if( ! _bitmap.IsEmpty() )
  1106. {
  1107. m_size = _bitmap.GetSize();
  1108. m_rcScreen.left = m_rcScreen.right - m_size.cx;
  1109. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  1110. m_rcScreen.OffsetRect( - rcOuterMargins.right, 0 );
  1111. m_bmpOuterBk = _bitmap;
  1112. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  1113. if( hRgn != NULL )
  1114. {
  1115. if( m_rgn.GetSafeHandle() != NULL )
  1116. m_rgn.DeleteObject();
  1117. m_rgn.Attach( hRgn );
  1118. } // if( hRgn != NULL )
  1119. } // if( ! _bitmap.IsEmpty() )
  1120. #ifdef _DEBUG
  1121. else
  1122. {
  1123. ASSERT( FALSE );
  1124. } // else from if( ! _bitmap.IsEmpty() )
  1125. #endif // _DEBUG
  1126. }
  1127. break;
  1128. case __EDMT_2005_TOP:
  1129. {
  1130. CExtBitmap _bitmap;
  1131. _bitmap.LoadBMP_Resource(
  1132. ( m_bSparsedMode )
  1133. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_TOP ) )
  1134. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_TOP ) )
  1135. );
  1136. if( ! _bitmap.IsEmpty() )
  1137. {
  1138. m_size = _bitmap.GetSize();
  1139. m_rcScreen.bottom = m_rcScreen.top + m_size.cy;
  1140. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  1141. m_rcScreen.OffsetRect( 0, rcOuterMargins.top );
  1142. m_bmpOuterBk = _bitmap;
  1143. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  1144. if( hRgn != NULL )
  1145. {
  1146. if( m_rgn.GetSafeHandle() != NULL )
  1147. m_rgn.DeleteObject();
  1148. m_rgn.Attach( hRgn );
  1149. } // if( hRgn != NULL )
  1150. } // if( ! _bitmap.IsEmpty() )
  1151. #ifdef _DEBUG
  1152. else
  1153. {
  1154. ASSERT( FALSE );
  1155. } // else from if( ! _bitmap.IsEmpty() )
  1156. #endif // _DEBUG
  1157. }
  1158. break;
  1159. case __EDMT_2005_BOTTOM:
  1160. {
  1161. CExtBitmap _bitmap;
  1162. _bitmap.LoadBMP_Resource(
  1163. ( m_bSparsedMode )
  1164. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_BOTTOM ) )
  1165. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_BOTTOM ) )
  1166. );
  1167. if( ! _bitmap.IsEmpty() )
  1168. {
  1169. m_size = _bitmap.GetSize();
  1170. m_rcScreen.top = m_rcScreen.bottom - m_size.cy;
  1171. m_rcScreen.right = m_rcScreen.left + m_size.cx;
  1172. m_rcScreen.OffsetRect( 0, - rcOuterMargins.bottom );
  1173. m_bmpOuterBk = _bitmap;
  1174. HRGN hRgn = _bitmap.GenerateColorHRGN( false, RGB(255,0,255) );
  1175. if( hRgn != NULL )
  1176. {
  1177. if( m_rgn.GetSafeHandle() != NULL )
  1178. m_rgn.DeleteObject();
  1179. m_rgn.Attach( hRgn );
  1180. } // if( hRgn != NULL )
  1181. } // if( ! _bitmap.IsEmpty() )
  1182. #ifdef _DEBUG
  1183. else
  1184. {
  1185. ASSERT( FALSE );
  1186. } // else from if( ! _bitmap.IsEmpty() )
  1187. #endif // _DEBUG
  1188. }
  1189. break;
  1190. } // switch( pDM->m_eDockMarkerType )
  1191. } // if( m_bSparsedMode && m_bmpOuterBk.IsEmpty() )
  1192. if( pCenterMarker != NULL )
  1193. {
  1194. switch( eDockMarkerType )
  1195. {
  1196. case __EDMT_2005_LEFT:
  1197. m_rcScreen.OffsetRect( -9, 0 );
  1198. break;
  1199. case __EDMT_2005_RIGHT:
  1200. m_rcScreen.OffsetRect( 9, 0 );
  1201. break;
  1202. case __EDMT_2005_TOP:
  1203. m_rcScreen.OffsetRect( 0, -9 );
  1204. break;
  1205. case __EDMT_2005_BOTTOM:
  1206. m_rcScreen.OffsetRect( 0, 9 );
  1207. break;
  1208. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1209. case __EDMT_2005_TAB:
  1210. break;
  1211. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1212. } // switch( pDM->m_eDockMarkerType )
  1213. } // if( pCenterMarker != NULL )
  1214. else
  1215. {
  1216. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1217. switch( eDockMarkerType )
  1218. {
  1219. case __EDMT_2005_TAB:
  1220. break;
  1221. } // switch( pDM->m_eDockMarkerType )
  1222. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1223. } // else from if( pCenterMarker != NULL )
  1224. }
  1225. void CExtPaintManager::DockMarkerBase::_EmptyChildren()
  1226. {
  1227. int nCount = (int)m_arrChildren.GetSize();
  1228. for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1229. {
  1230. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  1231. ASSERT( pDM != NULL );
  1232. delete pDM;
  1233. } // for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1234. m_arrChildren.RemoveAll();
  1235. }
  1236. void CExtPaintManager::DockMarkerBase::Empty()
  1237. {
  1238. m_bmpIn.Empty();
  1239. m_bmpOut.Empty();
  1240. if( m_rgn.GetSafeHandle() != NULL )
  1241. m_rgn.DeleteObject();
  1242. m_eDockMarkerType = __EDMT_EMPTY;
  1243. m_size.cx = m_size.cy = 0;
  1244. m_rcScreen.SetRect( 0, 0, 0, 0 );
  1245. _EmptyChildren();
  1246. }
  1247. void CExtPaintManager::DockMarkerBase::_DetachHandles()
  1248. {
  1249. m_bmpIn.Empty();
  1250. m_bmpOut.Empty();
  1251. if( m_rgn.GetSafeHandle() != NULL )
  1252. m_rgn.Detach();
  1253. }
  1254. bool CExtPaintManager::DockMarkerBase::Create(
  1255. bool bCentralMode,
  1256. CExtPaintManager::eDockMarkerType_t eDockMarkerType, // = CExtPaintManager::DockMarkerBase::__EDMT_EMPTY
  1257. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  1258. )
  1259. {
  1260. Empty();
  1261. if( eDockMarkerType == __EDMT_EMPTY )
  1262. return true;
  1263. switch( eDockMarkerType )
  1264. {
  1265. case __EDMT_2005_TOP:
  1266. return
  1267. CreateFromBitmapResources(
  1268. rcScreen,
  1269. eDockMarkerType,
  1270. RGB(0,255,0),
  1271. __EXT_MFC_SAFE_LPCTSTR(
  1272. MAKEINTRESOURCE(
  1273. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_TOP
  1274. )
  1275. )
  1276. );
  1277. case __EDMT_2005_BOTTOM:
  1278. return
  1279. CreateFromBitmapResources(
  1280. rcScreen,
  1281. eDockMarkerType,
  1282. RGB(0,255,0),
  1283. __EXT_MFC_SAFE_LPCTSTR(
  1284. MAKEINTRESOURCE(
  1285. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_BOTTOM
  1286. )
  1287. )
  1288. );
  1289. case __EDMT_2005_LEFT:
  1290. return
  1291. CreateFromBitmapResources(
  1292. rcScreen,
  1293. eDockMarkerType,
  1294. RGB(0,255,0),
  1295. __EXT_MFC_SAFE_LPCTSTR(
  1296. MAKEINTRESOURCE(
  1297. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_LEFT
  1298. )
  1299. )
  1300. );
  1301. case __EDMT_2005_RIGHT:
  1302. return
  1303. CreateFromBitmapResources(
  1304. rcScreen,
  1305. eDockMarkerType,
  1306. RGB(0,255,0),
  1307. __EXT_MFC_SAFE_LPCTSTR(
  1308. MAKEINTRESOURCE(
  1309. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_RIGHT
  1310. )
  1311. )
  1312. );
  1313. case __EDMT_2005_CENTER:
  1314. return
  1315. CreateFromBitmapResources(
  1316. rcScreen,
  1317. eDockMarkerType,
  1318. RGB(0,255,0),
  1319. __EXT_MFC_SAFE_LPCTSTR(
  1320. MAKEINTRESOURCE(
  1321. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_CENTER
  1322. )
  1323. )
  1324. );
  1325. case __EDMT_2005_GROUP_SPARSED:
  1326. {
  1327. DockMarkerBase * pDmTop = NULL, * pDmBottom = NULL,
  1328. * pDmLeft = NULL, * pDmRight = NULL;
  1329. try
  1330. {
  1331. pDmTop = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1332. pDmBottom = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1333. pDmLeft = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1334. pDmRight = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1335. if( ! bCentralMode )
  1336. {
  1337. pDmTop->m_bSparsedMode = true;
  1338. pDmBottom->m_bSparsedMode = true;
  1339. pDmLeft->m_bSparsedMode = true;
  1340. pDmRight->m_bSparsedMode = true;
  1341. } // if( ! bCentralMode )
  1342. if( pDmTop->Create( bCentralMode, __EDMT_2005_TOP, rcScreen )
  1343. && pDmBottom->Create( bCentralMode, __EDMT_2005_BOTTOM, rcScreen )
  1344. && pDmLeft->Create( bCentralMode, __EDMT_2005_LEFT, rcScreen )
  1345. && pDmRight->Create( bCentralMode, __EDMT_2005_RIGHT, rcScreen )
  1346. )
  1347. {
  1348. m_eDockMarkerType = eDockMarkerType;
  1349. m_arrChildren.Add( pDmTop );
  1350. m_arrChildren.Add( pDmBottom );
  1351. m_arrChildren.Add( pDmLeft );
  1352. m_arrChildren.Add( pDmRight );
  1353. return true;
  1354. }
  1355. ASSERT( FALSE );
  1356. } // try
  1357. catch( ... )
  1358. {
  1359. ASSERT( FALSE );
  1360. } // catch( .... )
  1361. if( pDmTop != NULL )
  1362. delete pDmTop;
  1363. if( pDmBottom != NULL )
  1364. delete pDmBottom;
  1365. if( pDmLeft != NULL )
  1366. delete pDmLeft;
  1367. if( pDmRight != NULL )
  1368. delete pDmRight;
  1369. }
  1370. return false;
  1371. case __EDMT_2005_GROUP_CENTRAL:
  1372. {
  1373. if( ! Create(
  1374. true,
  1375. __EDMT_2005_GROUP_SPARSED,
  1376. rcScreen
  1377. )
  1378. )
  1379. {
  1380. ASSERT( FALSE );
  1381. return false;
  1382. }
  1383. DockMarkerBase * pDmCenter = NULL;
  1384. try
  1385. {
  1386. pDmCenter = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1387. if( pDmCenter->Create(
  1388. true,
  1389. __EDMT_2005_CENTER,
  1390. rcScreen
  1391. )
  1392. )
  1393. {
  1394. CRect _rcScreen( rcScreen );
  1395. CSize _size( pDmCenter->m_size );
  1396. _size.cx += 12;
  1397. _size.cy += 12;
  1398. _rcScreen.OffsetRect(
  1399. ( _rcScreen.Width() - _size.cx ) / 2,
  1400. ( _rcScreen.Height() - _size.cy ) / 2
  1401. );
  1402. _rcScreen.right = _rcScreen.left + _size.cx;
  1403. _rcScreen.bottom = _rcScreen.top + _size.cy;
  1404. int nCount = (int)m_arrChildren.GetSize();
  1405. for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1406. {
  1407. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  1408. ASSERT( pDM != NULL );
  1409. pDM->m_bSparsedMode = false;
  1410. pDM->OnCalcScreenRect(
  1411. pDM->m_eDockMarkerType,
  1412. _rcScreen,
  1413. pDmCenter
  1414. );
  1415. } // for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1416. m_eDockMarkerType = eDockMarkerType;
  1417. m_arrChildren.InsertAt( 0, pDmCenter );
  1418. return true;
  1419. }
  1420. ASSERT( FALSE );
  1421. } // try
  1422. catch( ... )
  1423. {
  1424. ASSERT( FALSE );
  1425. } // catch( .... )
  1426. if( pDmCenter != NULL )
  1427. delete pDmCenter;
  1428. Empty();
  1429. }
  1430. return false;
  1431. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1432. case __EDMT_2005_GROUP_TAB:
  1433. {
  1434. if( ! Create(
  1435. true,
  1436. __EDMT_2005_GROUP_CENTRAL,
  1437. rcScreen
  1438. )
  1439. )
  1440. {
  1441. ASSERT( FALSE );
  1442. return false;
  1443. }
  1444. DockMarkerBase * pDmTab = NULL;
  1445. try
  1446. {
  1447. pDmTab = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1448. if( pDmTab->Create(
  1449. true,
  1450. __EDMT_2005_TAB,
  1451. rcScreen
  1452. )
  1453. )
  1454. {
  1455. m_eDockMarkerType = eDockMarkerType;
  1456. // m_arrChildren.Add( pDmTab );
  1457. ASSERT( m_arrChildren.GetSize() >= 1 );
  1458. m_arrChildren.InsertAt( 1, pDmTab );
  1459. return true;
  1460. }
  1461. ASSERT( FALSE );
  1462. } // try
  1463. catch( ... )
  1464. {
  1465. ASSERT( FALSE );
  1466. } // catch( .... )
  1467. if( pDmTab != NULL )
  1468. delete pDmTab;
  1469. Empty();
  1470. }
  1471. return false;
  1472. case __EDMT_2005_TAB:
  1473. return
  1474. CreateFromBitmapResources(
  1475. rcScreen,
  1476. eDockMarkerType,
  1477. RGB(0,255,0),
  1478. __EXT_MFC_SAFE_LPCTSTR(
  1479. MAKEINTRESOURCE(
  1480. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B1_TAB
  1481. )
  1482. )
  1483. );
  1484. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1485. } // switch( eDockMarkerType )
  1486. ASSERT( FALSE );
  1487. return false;
  1488. }
  1489. bool CExtPaintManager::DockMarkerBeta2::Create(
  1490. bool bCentralMode,
  1491. CExtPaintManager::eDockMarkerType_t eDockMarkerType, // = CExtPaintManager::DockMarkerBase::__EDMT_EMPTY
  1492. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  1493. )
  1494. {
  1495. Empty();
  1496. if( eDockMarkerType == __EDMT_EMPTY )
  1497. return true;
  1498. switch( eDockMarkerType )
  1499. {
  1500. case __EDMT_2005_TOP:
  1501. return
  1502. CreateFromBitmapResources(
  1503. rcScreen,
  1504. eDockMarkerType,
  1505. RGB(0,255,0),
  1506. __EXT_MFC_SAFE_LPCTSTR(
  1507. MAKEINTRESOURCE(
  1508. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_TOP
  1509. )
  1510. )
  1511. );
  1512. case __EDMT_2005_BOTTOM:
  1513. return
  1514. CreateFromBitmapResources(
  1515. rcScreen,
  1516. eDockMarkerType,
  1517. RGB(0,255,0),
  1518. __EXT_MFC_SAFE_LPCTSTR(
  1519. MAKEINTRESOURCE(
  1520. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_BOTTOM
  1521. )
  1522. )
  1523. );
  1524. case __EDMT_2005_LEFT:
  1525. return
  1526. CreateFromBitmapResources(
  1527. rcScreen,
  1528. eDockMarkerType,
  1529. RGB(0,255,0),
  1530. __EXT_MFC_SAFE_LPCTSTR(
  1531. MAKEINTRESOURCE(
  1532. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_LEFT
  1533. )
  1534. )
  1535. );
  1536. case __EDMT_2005_RIGHT:
  1537. return
  1538. CreateFromBitmapResources(
  1539. rcScreen,
  1540. eDockMarkerType,
  1541. RGB(0,255,0),
  1542. __EXT_MFC_SAFE_LPCTSTR(
  1543. MAKEINTRESOURCE(
  1544. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_RIGHT
  1545. )
  1546. )
  1547. );
  1548. case __EDMT_2005_CENTER:
  1549. return
  1550. CreateFromBitmapResources(
  1551. rcScreen,
  1552. eDockMarkerType,
  1553. RGB(0,255,0),
  1554. __EXT_MFC_SAFE_LPCTSTR(
  1555. MAKEINTRESOURCE(
  1556. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_CENTER
  1557. )
  1558. )
  1559. );
  1560. case __EDMT_2005_GROUP_SPARSED:
  1561. {
  1562. DockMarkerBase * pDmTop = NULL, * pDmBottom = NULL,
  1563. * pDmLeft = NULL, * pDmRight = NULL;
  1564. try
  1565. {
  1566. pDmTop = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1567. pDmBottom = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1568. pDmLeft = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1569. pDmRight = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1570. if( ! bCentralMode )
  1571. {
  1572. pDmTop->m_bSparsedMode = true;
  1573. pDmBottom->m_bSparsedMode = true;
  1574. pDmLeft->m_bSparsedMode = true;
  1575. pDmRight->m_bSparsedMode = true;
  1576. } // if( ! bCentralMode )
  1577. if( pDmTop->Create( bCentralMode, __EDMT_2005_TOP, rcScreen )
  1578. && pDmBottom->Create( bCentralMode, __EDMT_2005_BOTTOM, rcScreen )
  1579. && pDmLeft->Create( bCentralMode, __EDMT_2005_LEFT, rcScreen )
  1580. && pDmRight->Create( bCentralMode, __EDMT_2005_RIGHT, rcScreen )
  1581. )
  1582. {
  1583. m_eDockMarkerType = eDockMarkerType;
  1584. m_arrChildren.Add( pDmTop );
  1585. m_arrChildren.Add( pDmBottom );
  1586. m_arrChildren.Add( pDmLeft );
  1587. m_arrChildren.Add( pDmRight );
  1588. return true;
  1589. }
  1590. ASSERT( FALSE );
  1591. } // try
  1592. catch( ... )
  1593. {
  1594. ASSERT( FALSE );
  1595. } // catch( .... )
  1596. if( pDmTop != NULL )
  1597. delete pDmTop;
  1598. if( pDmBottom != NULL )
  1599. delete pDmBottom;
  1600. if( pDmLeft != NULL )
  1601. delete pDmLeft;
  1602. if( pDmRight != NULL )
  1603. delete pDmRight;
  1604. }
  1605. return false;
  1606. case __EDMT_2005_GROUP_CENTRAL:
  1607. {
  1608. if( ! Create(
  1609. true,
  1610. __EDMT_2005_GROUP_SPARSED,
  1611. rcScreen
  1612. )
  1613. )
  1614. {
  1615. ASSERT( FALSE );
  1616. return false;
  1617. }
  1618. DockMarkerBase * pDmCenter = NULL;
  1619. try
  1620. {
  1621. pDmCenter = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1622. if( pDmCenter->Create(
  1623. true,
  1624. __EDMT_2005_CENTER,
  1625. rcScreen
  1626. )
  1627. )
  1628. {
  1629. CRect _rcScreen( rcScreen );
  1630. CSize _size( pDmCenter->m_size );
  1631. _size.cx += 12;
  1632. _size.cy += 12;
  1633. _rcScreen.OffsetRect(
  1634. ( _rcScreen.Width() - _size.cx ) / 2,
  1635. ( _rcScreen.Height() - _size.cy ) / 2
  1636. );
  1637. _rcScreen.right = _rcScreen.left + _size.cx;
  1638. _rcScreen.bottom = _rcScreen.top + _size.cy;
  1639. int nCount = (int)m_arrChildren.GetSize();
  1640. for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1641. {
  1642. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  1643. ASSERT( pDM != NULL );
  1644. pDM->m_bSparsedMode = false;
  1645. pDM->OnCalcScreenRect(
  1646. pDM->m_eDockMarkerType,
  1647. _rcScreen,
  1648. pDmCenter
  1649. );
  1650. } // for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1651. m_eDockMarkerType = eDockMarkerType;
  1652. m_arrChildren.InsertAt( 0, pDmCenter );
  1653. return true;
  1654. }
  1655. ASSERT( FALSE );
  1656. } // try
  1657. catch( ... )
  1658. {
  1659. ASSERT( FALSE );
  1660. } // catch( .... )
  1661. if( pDmCenter != NULL )
  1662. delete pDmCenter;
  1663. Empty();
  1664. }
  1665. return false;
  1666. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1667. case __EDMT_2005_GROUP_TAB:
  1668. {
  1669. if( ! Create(
  1670. true,
  1671. __EDMT_2005_GROUP_CENTRAL,
  1672. rcScreen
  1673. )
  1674. )
  1675. {
  1676. ASSERT( FALSE );
  1677. return false;
  1678. }
  1679. DockMarkerBase * pDmTab = NULL;
  1680. try
  1681. {
  1682. pDmTab = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1683. if( pDmTab->Create(
  1684. true,
  1685. __EDMT_2005_TAB,
  1686. rcScreen
  1687. )
  1688. )
  1689. {
  1690. m_eDockMarkerType = eDockMarkerType;
  1691. // m_arrChildren.Add( pDmTab );
  1692. ASSERT( m_arrChildren.GetSize() >= 1 );
  1693. m_arrChildren.InsertAt( 1, pDmTab );
  1694. return true;
  1695. }
  1696. ASSERT( FALSE );
  1697. } // try
  1698. catch( ... )
  1699. {
  1700. ASSERT( FALSE );
  1701. } // catch( .... )
  1702. if( pDmTab != NULL )
  1703. delete pDmTab;
  1704. Empty();
  1705. }
  1706. return false;
  1707. case __EDMT_2005_TAB:
  1708. return
  1709. CreateFromBitmapResources(
  1710. rcScreen,
  1711. eDockMarkerType,
  1712. RGB(0,255,0),
  1713. __EXT_MFC_SAFE_LPCTSTR(
  1714. MAKEINTRESOURCE(
  1715. IDB_EXT_RESIZABLE_DOCK_MARKER_2005B2_TAB
  1716. )
  1717. )
  1718. );
  1719. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1720. } // switch( eDockMarkerType )
  1721. ASSERT( FALSE );
  1722. return false;
  1723. }
  1724. bool CExtPaintManager::DockMarker2008XP::Create(
  1725. bool bCentralMode,
  1726. CExtPaintManager::eDockMarkerType_t eDockMarkerType, // = CExtPaintManager::DockMarkerBase::__EDMT_EMPTY
  1727. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  1728. )
  1729. {
  1730. Empty();
  1731. if( eDockMarkerType == __EDMT_EMPTY )
  1732. return true;
  1733. switch( eDockMarkerType )
  1734. {
  1735. case __EDMT_2005_TOP:
  1736. return
  1737. CreateFromBitmapResources(
  1738. rcScreen,
  1739. eDockMarkerType,
  1740. RGB(255,0,255),
  1741. ( m_bSparsedMode )
  1742. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_TOP ) )
  1743. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_TOP ) )
  1744. ,
  1745. ( m_bSparsedMode )
  1746. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_OUT_TOP ) )
  1747. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_TOP ) )
  1748. );
  1749. case __EDMT_2005_BOTTOM:
  1750. return
  1751. CreateFromBitmapResources(
  1752. rcScreen,
  1753. eDockMarkerType,
  1754. RGB(255,0,255),
  1755. ( m_bSparsedMode )
  1756. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_BOTTOM ) )
  1757. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_BOTTOM ) )
  1758. ,
  1759. ( m_bSparsedMode )
  1760. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_OUT_BOTTOM ) )
  1761. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_BOTTOM ) )
  1762. );
  1763. case __EDMT_2005_LEFT:
  1764. return
  1765. CreateFromBitmapResources(
  1766. rcScreen,
  1767. eDockMarkerType,
  1768. RGB(255,0,255),
  1769. ( m_bSparsedMode )
  1770. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_LEFT ) )
  1771. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_LEFT ) )
  1772. ,
  1773. ( m_bSparsedMode )
  1774. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_OUT_LEFT ) )
  1775. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_LEFT ) )
  1776. );
  1777. case __EDMT_2005_RIGHT:
  1778. return
  1779. CreateFromBitmapResources(
  1780. rcScreen,
  1781. eDockMarkerType,
  1782. RGB(255,0,255),
  1783. ( m_bSparsedMode )
  1784. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_IN_RIGHT ) )
  1785. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_RIGHT ) )
  1786. ,
  1787. ( m_bSparsedMode )
  1788. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_OUTER_OUT_RIGHT ) )
  1789. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_RIGHT ) )
  1790. );
  1791. case __EDMT_2005_CENTER:
  1792. return
  1793. CreateFromBitmapResources(
  1794. rcScreen,
  1795. eDockMarkerType,
  1796. RGB(255,0,255),
  1797. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_EMPTY ) ),
  1798. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_EMPTY ) )
  1799. );
  1800. case __EDMT_2005_GROUP_SPARSED:
  1801. {
  1802. DockMarkerBase * pDmTop = NULL, * pDmBottom = NULL,
  1803. * pDmLeft = NULL, * pDmRight = NULL;
  1804. try
  1805. {
  1806. pDmTop = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1807. pDmBottom = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1808. pDmLeft = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1809. pDmRight = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1810. if( ! bCentralMode )
  1811. {
  1812. pDmTop->m_bSparsedMode = true;
  1813. pDmBottom->m_bSparsedMode = true;
  1814. pDmLeft->m_bSparsedMode = true;
  1815. pDmRight->m_bSparsedMode = true;
  1816. } // if( ! bCentralMode )
  1817. if( pDmTop->Create( bCentralMode, __EDMT_2005_TOP, rcScreen )
  1818. && pDmBottom->Create( bCentralMode, __EDMT_2005_BOTTOM, rcScreen )
  1819. && pDmLeft->Create( bCentralMode, __EDMT_2005_LEFT, rcScreen )
  1820. && pDmRight->Create( bCentralMode, __EDMT_2005_RIGHT, rcScreen )
  1821. )
  1822. {
  1823. m_eDockMarkerType = eDockMarkerType;
  1824. m_arrChildren.Add( pDmTop );
  1825. m_arrChildren.Add( pDmBottom );
  1826. m_arrChildren.Add( pDmLeft );
  1827. m_arrChildren.Add( pDmRight );
  1828. return true;
  1829. }
  1830. ASSERT( FALSE );
  1831. } // try
  1832. catch( ... )
  1833. {
  1834. ASSERT( FALSE );
  1835. } // catch( .... )
  1836. if( pDmTop != NULL )
  1837. delete pDmTop;
  1838. if( pDmBottom != NULL )
  1839. delete pDmBottom;
  1840. if( pDmLeft != NULL )
  1841. delete pDmLeft;
  1842. if( pDmRight != NULL )
  1843. delete pDmRight;
  1844. }
  1845. return false;
  1846. case __EDMT_2005_GROUP_CENTRAL:
  1847. {
  1848. if( ! Create(
  1849. true,
  1850. __EDMT_2005_GROUP_SPARSED,
  1851. rcScreen
  1852. )
  1853. )
  1854. {
  1855. ASSERT( FALSE );
  1856. return false;
  1857. }
  1858. DockMarkerBase * pDmCenter = NULL;
  1859. try
  1860. {
  1861. pDmCenter = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1862. if( pDmCenter->Create(
  1863. true,
  1864. __EDMT_2005_CENTER,
  1865. rcScreen
  1866. )
  1867. )
  1868. {
  1869. CRect _rcScreen( rcScreen );
  1870. CSize _size( pDmCenter->m_size );
  1871. _size.cx += 12;
  1872. _size.cy += 12;
  1873. _rcScreen.OffsetRect(
  1874. ( _rcScreen.Width() - _size.cx ) / 2,
  1875. ( _rcScreen.Height() - _size.cy ) / 2
  1876. );
  1877. _rcScreen.right = _rcScreen.left + _size.cx;
  1878. _rcScreen.bottom = _rcScreen.top + _size.cy;
  1879. int nCount = (int)m_arrChildren.GetSize();
  1880. for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1881. {
  1882. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  1883. ASSERT( pDM != NULL );
  1884. pDM->m_bSparsedMode = false;
  1885. pDM->OnCalcScreenRect(
  1886. pDM->m_eDockMarkerType,
  1887. _rcScreen,
  1888. pDmCenter
  1889. );
  1890. } // for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  1891. m_eDockMarkerType = eDockMarkerType;
  1892. m_arrChildren.InsertAt( 0, pDmCenter );
  1893. return true;
  1894. }
  1895. ASSERT( FALSE );
  1896. } // try
  1897. catch( ... )
  1898. {
  1899. ASSERT( FALSE );
  1900. } // catch( .... )
  1901. if( pDmCenter != NULL )
  1902. delete pDmCenter;
  1903. Empty();
  1904. }
  1905. return false;
  1906. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1907. case __EDMT_2005_GROUP_TAB:
  1908. {
  1909. if( ! Create(
  1910. true,
  1911. __EDMT_2005_GROUP_CENTRAL,
  1912. rcScreen
  1913. )
  1914. )
  1915. {
  1916. ASSERT( FALSE );
  1917. return false;
  1918. }
  1919. DockMarkerBase * pDmTab = NULL;
  1920. try
  1921. {
  1922. pDmTab = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  1923. if( pDmTab->Create(
  1924. true,
  1925. __EDMT_2005_TAB,
  1926. rcScreen
  1927. )
  1928. )
  1929. {
  1930. m_eDockMarkerType = eDockMarkerType;
  1931. // m_arrChildren.Add( pDmTab );
  1932. ASSERT( m_arrChildren.GetSize() >= 1 );
  1933. m_arrChildren.InsertAt( 1, pDmTab );
  1934. return true;
  1935. }
  1936. ASSERT( FALSE );
  1937. } // try
  1938. catch( ... )
  1939. {
  1940. ASSERT( FALSE );
  1941. } // catch( .... )
  1942. if( pDmTab != NULL )
  1943. delete pDmTab;
  1944. Empty();
  1945. }
  1946. return false;
  1947. case __EDMT_2005_TAB:
  1948. return
  1949. CreateFromBitmapResources(
  1950. rcScreen,
  1951. eDockMarkerType,
  1952. RGB(255,0,255),
  1953. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_IN_TAB ) ),
  1954. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_XP_INNER_OUT_TAB ) )
  1955. );
  1956. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  1957. } // switch( eDockMarkerType )
  1958. ASSERT( FALSE );
  1959. return false;
  1960. }
  1961. bool CExtPaintManager::DockMarker2008Vista::Create(
  1962. bool bCentralMode,
  1963. CExtPaintManager::eDockMarkerType_t eDockMarkerType, // = CExtPaintManager::DockMarkerBase::__EDMT_EMPTY
  1964. CRect rcScreen // = CRect( 0, 0, 0, 0 )
  1965. )
  1966. {
  1967. Empty();
  1968. if( eDockMarkerType == __EDMT_EMPTY )
  1969. return true;
  1970. switch( eDockMarkerType )
  1971. {
  1972. case __EDMT_2005_TOP:
  1973. return
  1974. CreateFromBitmapResources(
  1975. rcScreen,
  1976. eDockMarkerType,
  1977. RGB(255,0,255),
  1978. ( m_bSparsedMode )
  1979. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_TOP ) )
  1980. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_TOP ) )
  1981. ,
  1982. ( m_bSparsedMode )
  1983. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_OUT_TOP ) )
  1984. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_TOP ) )
  1985. );
  1986. case __EDMT_2005_BOTTOM:
  1987. return
  1988. CreateFromBitmapResources(
  1989. rcScreen,
  1990. eDockMarkerType,
  1991. RGB(255,0,255),
  1992. ( m_bSparsedMode )
  1993. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_BOTTOM ) )
  1994. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_BOTTOM ) )
  1995. ,
  1996. ( m_bSparsedMode )
  1997. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_OUT_BOTTOM ) )
  1998. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_BOTTOM ) )
  1999. );
  2000. case __EDMT_2005_LEFT:
  2001. return
  2002. CreateFromBitmapResources(
  2003. rcScreen,
  2004. eDockMarkerType,
  2005. RGB(255,0,255),
  2006. ( m_bSparsedMode )
  2007. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_LEFT ) )
  2008. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_LEFT ) )
  2009. ,
  2010. ( m_bSparsedMode )
  2011. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_OUT_LEFT ) )
  2012. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_LEFT ) )
  2013. );
  2014. case __EDMT_2005_RIGHT:
  2015. return
  2016. CreateFromBitmapResources(
  2017. rcScreen,
  2018. eDockMarkerType,
  2019. RGB(255,0,255),
  2020. ( m_bSparsedMode )
  2021. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_IN_RIGHT ) )
  2022. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_RIGHT ) )
  2023. ,
  2024. ( m_bSparsedMode )
  2025. ? __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_OUTER_OUT_RIGHT ) )
  2026. : __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_RIGHT ) )
  2027. );
  2028. case __EDMT_2005_CENTER:
  2029. return
  2030. CreateFromBitmapResources(
  2031. rcScreen,
  2032. eDockMarkerType,
  2033. RGB(255,0,255),
  2034. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_EMPTY ) ),
  2035. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_EMPTY ) )
  2036. );
  2037. case __EDMT_2005_GROUP_SPARSED:
  2038. {
  2039. DockMarkerBase * pDmTop = NULL, * pDmBottom = NULL,
  2040. * pDmLeft = NULL, * pDmRight = NULL;
  2041. try
  2042. {
  2043. pDmTop = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2044. pDmBottom = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2045. pDmLeft = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2046. pDmRight = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2047. if( ! bCentralMode )
  2048. {
  2049. pDmTop->m_bSparsedMode = true;
  2050. pDmBottom->m_bSparsedMode = true;
  2051. pDmLeft->m_bSparsedMode = true;
  2052. pDmRight->m_bSparsedMode = true;
  2053. } // if( ! bCentralMode )
  2054. if( pDmTop->Create( bCentralMode, __EDMT_2005_TOP, rcScreen )
  2055. && pDmBottom->Create( bCentralMode, __EDMT_2005_BOTTOM, rcScreen )
  2056. && pDmLeft->Create( bCentralMode, __EDMT_2005_LEFT, rcScreen )
  2057. && pDmRight->Create( bCentralMode, __EDMT_2005_RIGHT, rcScreen )
  2058. )
  2059. {
  2060. m_eDockMarkerType = eDockMarkerType;
  2061. m_arrChildren.Add( pDmTop );
  2062. m_arrChildren.Add( pDmBottom );
  2063. m_arrChildren.Add( pDmLeft );
  2064. m_arrChildren.Add( pDmRight );
  2065. return true;
  2066. }
  2067. ASSERT( FALSE );
  2068. } // try
  2069. catch( ... )
  2070. {
  2071. ASSERT( FALSE );
  2072. } // catch( .... )
  2073. if( pDmTop != NULL )
  2074. delete pDmTop;
  2075. if( pDmBottom != NULL )
  2076. delete pDmBottom;
  2077. if( pDmLeft != NULL )
  2078. delete pDmLeft;
  2079. if( pDmRight != NULL )
  2080. delete pDmRight;
  2081. }
  2082. return false;
  2083. case __EDMT_2005_GROUP_CENTRAL:
  2084. {
  2085. if( ! Create(
  2086. true,
  2087. __EDMT_2005_GROUP_SPARSED,
  2088. rcScreen
  2089. )
  2090. )
  2091. {
  2092. ASSERT( FALSE );
  2093. return false;
  2094. }
  2095. DockMarkerBase * pDmCenter = NULL;
  2096. try
  2097. {
  2098. pDmCenter = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2099. if( pDmCenter->Create(
  2100. true,
  2101. __EDMT_2005_CENTER,
  2102. rcScreen
  2103. )
  2104. )
  2105. {
  2106. CRect _rcScreen( rcScreen );
  2107. CSize _size( pDmCenter->m_size );
  2108. _size.cx += 12;
  2109. _size.cy += 12;
  2110. _rcScreen.OffsetRect(
  2111. ( _rcScreen.Width() - _size.cx ) / 2,
  2112. ( _rcScreen.Height() - _size.cy ) / 2
  2113. );
  2114. _rcScreen.right = _rcScreen.left + _size.cx;
  2115. _rcScreen.bottom = _rcScreen.top + _size.cy;
  2116. int nCount = (int)m_arrChildren.GetSize();
  2117. for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  2118. {
  2119. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  2120. ASSERT( pDM != NULL );
  2121. pDM->m_bSparsedMode = false;
  2122. pDM->OnCalcScreenRect(
  2123. pDM->m_eDockMarkerType,
  2124. _rcScreen,
  2125. pDmCenter
  2126. );
  2127. } // for( int nIndex = 0; nIndex < nCount; nIndex ++ )
  2128. m_eDockMarkerType = eDockMarkerType;
  2129. m_arrChildren.InsertAt( 0, pDmCenter );
  2130. return true;
  2131. }
  2132. ASSERT( FALSE );
  2133. } // try
  2134. catch( ... )
  2135. {
  2136. ASSERT( FALSE );
  2137. } // catch( .... )
  2138. if( pDmCenter != NULL )
  2139. delete pDmCenter;
  2140. Empty();
  2141. }
  2142. return false;
  2143. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  2144. case __EDMT_2005_GROUP_TAB:
  2145. {
  2146. if( ! Create(
  2147. true,
  2148. __EDMT_2005_GROUP_CENTRAL,
  2149. rcScreen
  2150. )
  2151. )
  2152. {
  2153. ASSERT( FALSE );
  2154. return false;
  2155. }
  2156. DockMarkerBase * pDmTab = NULL;
  2157. try
  2158. {
  2159. pDmTab = m_pPM->DockMarker_CreateObject( m_eResizablePanelDockingType );
  2160. if( pDmTab->Create(
  2161. true,
  2162. __EDMT_2005_TAB,
  2163. rcScreen
  2164. )
  2165. )
  2166. {
  2167. m_eDockMarkerType = eDockMarkerType;
  2168. // m_arrChildren.Add( pDmTab );
  2169. ASSERT( m_arrChildren.GetSize() >= 1 );
  2170. m_arrChildren.InsertAt( 1, pDmTab );
  2171. return true;
  2172. }
  2173. ASSERT( FALSE );
  2174. } // try
  2175. catch( ... )
  2176. {
  2177. ASSERT( FALSE );
  2178. } // catch( .... )
  2179. if( pDmTab != NULL )
  2180. delete pDmTab;
  2181. Empty();
  2182. }
  2183. return false;
  2184. case __EDMT_2005_TAB:
  2185. return
  2186. CreateFromBitmapResources(
  2187. rcScreen,
  2188. eDockMarkerType,
  2189. RGB(255,0,255),
  2190. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_IN_TAB ) ),
  2191. __EXT_MFC_SAFE_LPCTSTR( MAKEINTRESOURCE( IDB_EXT_RESIZABLE_DOCK_MARKER_2008_VISTA_INNER_OUT_TAB ) )
  2192. );
  2193. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  2194. } // switch( eDockMarkerType )
  2195. ASSERT( FALSE );
  2196. return false;
  2197. }
  2198. bool CExtPaintManager::DockMarkerBase::DockMarker_CreateWnds(
  2199. HWND hWndLastDynamicTarget,
  2200. CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * > & arrDockMarkerWnds,
  2201. CExtDynDockMarkerWnd * pWndParentMarker
  2202. )
  2203. {
  2204. bool bRetVal = true;
  2205. if( ! m_bmpIn.IsEmpty() )
  2206. {
  2207. ASSERT( ! m_bmpOut.IsEmpty() );
  2208. ASSERT( m_rgn.GetSafeHandle() != NULL );
  2209. CExtDynDockMarkerWnd * pDynDockMarkerWnd =
  2210. new CExtDynDockMarkerWnd(
  2211. pWndParentMarker,
  2212. hWndLastDynamicTarget,
  2213. int(m_eDockMarkerType),
  2214. m_bmpIn,
  2215. m_bmpOut,
  2216. (HRGN)m_rgn.GetSafeHandle(),
  2217. m_rcScreen,
  2218. & m_bmpOuterBk,
  2219. m_ptOffsetInner.x,
  2220. m_ptOffsetInner.y,
  2221. m_bSparsedMode
  2222. );
  2223. pWndParentMarker = pDynDockMarkerWnd;
  2224. _DetachHandles();
  2225. Empty();
  2226. if( pDynDockMarkerWnd->GetSafeHwnd() != NULL )
  2227. arrDockMarkerWnds.Add(
  2228. pDynDockMarkerWnd
  2229. );
  2230. else
  2231. {
  2232. ASSERT( FALSE );
  2233. bRetVal = false;
  2234. } // else from if( pDynDockMarkerWnd->GetSafeHwnd() != NULL )
  2235. } // if( ! m_bmpIn.IsEmpty() )
  2236. int nCount = (int)m_arrChildren.GetSize();
  2237. bool bChainMode = ( pWndParentMarker == NULL ) ? true : false;
  2238. for( int nIndex = 0; nIndex < nCount; nIndex++ )
  2239. {
  2240. DockMarkerBase * pDM = m_arrChildren[ nIndex ];
  2241. ASSERT( pDM != NULL );
  2242. if ( bChainMode && nIndex > 0 && arrDockMarkerWnds.GetSize() > 0 )
  2243. pWndParentMarker = arrDockMarkerWnds[ arrDockMarkerWnds.GetSize() - 1 ];
  2244. bool bChildrenRetVal =
  2245. pDM->DockMarker_CreateWnds(
  2246. hWndLastDynamicTarget,
  2247. arrDockMarkerWnds,
  2248. pWndParentMarker
  2249. );
  2250. if( !bChildrenRetVal )
  2251. bRetVal = false;
  2252. } // for( int nIndex = 0; nIndex < nCount; nIndex++ )
  2253. return bRetVal;
  2254. }
  2255. bool CExtPaintManager::DockMarker_CreateWnds(
  2256. HWND hWndLastDynamicTarget,
  2257. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  2258. CRect rcScreen,
  2259. CTypedPtrArray < CPtrArray, CExtDynDockMarkerWnd * > & arrDockMarkerWnds,
  2260. int eResizablePanelDockingType,
  2261. CExtDynDockMarkerWnd * pWndParentMarker
  2262. )
  2263. {
  2264. ASSERT_VALID( this );
  2265. ASSERT( eDockMarkerType != __EDMT_EMPTY );
  2266. CExtDynDockMarkerWnd::DestroyMarkers( arrDockMarkerWnds );
  2267. DockMarkerBase _DM( this, eResizablePanelDockingType );
  2268. if( ! _DM.Create( false, eDockMarkerType, rcScreen ) )
  2269. {
  2270. ASSERT( FALSE );
  2271. return false;
  2272. } // if( ! _DM.Create( eDockMarkerType, rcScreen ) )
  2273. return
  2274. _DM.DockMarker_CreateWnds(
  2275. hWndLastDynamicTarget,
  2276. arrDockMarkerWnds,
  2277. pWndParentMarker
  2278. );
  2279. }
  2280. void CExtPaintManager::DockMarker_PostRender(
  2281. CDC & dc,
  2282. CRect rcItem,
  2283. CExtPaintManager::eDockMarkerType_t eMarkerType,
  2284. bool bHover,
  2285. CObject * pHelperSrc,
  2286. LPARAM lParam // = 0L
  2287. )
  2288. {
  2289. ASSERT_VALID( this );
  2290. ASSERT_VALID( (&dc) );
  2291. ASSERT( dc.GetSafeHdc() != NULL );
  2292. lParam;
  2293. if( pHelperSrc == NULL )
  2294. return;
  2295. ASSERT_VALID( pHelperSrc );
  2296. if( ! pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtControlBar) ) )
  2297. return;
  2298. if( INT(((CExtControlBar*)(pHelperSrc))->OnQueryDockingType()) != INT(CExtControlBar::__RESIZABLE_DOCKING_TYPE_STUDIO_2005) )
  2299. return;
  2300. switch( m_eStyle2005 )
  2301. {
  2302. case __ES2005_BETA1:
  2303. break;
  2304. case __ES2005_BETA2:
  2305. case __ES2005_RC:
  2306. if(  pHelperSrc != NULL )
  2307. {
  2308. ASSERT_VALID( pHelperSrc );
  2309. CExtDynDockMarkerWnd * pDynDockMarkerWnd =
  2310. DYNAMIC_DOWNCAST( CExtDynDockMarkerWnd, pHelperSrc );
  2311. if( pDynDockMarkerWnd != NULL )
  2312. {
  2313. static const COLORREF stat_clrHoverBorderBeta2 = RGB(0,96,196);
  2314. if( bHover && pDynDockMarkerWnd->m_bSparsedMode )
  2315. {
  2316. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2317. switch( eMarkerType )
  2318. {
  2319. case __EDMT_2005_LEFT:
  2320. dc.FillSolidRect(
  2321. rcItem.left,
  2322. rcItem.top,
  2323. rcItem.Width(),
  2324. 1,
  2325. clrHoverBorderBeta2
  2326. );
  2327. dc.FillSolidRect(
  2328. rcItem.left,
  2329. rcItem.bottom-1,
  2330. rcItem.Width(),
  2331. 1,
  2332. clrHoverBorderBeta2
  2333. );
  2334. dc.FillSolidRect(
  2335. rcItem.left,
  2336. rcItem.top,
  2337. 1,
  2338. rcItem.Height(),
  2339. clrHoverBorderBeta2
  2340. );
  2341. break;
  2342. case __EDMT_2005_RIGHT:
  2343. dc.FillSolidRect(
  2344. rcItem.left,
  2345. rcItem.top,
  2346. rcItem.Width(),
  2347. 1,
  2348. clrHoverBorderBeta2
  2349. );
  2350. dc.FillSolidRect(
  2351. rcItem.left,
  2352. rcItem.bottom-1,
  2353. rcItem.Width(),
  2354. 1,
  2355. clrHoverBorderBeta2
  2356. );
  2357. dc.FillSolidRect(
  2358. rcItem.right-1,
  2359. rcItem.top,
  2360. 1,
  2361. rcItem.Height(),
  2362. clrHoverBorderBeta2
  2363. );
  2364. break;
  2365. case __EDMT_2005_TOP:
  2366. dc.FillSolidRect(
  2367. rcItem.left,
  2368. rcItem.top,
  2369. rcItem.Width(),
  2370. 1,
  2371. clrHoverBorderBeta2
  2372. );
  2373. dc.FillSolidRect(
  2374. rcItem.left,
  2375. rcItem.top,
  2376. 1,
  2377. rcItem.Height(),
  2378. clrHoverBorderBeta2
  2379. );
  2380. dc.FillSolidRect(
  2381. rcItem.right-1,
  2382. rcItem.top,
  2383. 1,
  2384. rcItem.Height(),
  2385. clrHoverBorderBeta2
  2386. );
  2387. break;
  2388. case __EDMT_2005_BOTTOM:
  2389. dc.FillSolidRect(
  2390. rcItem.left,
  2391. rcItem.bottom-1,
  2392. rcItem.Width(),
  2393. 1,
  2394. clrHoverBorderBeta2
  2395. );
  2396. dc.FillSolidRect(
  2397. rcItem.left,
  2398. rcItem.top,
  2399. 1,
  2400. rcItem.Height(),
  2401. clrHoverBorderBeta2
  2402. );
  2403. dc.FillSolidRect(
  2404. rcItem.right-1,
  2405. rcItem.top,
  2406. 1,
  2407. rcItem.Height(),
  2408. clrHoverBorderBeta2
  2409. );
  2410. break;
  2411. } // switch( eMarkerType )
  2412. } // if( bHover && pDynDockMarkerWnd->m_bSparsedMode )
  2413. else if( eMarkerType == __EDMT_2005_CENTER )
  2414. {
  2415. if( pDynDockMarkerWnd->m_hWndLastHoverDepenentMarker != NULL
  2416. && ::IsWindow(
  2417. pDynDockMarkerWnd->m_hWndLastHoverDepenentMarker
  2418. )
  2419. )
  2420. { // if hover dependent marker window is valid
  2421. CWnd * pWndPermanent =
  2422. CWnd::FromHandlePermanent(
  2423. pDynDockMarkerWnd->m_hWndLastHoverDepenentMarker
  2424. );
  2425. if( pWndPermanent != NULL )
  2426. {
  2427. CExtDynDockMarkerWnd * pWndLastHoverDepenentMarker =
  2428. DYNAMIC_DOWNCAST(
  2429. CExtDynDockMarkerWnd,
  2430. pWndPermanent
  2431. );
  2432. if( pWndLastHoverDepenentMarker != NULL )
  2433. {
  2434. switch( pWndLastHoverDepenentMarker->m_eMarkerType )
  2435. {
  2436. case int(__EDMT_2005_LEFT):
  2437. {
  2438. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2439. CRect rc( 0, 29, 23, 58 );
  2440. dc.FillSolidRect(
  2441. rc.left,
  2442. rc.top,
  2443. rc.Width(),
  2444. 1,
  2445. clrHoverBorderBeta2
  2446. );
  2447. dc.FillSolidRect(
  2448. rc.left,
  2449. rc.bottom-1,
  2450. rc.Width(),
  2451. 1,
  2452. clrHoverBorderBeta2
  2453. );
  2454. dc.FillSolidRect(
  2455. rc.left,
  2456. rc.top,
  2457. 1,
  2458. rc.Height(),
  2459. clrHoverBorderBeta2
  2460. );
  2461. }
  2462. break;
  2463. case int(__EDMT_2005_RIGHT):
  2464. {
  2465. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2466. CRect rc( 64, 29, 88, 58 );
  2467. dc.FillSolidRect(
  2468. rc.left,
  2469. rc.top,
  2470. rc.Width(),
  2471. 1,
  2472. clrHoverBorderBeta2
  2473. );
  2474. dc.FillSolidRect(
  2475. rc.left,
  2476. rc.bottom-1,
  2477. rc.Width(),
  2478. 1,
  2479. clrHoverBorderBeta2
  2480. );
  2481. dc.FillSolidRect(
  2482. rc.right-1,
  2483. rc.top,
  2484. 1,
  2485. rc.Height(),
  2486. clrHoverBorderBeta2
  2487. );
  2488. }
  2489. break;
  2490. case int(__EDMT_2005_TOP):
  2491. {
  2492. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2493. CRect rc( 29, 0, 58, 23 );
  2494. dc.FillSolidRect(
  2495. rc.left,
  2496. rc.top,
  2497. rc.Width(),
  2498. 1,
  2499. clrHoverBorderBeta2
  2500. );
  2501. dc.FillSolidRect(
  2502. rc.left,
  2503. rc.top,
  2504. 1,
  2505. rc.Height(),
  2506. clrHoverBorderBeta2
  2507. );
  2508. dc.FillSolidRect(
  2509. rc.right-1,
  2510. rc.top,
  2511. 1,
  2512. rc.Height(),
  2513. clrHoverBorderBeta2
  2514. );
  2515. }
  2516. break;
  2517. case int(__EDMT_2005_BOTTOM):
  2518. {
  2519. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2520. CRect rc( 29, 64, 58, 88 );
  2521. dc.FillSolidRect(
  2522. rc.left,
  2523. rc.bottom-1,
  2524. rc.Width(),
  2525. 1,
  2526. clrHoverBorderBeta2
  2527. );
  2528. dc.FillSolidRect(
  2529. rc.left,
  2530. rc.top,
  2531. 1,
  2532. rc.Height(),
  2533. clrHoverBorderBeta2
  2534. );
  2535. dc.FillSolidRect(
  2536. rc.right-1,
  2537. rc.top,
  2538. 1,
  2539. rc.Height(),
  2540. clrHoverBorderBeta2
  2541. );
  2542. }
  2543. break;
  2544. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  2545. case int(__EDMT_2005_TAB):
  2546. {
  2547. COLORREF clrHoverBorderBeta2 = dc.GetNearestColor( stat_clrHoverBorderBeta2 );
  2548. CPen _pen( PS_SOLID, 1, clrHoverBorderBeta2 );
  2549. CPen * pOldPen = dc.SelectObject( &_pen );
  2550. dc.MoveTo( 23, 28 );
  2551. dc.LineTo( 29, 22 );
  2552. dc.MoveTo( 58, 23 );
  2553. dc.LineTo( 64, 29 );
  2554. dc.MoveTo( 58, 63 );
  2555. dc.LineTo( 64, 57 );
  2556. dc.MoveTo( 23, 58 );
  2557. dc.LineTo( 29, 64 );
  2558. dc.SelectObject( pOldPen );
  2559. }
  2560. break;
  2561. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS )
  2562. } // switch( pWndLastHoverDepenentMarker->m_eMarkerType )
  2563. } // if( pWndLastHoverDepenentMarker != NULL )
  2564. } // if( pWndPermanent != NULL )
  2565. } // if hover dependent marker window is valid
  2566. } // else if( eMarkerType == __EDMT_2005_CENTER )
  2567. } // if( pDynDockMarkerWnd != NULL )
  2568. } // if( pHelperSrc != NULL )
  2569. break;
  2570. default:
  2571. {
  2572. ASSERT( FALSE );
  2573. }
  2574. } // switch( m_eStyle2005 )
  2575. }
  2576. CRect CExtPaintManager::DockMarker_GetOuterDistance()
  2577. {
  2578. ASSERT_VALID( this );
  2579. switch( m_eStyle2005 )
  2580. {
  2581. case __ES2005_BETA1:
  2582. return CRect( 0, 0, 0, 0 );
  2583. case __ES2005_BETA2:
  2584. case __ES2005_RC:
  2585. return CRect( 5, 5, 5, 5 );
  2586. default:
  2587. {
  2588. ASSERT( FALSE );
  2589. }
  2590. return CRect( 0, 0, 0, 0 );
  2591. } // switch( m_eStyle2005 )
  2592. }
  2593. BYTE CExtPaintManager::DockMarker_GetAlpha(
  2594. bool bHighlight,
  2595. CObject * pHelperSrc,
  2596. LPARAM lParam // = 0L
  2597. )
  2598. {
  2599. ASSERT_VALID( this );
  2600. bHighlight;
  2601. pHelperSrc;
  2602. lParam;
  2603. return BYTE(255);
  2604. }
  2605. bool CExtPaintManager::DockMarker_IsAdjustBmpsRequired(
  2606. eDockMarkerType_t eDockMarkerType
  2607. ) const
  2608. {
  2609. ASSERT_VALID( this );
  2610. eDockMarkerType;
  2611. switch( m_eStyle2005 )
  2612. {
  2613. case __ES2005_BETA1:
  2614. return true;
  2615. case __ES2005_BETA2:
  2616. case __ES2005_RC:
  2617. return false;
  2618. default:
  2619. {
  2620. ASSERT( FALSE );
  2621. }
  2622. return false;
  2623. } // switch( m_eStyle2005 )
  2624. }
  2625. void CExtPaintManager::DockMarker_AdjustBmps(
  2626. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  2627. CExtBitmap & bmpIn,
  2628. COLORREF clrTransparentIn,
  2629. CExtBitmap & bmpOut,
  2630. COLORREF clrTransparentOut
  2631. )
  2632. {
  2633. ASSERT_VALID( this );
  2634. ASSERT( ! bmpIn.IsEmpty() );
  2635. ASSERT( ! bmpOut.IsEmpty() );
  2636. if( ! DockMarker_IsAdjustBmpsRequired( eDockMarkerType ) )
  2637. return;
  2638. if( eDockMarkerType == CExtPaintManager::__EDMT_2005_CENTER )
  2639. return;
  2640. if( stat_GetBPP() <= 8 )
  2641. {
  2642. VERIFY(
  2643. bmpOut.AdjustHLS(
  2644. clrTransparentOut,
  2645. RGB(0,0,0),
  2646. 0.0,
  2647. 0.30,
  2648. -1.0
  2649. )
  2650. );
  2651. VERIFY(
  2652. bmpIn.AdjustHLS(
  2653. clrTransparentIn,
  2654. RGB(0,0,0),
  2655. 0.0,
  2656. -0.15,
  2657. -1.0
  2658. )
  2659. );
  2660. } // if( stat_GetBPP() <= 8 )
  2661. else
  2662. {
  2663. VERIFY(
  2664. bmpOut.AdjustHLS(
  2665. clrTransparentOut,
  2666. RGB(0,0,0),
  2667. 0.0,
  2668. 0.35,
  2669. 0.0
  2670. )
  2671. );
  2672. } // else from if( stat_GetBPP() <= 8 )
  2673. }
  2674. void CExtPaintManagerXP::DockMarker_AdjustBmps(
  2675. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  2676. CExtBitmap & bmpIn,
  2677. COLORREF clrTransparentIn,
  2678. CExtBitmap & bmpOut,
  2679. COLORREF clrTransparentOut
  2680. )
  2681. {
  2682. ASSERT_VALID( this );
  2683. ASSERT( ! bmpIn.IsEmpty() );
  2684. ASSERT( ! bmpOut.IsEmpty() );
  2685. if( ! DockMarker_IsAdjustBmpsRequired( eDockMarkerType ) )
  2686. return;
  2687. CExtPaintManager::DockMarker_AdjustBmps(
  2688. eDockMarkerType,
  2689. bmpIn,
  2690. clrTransparentIn,
  2691. bmpOut,
  2692. clrTransparentOut
  2693. );
  2694. }
  2695. void CExtPaintManagerOffice2003::DockMarker_AdjustBmps(
  2696. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  2697. CExtBitmap & bmpIn,
  2698. COLORREF clrTransparentIn,
  2699. CExtBitmap & bmpOut,
  2700. COLORREF clrTransparentOut
  2701. )
  2702. {
  2703. ASSERT_VALID( this );
  2704. if( IsHighContrast() )
  2705. {
  2706. CExtPaintManagerXP::DockMarker_AdjustBmps(
  2707. eDockMarkerType,
  2708. bmpIn,
  2709. clrTransparentIn,
  2710. bmpOut,
  2711. clrTransparentOut
  2712. );
  2713. return;
  2714. }
  2715. if( ! DockMarker_IsAdjustBmpsRequired( eDockMarkerType ) )
  2716. return;
  2717. e_system_theme_t eCurrentTheme = OnQuerySystemTheme();
  2718. if( eCurrentTheme == ThemeUnknown
  2719. || stat_GetBPP() <= 8
  2720. )
  2721. {
  2722. CExtPaintManagerXP::DockMarker_AdjustBmps(
  2723. eDockMarkerType,
  2724. bmpIn,
  2725. clrTransparentIn,
  2726. bmpOut,
  2727. clrTransparentOut
  2728. );
  2729. return;
  2730. } // if( eCurrentTheme == ThemeUnknown )
  2731. if( eDockMarkerType == CExtPaintManager::__EDMT_2005_CENTER )
  2732. return;
  2733. VERIFY(
  2734. bmpOut.AdjustHLS(
  2735. clrTransparentOut,
  2736. RGB(0,0,0),
  2737. 0.0,
  2738. 0.35,
  2739. 0.0
  2740. )
  2741. );
  2742. if( eCurrentTheme == ThemeLunaOlive )
  2743. {
  2744. VERIFY(
  2745. bmpIn.AdjustHLS(
  2746. clrTransparentIn,
  2747. RGB(0,0,0),
  2748. 0.60,
  2749. 0.0,
  2750. -0.45
  2751. )
  2752. );
  2753. VERIFY(
  2754. bmpOut.AdjustHLS(
  2755. clrTransparentOut,
  2756. RGB(0,0,0),
  2757. 0.60,
  2758. 0.0,
  2759. -0.45
  2760. )
  2761. );
  2762. return;
  2763. } // if( eCurrentTheme == ThemeLunaOlive )
  2764. if( eCurrentTheme == ThemeLunaSilver )
  2765. {
  2766. VERIFY(
  2767. bmpIn.AdjustHLS(
  2768. clrTransparentIn,
  2769. RGB(0,0,0),
  2770. 0.0,
  2771. 0.0,
  2772. -0.85
  2773. )
  2774. );
  2775. VERIFY(
  2776. bmpOut.AdjustHLS(
  2777. clrTransparentOut,
  2778. RGB(0,0,0),
  2779. 0.0,
  2780. 0.0,
  2781. -0.85
  2782. )
  2783. );
  2784. return;
  2785. } // if( eCurrentTheme == ThemeLunaSilver )
  2786. }
  2787. void CExtPaintManagerStudio2005::DockMarker_AdjustBmps(
  2788. CExtPaintManager::eDockMarkerType_t eDockMarkerType,
  2789. CExtBitmap & bmpIn,
  2790. COLORREF clrTransparentIn,
  2791. CExtBitmap & bmpOut,
  2792. COLORREF clrTransparentOut
  2793. )
  2794. {
  2795. ASSERT_VALID( this );
  2796. ASSERT( ! bmpIn.IsEmpty() );
  2797. ASSERT( ! bmpOut.IsEmpty() );
  2798. if( IsHighContrast() )
  2799. {
  2800. CExtPaintManagerXP::DockMarker_AdjustBmps(
  2801. eDockMarkerType,
  2802. bmpIn,
  2803. clrTransparentIn,
  2804. bmpOut,
  2805. clrTransparentOut
  2806. );
  2807. return;
  2808. }
  2809. if( ! DockMarker_IsAdjustBmpsRequired( eDockMarkerType ) )
  2810. return;
  2811. CExtPaintManagerOffice2003::DockMarker_AdjustBmps(
  2812. eDockMarkerType,
  2813. bmpIn,
  2814. clrTransparentIn,
  2815. bmpOut,
  2816. clrTransparentOut
  2817. );
  2818. }
  2819. void CExtPaintManager::DockMarker_AdjustHighlightedArea(
  2820. COLORREF * pClrSurface,
  2821. int nClrSurfaceDX,
  2822. int nClrSurfaceDY,
  2823. bool bTabShape,
  2824. bool bTabsAtTop,
  2825. const CRect & rcTabMainArea,
  2826. const CRect & rcTabBottomMiddleArea,
  2827. COLORREF clrAdjustMain, // = COLORREF(-1L)
  2828. COLORREF clrAdjustBorder, // = COLORREF(-1L)
  2829. int nBorderMetric // = 2
  2830. )
  2831. {
  2832. ASSERT_VALID( this );
  2833. ASSERT( nBorderMetric >= 0 );
  2834. ASSERT( pClrSurface != NULL );
  2835. ASSERT( nClrSurfaceDX > 0 );
  2836. ASSERT( nClrSurfaceDY > 0 );
  2837. CRect rcMainArea( 0, 0, nClrSurfaceDX, nClrSurfaceDY );
  2838. if( bTabShape )
  2839. rcMainArea = rcTabMainArea;
  2840. if( stat_GetBPP() > 8 )
  2841. {
  2842. if( clrAdjustMain == COLORREF(-1L) )
  2843. clrAdjustMain = ::GetSysColor( COLOR_HIGHLIGHT );
  2844. if( m_eStyle2005 == __ES2005_BETA2
  2845. || m_eStyle2005 == __ES2005_RC
  2846. )
  2847. clrAdjustMain = RGB(0,64,196);
  2848. if( nBorderMetric > 0 && clrAdjustBorder == COLORREF(-1L) )
  2849. clrAdjustBorder = ::GetSysColor( COLOR_ACTIVEBORDER );
  2850. unsigned nPixelIdx = 0;
  2851. for( int nY = 0; nY < nClrSurfaceDY; nY++ )
  2852. {
  2853. for( int nX = 0; nX < nClrSurfaceDX; nX++, nPixelIdx++ )
  2854. {
  2855. if( bTabShape )
  2856. {
  2857. CPoint ptTest( nX, nClrSurfaceDY - nY - 1 );
  2858. if( (! rcTabMainArea.PtInRect( ptTest ) )
  2859. && (! rcTabBottomMiddleArea.PtInRect( ptTest ) )
  2860. )
  2861. continue;
  2862. } // if( bTabShape )
  2863. COLORREF clrAdjustMix = clrAdjustMain;
  2864. if( nBorderMetric > 0 )
  2865. {
  2866. CPoint ptTest( nX, nClrSurfaceDY - nY - 1 );
  2867. if( bTabShape
  2868. && rcTabBottomMiddleArea.PtInRect( ptTest )
  2869. && (
  2870. ( bTabsAtTop
  2871. ? ( ptTest.y <= ( rcTabBottomMiddleArea.top + nBorderMetric ) )
  2872. : ( ptTest.y >= ( rcTabBottomMiddleArea.bottom - nBorderMetric ) )
  2873. )
  2874. || ptTest.x < (rcTabBottomMiddleArea.left + nBorderMetric)
  2875. || nX >= (rcTabBottomMiddleArea.right - nBorderMetric)
  2876. )
  2877. )
  2878. clrAdjustMix = clrAdjustBorder;
  2879. else if( rcMainArea.PtInRect( ptTest )
  2880. && (
  2881. ( bTabsAtTop
  2882. ? ( ptTest.y > ( rcMainArea.bottom - nBorderMetric ) )
  2883. : ( ptTest.y < ( rcMainArea.top + nBorderMetric ) )
  2884. )
  2885. || ptTest.x < (rcMainArea.left + nBorderMetric)
  2886. || ptTest.x >= (rcMainArea.right - nBorderMetric)
  2887. || (
  2888. ( bTabsAtTop
  2889. ? ( ptTest.y <= ( rcMainArea.top + nBorderMetric ) )
  2890. : ( ptTest.y >= ( rcMainArea.bottom - nBorderMetric ) )
  2891. )
  2892. && ( (!bTabShape)
  2893. || ( bTabShape
  2894. && ( ptTest.x < (rcTabBottomMiddleArea.left + nBorderMetric )
  2895. || ptTest.x >= (rcTabBottomMiddleArea.right - nBorderMetric )
  2896. )
  2897. )
  2898. )
  2899. )
  2900. )
  2901. )
  2902. clrAdjustMix = clrAdjustBorder;
  2903. } // if( nBorderMetric > 0 )
  2904. COLORREF clrTemp = pClrSurface[ nPixelIdx ];
  2905. clrTemp =
  2906. RGB(
  2907. min(
  2908. 255,
  2909. GetRValue( clrTemp )
  2910. + ( ( GetBValue( clrAdjustMix ) - GetRValue( clrTemp ) ) / 2 ) ),
  2911. min(
  2912. 255,
  2913. GetGValue( clrTemp )
  2914. + ( ( GetGValue( clrAdjustMix ) - GetGValue( clrTemp ) ) / 2 ) ),
  2915. min(
  2916. 255,
  2917. GetBValue( clrTemp )
  2918. + ( ( GetRValue( clrAdjustMix ) - GetBValue( clrTemp ) ) / 2 ) )
  2919. );
  2920. pClrSurface[ nPixelIdx ] =
  2921. CExtBitmap::stat_HLS_Adjust(
  2922. clrTemp,
  2923. 0.0,
  2924. 0.10,
  2925. 0.0
  2926. );
  2927. } // for( int nX = 0; nX < bih.biWidth; nX++, nPixelIdx++ )
  2928. } // for( int nY = 0; nY < bih.biHeight; nY++ )
  2929. } // if( stat_GetBPP() > 8 )
  2930. else
  2931. {
  2932. COLORREF clrDark = GetColor( COLOR_3DSHADOW, this );
  2933. unsigned nPixelIdx = 0;
  2934. for( int nY = 0; nY < nClrSurfaceDY; nY++ )
  2935. {
  2936. for( int nX = 0; nX < nClrSurfaceDX; nX++, nPixelIdx++ )
  2937. {
  2938. if( bTabShape )
  2939. {
  2940. CPoint ptTest( nX, nClrSurfaceDY - nY );
  2941. if( (! rcTabMainArea.PtInRect( ptTest ) )
  2942. && (! rcTabBottomMiddleArea.PtInRect( ptTest ) )
  2943. )
  2944. continue;
  2945. } // if( bTabShape )
  2946. if( ( (nY&0x01) != 0 && (nX&0x01) == 0 )
  2947. || ( (nY&0x01) == 0 && (nX&0x01) != 0 )
  2948. )
  2949. pClrSurface[ nPixelIdx ] = clrDark;
  2950. } // for( int nX = 0; nX < bih.biWidth; nX++, nPixelIdx++ )
  2951. } // for( int nY = 0; nY < bih.biHeight; nY++ )
  2952. } // else from if( stat_GetBPP() > 8 )
  2953. }
  2954. void CExtPaintManagerOffice2003::DockMarker_AdjustHighlightedArea(
  2955. COLORREF * pClrSurface,
  2956. int nClrSurfaceDX,
  2957. int nClrSurfaceDY,
  2958. bool bTabShape,
  2959. bool bTabsAtTop,
  2960. const CRect & rcTabMainArea,
  2961. const CRect & rcTabBottomMiddleArea,
  2962. COLORREF clrAdjustMain, // = COLORREF(-1L)
  2963. COLORREF clrAdjustBorder, // = COLORREF(-1L)
  2964. int nBorderMetric // = 2
  2965. )
  2966. {
  2967. ASSERT_VALID( this );
  2968. ASSERT( nBorderMetric >= 0 );
  2969. if( IsHighContrast() )
  2970. {
  2971. CExtPaintManagerXP::DockMarker_AdjustHighlightedArea(
  2972. pClrSurface,
  2973. nClrSurfaceDX,
  2974. nClrSurfaceDY,
  2975. bTabShape,
  2976. bTabsAtTop,
  2977. rcTabMainArea,
  2978. rcTabBottomMiddleArea,
  2979. clrAdjustMain,
  2980. clrAdjustBorder,
  2981. nBorderMetric
  2982. );
  2983. return;
  2984. }
  2985. if( clrAdjustMain == COLORREF(-1L) && stat_GetBPP() > 8 )
  2986. {
  2987. e_system_theme_t eCurrentTheme = OnQuerySystemTheme();
  2988. if( eCurrentTheme == ThemeLunaBlue
  2989. || eCurrentTheme == ThemeLunaRoyale       // +2.87
  2990. || eCurrentTheme == ThemeVistaOrLaterUX   // +2.87
  2991. || eCurrentTheme == ThemeVistaOrLaterDWM  // +2.87
  2992. )
  2993. clrAdjustMain = RGB( 0, 0, 128 );
  2994. else if( eCurrentTheme == ThemeLunaOlive )
  2995. clrAdjustMain = RGB( 0x0AA, 0x0BB, 0x083 );
  2996. else if( eCurrentTheme == ThemeLunaSilver )
  2997. clrAdjustMain = RGB( 96, 96, 144 );
  2998. }
  2999. CExtPaintManagerXP::DockMarker_AdjustHighlightedArea(
  3000. pClrSurface,
  3001. nClrSurfaceDX,
  3002. nClrSurfaceDY,
  3003. bTabShape,
  3004. bTabsAtTop,
  3005. rcTabMainArea,
  3006. rcTabBottomMiddleArea,
  3007. clrAdjustMain,
  3008. clrAdjustBorder,
  3009. nBorderMetric
  3010. );
  3011. }
  3012. void CExtPaintManager::DockMarker_AdjustHighlightedLayer(
  3013. HWND hWnd,
  3014. int nDX,
  3015. int nDY,
  3016. bool bTabShape,
  3017. bool bTabsAtTop,
  3018. const CRect & rcTabMainArea,
  3019. const CRect & rcTabBottomMiddleArea,
  3020. COLORREF clrAdjustMain, // = COLORREF(-1L)
  3021. COLORREF clrAdjustBorder, // = COLORREF(-1L)
  3022. int nBorderMetric // = 2
  3023. )
  3024. {
  3025. ASSERT_VALID( this );
  3026. ASSERT( hWnd != NULL && ::IsWindow( hWnd ) );
  3027. ASSERT( nBorderMetric >= 0 );
  3028. ASSERT( g_PaintManager.m_pfnUpdateLayeredWindow != NULL );
  3029. ASSERT( nDX > 0 );
  3030. ASSERT( nDY > 0 );
  3031. CWindowDC dcDesktop(NULL);
  3032. BITMAPINFOHEADER bih;
  3033. bih.biSize = sizeof(BITMAPINFOHEADER);
  3034. bih.biWidth = nDX;
  3035. bih.biHeight = nDY;
  3036. bih.biPlanes = 1;
  3037. bih.biBitCount = 32;
  3038. bih.biCompression = BI_RGB;
  3039. bih.biSizeImage = bih.biWidth*bih.biHeight;
  3040. bih.biXPelsPerMeter = 0;
  3041. bih.biYPelsPerMeter = 0;
  3042. bih.biClrUsed = 0;
  3043. bih.biClrImportant = 0;
  3044. COLORREF * pClrSurface = NULL;
  3045. HBITMAP hDIB =
  3046. ::CreateDIBSection(
  3047. dcDesktop.GetSafeHdc(),
  3048. (LPBITMAPINFO)&bih,
  3049. DIB_RGB_COLORS,
  3050. (void **)&pClrSurface,
  3051. NULL,
  3052. NULL
  3053. );
  3054. if( hDIB == NULL )
  3055. {
  3056. ASSERT( FALSE );
  3057. return;
  3058. }
  3059. ASSERT( pClrSurface != NULL );
  3060. CBitmap _bmpLayerData;
  3061. _bmpLayerData.Attach( hDIB );
  3062. CDC dc;
  3063. if( ! dc.CreateCompatibleDC( &dcDesktop ) )
  3064. {
  3065. ASSERT( FALSE );
  3066. return;
  3067. }
  3068. HGDIOBJ hOld = dc.SelectObject( hDIB );
  3069. CRect rcMainArea( 0, 0, nDX, nDY );
  3070. if( bTabShape )
  3071. rcMainArea = rcTabMainArea;
  3072. if( clrAdjustMain == COLORREF(-1L) )
  3073. clrAdjustMain = ::GetSysColor( COLOR_HIGHLIGHT );
  3074. if( m_eStyle2005 == __ES2005_BETA2
  3075. || m_eStyle2005 == __ES2005_RC
  3076. )
  3077. clrAdjustMain = RGB(0,64,196);
  3078. if( nBorderMetric > 0 && clrAdjustBorder == COLORREF(-1L) )
  3079. clrAdjustBorder = ::GetSysColor( COLOR_ACTIVEBORDER );
  3080. unsigned nPixelIdx = 0;
  3081. for( int nY = 0; nY < nDY; nY++ )
  3082. {
  3083. for( int nX = 0; nX < nDX; nX++, nPixelIdx++ )
  3084. {
  3085. if( bTabShape )
  3086. {
  3087. CPoint ptTest( nX, nDY - nY - 1 );
  3088. if( (! rcTabMainArea.PtInRect( ptTest ) )
  3089. && (! rcTabBottomMiddleArea.PtInRect( ptTest ) )
  3090. )
  3091. continue;
  3092. } // if( bTabShape )
  3093. COLORREF clrAdjustMix = clrAdjustMain;
  3094. if( nBorderMetric > 0 )
  3095. {
  3096. CPoint ptTest( nX, nDY - nY - 1 );
  3097. if( bTabShape
  3098. && rcTabBottomMiddleArea.PtInRect( ptTest )
  3099. && (
  3100. ( bTabsAtTop
  3101. ? ( ptTest.y <= ( rcTabBottomMiddleArea.top + nBorderMetric ) )
  3102. : ( ptTest.y >= ( rcTabBottomMiddleArea.bottom - nBorderMetric ) )
  3103. )
  3104. || ptTest.x < (rcTabBottomMiddleArea.left + nBorderMetric)
  3105. || nX >= (rcTabBottomMiddleArea.right - nBorderMetric)
  3106. )
  3107. )
  3108. clrAdjustMix = clrAdjustBorder;
  3109. else if( rcMainArea.PtInRect( ptTest )
  3110. && (
  3111. ( bTabsAtTop
  3112. ? ( ptTest.y > ( rcMainArea.bottom - nBorderMetric ) )
  3113. : ( ptTest.y < ( rcMainArea.top + nBorderMetric ) )
  3114. )
  3115. || ptTest.x < (rcMainArea.left + nBorderMetric)
  3116. || ptTest.x >= (rcMainArea.right - nBorderMetric)
  3117. || (
  3118. ( bTabsAtTop
  3119. ? ( ptTest.y <= ( rcMainArea.top + nBorderMetric ) )
  3120. : ( ptTest.y >= ( rcMainArea.bottom - nBorderMetric ) )
  3121. )
  3122. && ( (!bTabShape)
  3123. || ( bTabShape
  3124. && ( ptTest.x < (rcTabBottomMiddleArea.left + nBorderMetric )
  3125. || ptTest.x >= (rcTabBottomMiddleArea.right - nBorderMetric )
  3126. )
  3127. )
  3128. )
  3129. )
  3130. )
  3131. )
  3132. clrAdjustMix = clrAdjustBorder;
  3133. } // if( nBorderMetric > 0 )
  3134. COLORREF clrTemp =
  3135. //pClrSurface[ nPixelIdx ];
  3136. 0;
  3137. clrTemp =
  3138. RGB(
  3139. min(
  3140. 255,
  3141. GetRValue( clrTemp )
  3142. + ( ( GetBValue( clrAdjustMix ) - GetRValue( clrTemp ) ) / 2 ) ),
  3143. min(
  3144. 255,
  3145. GetGValue( clrTemp )
  3146. + ( ( GetGValue( clrAdjustMix ) - GetGValue( clrTemp ) ) / 2 ) ),
  3147. min(
  3148. 255,
  3149. GetBValue( clrTemp )
  3150. + ( ( GetRValue( clrAdjustMix ) - GetBValue( clrTemp ) ) / 2 ) )
  3151. );
  3152. clrTemp =
  3153. __EXT_MFC_RGBA(
  3154. GetRValue( clrTemp ),
  3155. GetGValue( clrTemp ),
  3156. GetBValue( clrTemp ),
  3157. 128
  3158. );
  3159. pClrSurface[ nPixelIdx ] = clrTemp;
  3160. } // for( int nX = 0; nX < bih.biWidth; nX++, nPixelIdx++ )
  3161. } // for( int nY = 0; nY < bih.biHeight; nY++ )
  3162. CExtPaintManager::CExtPaintManagerAutoPtr::__EXT_MFC_BLENDFUNCTION _bf =
  3163. { __EXT_MFC_AC_SRC_OVER,
  3164. 0,
  3165. 255,
  3166. __EXT_MFC_AC_SRC_ALPHA
  3167. };
  3168. CRect rcWnd;
  3169. ::GetWindowRect( hWnd, &rcWnd );
  3170. CPoint ptSrc( 0, 0 ), ptDst( rcWnd.TopLeft() );
  3171. CSize sizeDst = rcWnd.Size();
  3172. bool bRetVal =
  3173. g_PaintManager.m_pfnUpdateLayeredWindow(
  3174. hWnd,
  3175. dcDesktop,
  3176. &ptDst,
  3177. &sizeDst,
  3178. dc,
  3179. &ptSrc,
  3180. 0,
  3181. &_bf,
  3182. __EXT_MFC_ULW_ALPHA
  3183. ) ? true : false;
  3184. // ASSERT( bRetVal );
  3185. bRetVal;
  3186. dc.SelectObject( hOld );
  3187. }
  3188. void CExtPaintManagerOffice2003::DockMarker_AdjustHighlightedLayer(
  3189. HWND hWnd,
  3190. int nDX,
  3191. int nDY,
  3192. bool bTabShape,
  3193. bool bTabsAtTop,
  3194. const CRect & rcTabMainArea,
  3195. const CRect & rcTabBottomMiddleArea,
  3196. COLORREF clrAdjustMain, // = COLORREF(-1L)
  3197. COLORREF clrAdjustBorder, // = COLORREF(-1L)
  3198. int nBorderMetric // = 2
  3199. )
  3200. {
  3201. ASSERT_VALID( this );
  3202. ASSERT( hWnd != NULL && ::IsWindow( hWnd ) );
  3203. ASSERT( nBorderMetric >= 0 );
  3204. ASSERT( g_PaintManager.m_pfnUpdateLayeredWindow != NULL );
  3205. if( IsHighContrast() )
  3206. {
  3207. CExtPaintManagerXP::DockMarker_AdjustHighlightedLayer(
  3208. hWnd,
  3209. nDX,
  3210. nDY,
  3211. bTabShape,
  3212. bTabsAtTop,
  3213. rcTabMainArea,
  3214. rcTabBottomMiddleArea,
  3215. clrAdjustMain,
  3216. clrAdjustBorder,
  3217. nBorderMetric
  3218. );
  3219. return;
  3220. }
  3221. if( clrAdjustMain == COLORREF(-1L) && stat_GetBPP() > 8 )
  3222. {
  3223. e_system_theme_t eCurrentTheme = OnQuerySystemTheme();
  3224. if( eCurrentTheme == ThemeLunaBlue
  3225. || eCurrentTheme == ThemeLunaRoyale       // +2.87
  3226. || eCurrentTheme == ThemeVistaOrLaterUX   // +2.87
  3227. || eCurrentTheme == ThemeVistaOrLaterDWM  // +2.87
  3228. )
  3229. clrAdjustMain = RGB( 0, 0, 128 );
  3230. else if( eCurrentTheme == ThemeLunaOlive )
  3231. clrAdjustMain = RGB( 0x0AA, 0x0BB, 0x083 );
  3232. else if( eCurrentTheme == ThemeLunaSilver )
  3233. clrAdjustMain = RGB( 96, 96, 144 );
  3234. }
  3235. CExtPaintManagerXP::DockMarker_AdjustHighlightedLayer(
  3236. hWnd,
  3237. nDX,
  3238. nDY,
  3239. bTabShape,
  3240. bTabsAtTop,
  3241. rcTabMainArea,
  3242. rcTabBottomMiddleArea,
  3243. clrAdjustMain,
  3244. clrAdjustBorder,
  3245. nBorderMetric
  3246. );
  3247. }
  3248. BYTE CExtPaintManagerStudio2008::DockMarker_GetAlpha(
  3249. bool bHighlight,
  3250. CObject * pHelperSrc,
  3251. LPARAM lParam // = 0L
  3252. )
  3253. {
  3254. ASSERT_VALID( this );
  3255. ASSERT_VALID( this );
  3256. if( (! g_PaintManager.m_bIsWin2000orLater )
  3257. || stat_GetBPP() < 24
  3258. || IsHighContrast()
  3259. )
  3260. return
  3261. CExtPaintManagerStudio2005::DockMarker_GetAlpha(
  3262. bHighlight,
  3263. pHelperSrc,
  3264. lParam
  3265. );
  3266. return bHighlight ? BYTE(255) : BYTE(144);
  3267. }
  3268. bool CExtPaintManagerStudio2008::DockMarker_IsAdjustBmpsRequired(
  3269. eDockMarkerType_t eDockMarkerType
  3270. ) const
  3271. {
  3272. ASSERT_VALID( this );
  3273. if( (! g_PaintManager.m_bIsWin2000orLater )
  3274. || stat_GetBPP() < 24
  3275. || IsHighContrast()
  3276. )
  3277. return CExtPaintManagerStudio2005::DockMarker_IsAdjustBmpsRequired( eDockMarkerType );
  3278. return false;
  3279. }
  3280. void CExtPaintManagerStudio2008::DockMarker_AdjustBmps(
  3281. eDockMarkerType_t eDockMarkerType,
  3282. CExtBitmap & bmpIn,
  3283. COLORREF clrTransparentIn,
  3284. CExtBitmap & bmpOut,
  3285. COLORREF clrTransparentOut
  3286. )
  3287. {
  3288. ASSERT_VALID( this );
  3289. if( (! g_PaintManager.m_bIsWin2000orLater )
  3290. || stat_GetBPP() < 24
  3291. || IsHighContrast()
  3292. )
  3293. CExtPaintManagerStudio2005::DockMarker_AdjustBmps(
  3294. eDockMarkerType,
  3295. bmpIn,
  3296. clrTransparentIn,
  3297. bmpOut,
  3298. clrTransparentOut
  3299. );
  3300. }
  3301. #endif // (!defined __EXT_MFC_NO_DOCK_MARKERS)
  3302. void CExtPaintManager::Header_GetButtonPadding(
  3303. INT & nButtonPaddingBefore,
  3304. INT & nButtonPaddingAfter,
  3305. INT nColNo,
  3306. INT nColCount,
  3307. CObject * pHelperSrc,
  3308. LPARAM lParam // = 0L
  3309. ) const
  3310. {
  3311. ASSERT_VALID( this );
  3312. nColNo; nColCount; pHelperSrc; lParam;
  3313. nButtonPaddingBefore = nButtonPaddingAfter = 3;
  3314. }
  3315. INT CExtPaintManager::Header_GetDistanceBetweenIconAndSortArrow(
  3316. INT nColNo,
  3317. INT nColCount,
  3318. CObject * pHelperSrc,
  3319. LPARAM lParam // = 0L
  3320. ) const
  3321. {
  3322. ASSERT_VALID( this );
  3323. nColNo; nColCount; pHelperSrc; lParam;
  3324. return 3;
  3325. }
  3326. INT CExtPaintManager::Header_GetDistanceBetweenIconAndText(
  3327. INT nColNo,
  3328. INT nColCount,
  3329. CObject * pHelperSrc,
  3330. LPARAM lParam // = 0L
  3331. ) const
  3332. {
  3333. ASSERT_VALID( this );
  3334. nColNo; nColCount; pHelperSrc; lParam;
  3335. return 3;
  3336. }
  3337. INT CExtPaintManager::Header_GetDistanceBetweenTextAndButton(
  3338. INT nColNo,
  3339. INT nColCount,
  3340. CObject * pHelperSrc,
  3341. LPARAM lParam // = 0L
  3342. ) const
  3343. {
  3344. ASSERT_VALID( this );
  3345. nColNo; nColCount; pHelperSrc; lParam;
  3346. return 3;
  3347. }
  3348. INT CExtPaintManager::Header_GetSortArrowWidth(
  3349. INT nColNo,
  3350. INT nColCount,
  3351. CObject * pHelperSrc,
  3352. LPARAM lParam // = 0L
  3353. ) const
  3354. {
  3355. ASSERT_VALID( this );
  3356. nColNo; nColCount; pHelperSrc; lParam;
  3357. return 15;
  3358. }
  3359. CRect CExtPaintManager::Header_GetItemPadding(
  3360. INT nColNo,
  3361. INT nColCount,
  3362. CObject * pHelperSrc,
  3363. LPARAM lParam // = 0L
  3364. ) const
  3365. {
  3366. ASSERT_VALID( this );
  3367. nColNo; nColCount; pHelperSrc; lParam;
  3368. return CRect( 3, 2, 3, 2 );
  3369. }
  3370. void CExtPaintManager::Header_PaintBackground(
  3371. CDC & dc,
  3372. CRect rc,
  3373. CObject * pHelperSrc,
  3374. LPARAM lParam // = 0L
  3375. )
  3376. {
  3377. ASSERT_VALID( this );
  3378. ASSERT( dc.GetSafeHdc() != NULL );
  3379. COLORREF clrHeaderBackground = GetColor( CLR_3DFACE_OUT, pHelperSrc, lParam );
  3380. dc.FillSolidRect( rc, clrHeaderBackground );
  3381. }
  3382. void CExtPaintManagerXP::Header_PaintBackground(
  3383. CDC & dc,
  3384. CRect rc,
  3385. CObject * pHelperSrc,
  3386. LPARAM lParam // = 0L
  3387. )
  3388. {
  3389. ASSERT_VALID( this );
  3390. ASSERT( dc.GetSafeHdc() != NULL );
  3391. if( IsHighContrast() )
  3392. {
  3393. CExtPaintManager::Header_PaintBackground( dc, rc, pHelperSrc, lParam );
  3394. return;
  3395. }
  3396. COLORREF clrHeaderBackground = GetColor( XPCLR_3DFACE_DARK, pHelperSrc, lParam );
  3397. dc.FillSolidRect( rc, clrHeaderBackground );
  3398. }
  3399. void CExtPaintManagerOffice2003::Header_PaintBackground(
  3400. CDC & dc,
  3401. CRect rc,
  3402. CObject * pHelperSrc,
  3403. LPARAM lParam // = 0L
  3404. )
  3405. {
  3406. ASSERT_VALID( this );
  3407. ASSERT( dc.GetSafeHdc() != NULL );
  3408. if( IsHighContrast() )
  3409. {
  3410. CExtPaintManagerXP::Header_PaintBackground( dc, rc, pHelperSrc, lParam );
  3411. return;
  3412. }
  3413. COLORREF clrHeaderBackground1 = GetColor( XPCLR_3DFACE_NORMAL, pHelperSrc, lParam );
  3414. COLORREF clrHeaderBackground2 = clrHeaderBackground1;
  3415. clrHeaderBackground1 = stat_HLS_Adjust( clrHeaderBackground1, 0.0, +0.05 );
  3416. clrHeaderBackground2 = stat_HLS_Adjust( clrHeaderBackground2, 0.0, -0.25 );
  3417. stat_PaintGradientRect( dc, rc, clrHeaderBackground2, clrHeaderBackground1, true );
  3418. }
  3419. bool CExtPaintManagerNativeXP::stat_PaintHeaderPartUsingUxTheme(
  3420. CDC & dc,
  3421. CRect rc,
  3422. CObject * pHelperSrc,
  3423. LPARAM lParam,
  3424. bool bDrawItemLikeBackground, // = false
  3425. bool bHover, // = false
  3426. bool bPressed // = false
  3427. )
  3428. {
  3429. ASSERT( dc.GetSafeHdc() != NULL );
  3430. lParam;
  3431. if( pHelperSrc == NULL )
  3432. return false;
  3433. ASSERT_VALID( pHelperSrc );
  3434. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  3435. return false;
  3436. HWND hWnd = NULL;
  3437. if( pHelperSrc->IsKindOf( RUNTIME_CLASS(CWnd) ) )
  3438. hWnd = ((CWnd*)pHelperSrc)->GetSafeHwnd();
  3439. if( hWnd == NULL )
  3440. hWnd = ::GetDesktopWindow();
  3441. if( hWnd == NULL )
  3442. return false;
  3443. if( ! g_PaintManager.m_UxTheme.OpenThemeData( hWnd, VSCLASS_HEADER ) != NULL )
  3444. return false;
  3445. bool bRetVal =
  3446. ( g_PaintManager.m_UxTheme.DrawThemeBackground(
  3447. dc.GetSafeHdc(), 
  3448. HP_HEADERITEMRIGHT, 
  3449. HIRS_NORMAL, 
  3450. &rc, 
  3451. &rc
  3452. ) == S_OK ) ? true : false;
  3453. g_PaintManager.m_UxTheme.CloseThemeData( true );
  3454. if( ! bRetVal )
  3455. return false;
  3456. if( ! bDrawItemLikeBackground )
  3457. return true;
  3458. if( ! g_PaintManager.m_UxTheme.OpenThemeData( hWnd, VSCLASS_HEADER ) != NULL )
  3459. return false;
  3460. INT nStateID = HIS_NORMAL;
  3461. if( bPressed )
  3462. nStateID = HIS_PRESSED;
  3463. else if( bHover )
  3464. nStateID = HIS_HOT;
  3465. bRetVal =
  3466. ( g_PaintManager.m_UxTheme.DrawThemeBackground(
  3467. dc.GetSafeHdc(), 
  3468. HP_HEADERITEM, 
  3469. nStateID, 
  3470. &rc, 
  3471. &rc
  3472. ) == S_OK ) ? true : false;
  3473. g_PaintManager.m_UxTheme.CloseThemeData( true );
  3474. return bRetVal;
  3475. }
  3476. void CExtPaintManagerNativeXP::Header_PaintBackground(
  3477. CDC & dc,
  3478. CRect rc,
  3479. CObject * pHelperSrc,
  3480. LPARAM lParam // = 0L
  3481. )
  3482. {
  3483. ASSERT_VALID( this );
  3484. ASSERT( dc.GetSafeHdc() != NULL );
  3485. if( IsHighContrast() )
  3486. {
  3487. CExtPaintManager::Header_PaintBackground( dc, rc, pHelperSrc, lParam );
  3488. return;
  3489. }
  3490. if( ! stat_PaintHeaderPartUsingUxTheme( dc, rc, pHelperSrc, lParam ) )
  3491. CExtPaintManager::Header_PaintBackground( dc, rc, pHelperSrc, lParam );
  3492. }
  3493. void CExtPaintManagerOffice2007_Impl::Header_PaintBackground(
  3494. CDC & dc,
  3495. CRect rc,
  3496. CObject * pHelperSrc,
  3497. LPARAM lParam // = 0L
  3498. )
  3499. {
  3500. ASSERT_VALID( this );
  3501. ASSERT( dc.GetSafeHdc() != NULL );
  3502. if( IsHighContrast() )
  3503. {
  3504. CExtPaintManagerOffice2003::Header_PaintBackground( dc, rc, pHelperSrc, lParam );
  3505. return;
  3506. }
  3507. stat_PaintGradientRect( dc, rc, m_clrGridHeaderBkBottom, m_clrGridHeaderBkTop, true );
  3508. }
  3509. void CExtPaintManager::Header_PaintItem(
  3510. CDC & dc,
  3511. CRect rcItemEntire,
  3512. CRect rcItemData,
  3513. CRect rcIcon,
  3514. CRect rcText,
  3515. CRect rcSortArrow,
  3516. CRect rcButton,
  3517. CRect rcButtonIcon,
  3518. bool bSorted,
  3519. bool bSortedAscending,
  3520. INT nColNo,
  3521. INT nColCount,
  3522. const CExtCmdIcon & iconItem,
  3523. const CExtCmdIcon & iconButton,
  3524. bool bHover,
  3525. bool bPressed,
  3526. bool bButtonEvent,
  3527. __EXT_MFC_SAFE_LPCTSTR strItemText,
  3528. CObject * pHelperSrc,
  3529. LPARAM lParam // = 0L
  3530. )
  3531. {
  3532. ASSERT_VALID( this );
  3533. ASSERT( dc.GetSafeHdc() != NULL );
  3534. nColNo; nColCount; pHelperSrc; lParam;
  3535. rcItemData;
  3536. COLORREF clrLT1 = GetColor( COLOR_3DHIGHLIGHT, pHelperSrc, lParam );
  3537. COLORREF clrRB1 = GetColor( COLOR_3DDKSHADOW,  pHelperSrc, lParam );
  3538. COLORREF clrLT2 = GetColor( COLOR_3DFACE,      pHelperSrc, lParam );
  3539. COLORREF clrRB2 = GetColor( CLR_3DSHADOW_OUT,  pHelperSrc, lParam );
  3540. CRect rcDraw = rcItemEntire;
  3541. if( ! rcButton.IsRectEmpty() )
  3542. rcDraw.right = rcButton.left;
  3543. bool bSwapColors = false;
  3544. if( (!bButtonEvent) && ( bHover || bPressed ) )
  3545. {
  3546. bSwapColors = bPressed;
  3547. if( bPressed && bHover )
  3548. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3549. else if( bPressed )
  3550. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3551. else if( bHover )
  3552. dc.FillRect( &rcDraw, &m_brushLightDefault );
  3553. }
  3554. COLORREF _clrLT1 = bSwapColors ? clrRB1 : clrLT1;
  3555. COLORREF _clrRB1 = bSwapColors ? clrLT1 : clrRB1;
  3556. COLORREF _clrLT2 = bSwapColors ? clrRB2 : clrLT2;
  3557. COLORREF _clrRB2 = bSwapColors ? clrLT2 : clrRB2;
  3558. dc.Draw3dRect( &rcDraw, _clrLT1, _clrRB1 );
  3559. rcDraw.DeflateRect( 1, 1, 1, 1 );
  3560. dc.Draw3dRect( &rcDraw, _clrLT2, _clrRB2 );
  3561. if( (! rcButton.IsRectEmpty() )
  3562. && dc.RectVisible( &rcButton )
  3563. )
  3564. {
  3565. bSwapColors = false;
  3566. rcDraw = rcButton;
  3567. if( bButtonEvent && ( bHover || bPressed ) )
  3568. {
  3569. bSwapColors = bPressed;
  3570. if( bPressed && bHover )
  3571. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3572. else if( bPressed )
  3573. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3574. else if( bHover )
  3575. dc.FillRect( &rcDraw, &m_brushLightDefault );
  3576. }
  3577. _clrLT1 = bSwapColors ? clrRB1 : clrLT1;
  3578. _clrRB1 = bSwapColors ? clrLT1 : clrRB1;
  3579. _clrLT2 = bSwapColors ? clrRB2 : clrLT2;
  3580. _clrRB2 = bSwapColors ? clrLT2 : clrRB2;
  3581. dc.Draw3dRect( &rcDraw, _clrLT1, _clrRB1 );
  3582. rcDraw.DeflateRect( 1, 1, 1, 1 );
  3583. dc.Draw3dRect( &rcDraw, _clrLT2, _clrRB2 );
  3584. if( (! iconButton.IsEmpty() )
  3585. && (! rcButtonIcon.IsRectEmpty() )
  3586. && dc.RectVisible( &rcButtonIcon )
  3587. )
  3588. iconButton.Paint( this, dc, rcButtonIcon );
  3589. }
  3590. if( (! iconItem.IsEmpty() )
  3591. && (! rcIcon.IsRectEmpty() )
  3592. && dc.RectVisible( &rcIcon )
  3593. )
  3594. iconItem.Paint( this, dc, rcIcon );
  3595. if( bSorted
  3596. && (! rcSortArrow.IsRectEmpty() )
  3597. && dc.RectVisible( &rcSortArrow )
  3598. )
  3599. {
  3600. COLORREF ColorValues[4] =
  3601. {
  3602. RGB(0,0,0),
  3603. GetColor( COLOR_3DSHADOW,    pHelperSrc, lParam ),
  3604. GetColor( COLOR_3DHIGHLIGHT, pHelperSrc, lParam ),
  3605. GetColor( COLOR_3DDKSHADOW,  pHelperSrc, lParam ),
  3606. };
  3607. PaintGlyphCentered(
  3608. dc,
  3609. rcSortArrow,
  3610. *( g_DockingCaptionGlyphs[ bSortedAscending ? __DCBT_ARROW_SORT_UP : __DCBT_ARROW_SORT_DOWN ] ),
  3611. ColorValues
  3612. );
  3613. }
  3614. INT nTextLen = ( LPCTSTR(strItemText) != NULL ) ? INT( _tcslen(LPCTSTR(strItemText)) ) : 0;
  3615. if( nTextLen > 0
  3616. && (! rcText.IsRectEmpty() )
  3617. && dc.RectVisible( &rcText )
  3618. )
  3619. {
  3620. COLORREF clrTextColor = GetColor( CLR_TEXT_OUT, pHelperSrc, lParam );
  3621. CFont * pItemFont = & m_FontNormal;
  3622. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3623. COLORREF clrOldText = dc.SetTextColor( clrTextColor );
  3624. CFont * pOldFont = dc.SelectObject( pItemFont );
  3625. dc.DrawText( LPCTSTR(strItemText), nTextLen, (LPRECT)&rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS );
  3626. dc.SelectObject( pOldFont );
  3627. dc.SetTextColor( clrOldText );
  3628. dc.SetBkMode( nOldBkMode );
  3629. }
  3630. }
  3631. void CExtPaintManagerXP::Header_PaintItem(
  3632. CDC & dc,
  3633. CRect rcItemEntire,
  3634. CRect rcItemData,
  3635. CRect rcIcon,
  3636. CRect rcText,
  3637. CRect rcSortArrow,
  3638. CRect rcButton,
  3639. CRect rcButtonIcon,
  3640. bool bSorted,
  3641. bool bSortedAscending,
  3642. INT nColNo,
  3643. INT nColCount,
  3644. const CExtCmdIcon & iconItem,
  3645. const CExtCmdIcon & iconButton,
  3646. bool bHover,
  3647. bool bPressed,
  3648. bool bButtonEvent,
  3649. __EXT_MFC_SAFE_LPCTSTR strItemText,
  3650. CObject * pHelperSrc,
  3651. LPARAM lParam // = 0L
  3652. )
  3653. {
  3654. ASSERT_VALID( this );
  3655. ASSERT( dc.GetSafeHdc() != NULL );
  3656. if( IsHighContrast() )
  3657. {
  3658. CExtPaintManager::Header_PaintItem(
  3659. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3660. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3661. strItemText, pHelperSrc, lParam
  3662. );
  3663. return;
  3664. }
  3665. COLORREF clrLT1 = GetColor( COLOR_3DHIGHLIGHT, pHelperSrc, lParam );
  3666. COLORREF clrRB1 = GetColor( COLOR_3DSHADOW,  pHelperSrc, lParam );
  3667. CRect rcDraw = rcItemEntire;
  3668. if( ! rcButton.IsRectEmpty() )
  3669. rcDraw.right = rcButton.left;
  3670. bool bDrawBorder = true;
  3671. if( (!bButtonEvent) && ( bHover || bPressed ) )
  3672. {
  3673. bDrawBorder = !bPressed;
  3674. if( bPressed && bHover )
  3675. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3676. else if( bPressed )
  3677. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3678. else if( bHover )
  3679. dc.FillRect( &rcDraw, &m_brushLighterDefault );
  3680. }
  3681. if( bDrawBorder )
  3682. dc.Draw3dRect( &rcDraw, clrLT1, clrRB1 );
  3683. if( (! rcButton.IsRectEmpty() )
  3684. && dc.RectVisible( &rcButton )
  3685. )
  3686. {
  3687. bDrawBorder = true;
  3688. rcDraw = rcButton;
  3689. if( bButtonEvent && ( bHover || bPressed ) )
  3690. {
  3691. bDrawBorder = !bPressed;
  3692. if( bPressed && bHover )
  3693. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3694. else if( bPressed )
  3695. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3696. else if( bHover )
  3697. dc.FillRect( &rcDraw, &m_brushLighterDefault );
  3698. }
  3699. if( bDrawBorder )
  3700. dc.Draw3dRect( &rcDraw, clrLT1, clrRB1 );
  3701. if( (! iconButton.IsEmpty() )
  3702. && (! rcButtonIcon.IsRectEmpty() )
  3703. && dc.RectVisible( &rcButtonIcon )
  3704. )
  3705. iconButton.Paint( this, dc, rcButtonIcon );
  3706. }
  3707. if( (! iconItem.IsEmpty() )
  3708. && (! rcIcon.IsRectEmpty() )
  3709. && dc.RectVisible( &rcIcon )
  3710. )
  3711. iconItem.Paint( this, dc, rcIcon );
  3712. if( bSorted
  3713. && (! rcSortArrow.IsRectEmpty() )
  3714. && dc.RectVisible( &rcSortArrow )
  3715. )
  3716. {
  3717. COLORREF clr =
  3718. GetColor(
  3719. ( bPressed && (!bButtonEvent) ) ? COLOR_3DHIGHLIGHT : COLOR_3DSHADOW,
  3720. pHelperSrc,
  3721. lParam
  3722. );
  3723. COLORREF ColorValues[2] =
  3724. {
  3725. RGB(0,0,0),
  3726. clr,
  3727. };
  3728. PaintGlyphCentered(
  3729. dc,
  3730. rcSortArrow,
  3731. *( g_DockingCaptionGlyphs[ bSortedAscending ? __DCBT_ARROW_UP : __DCBT_ARROW_DOWN ] ),
  3732. ColorValues
  3733. );
  3734. }
  3735. INT nTextLen = ( LPCTSTR(strItemText) != NULL ) ? INT( _tcslen(LPCTSTR(strItemText)) ) : 0;
  3736. if( nTextLen > 0
  3737. && (! rcText.IsRectEmpty() )
  3738. && dc.RectVisible( &rcText )
  3739. )
  3740. {
  3741. COLORREF clrTextColor = GetColor( CLR_TEXT_OUT, pHelperSrc, lParam );
  3742. CFont * pItemFont = & m_FontNormal;
  3743. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3744. COLORREF clrOldText = dc.SetTextColor( clrTextColor );
  3745. CFont * pOldFont = dc.SelectObject( pItemFont );
  3746. dc.DrawText( LPCTSTR(strItemText), nTextLen, (LPRECT)&rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS );
  3747. dc.SelectObject( pOldFont );
  3748. dc.SetTextColor( clrOldText );
  3749. dc.SetBkMode( nOldBkMode );
  3750. }
  3751. }
  3752. void CExtPaintManagerOffice2003::Header_PaintItem(
  3753. CDC & dc,
  3754. CRect rcItemEntire,
  3755. CRect rcItemData,
  3756. CRect rcIcon,
  3757. CRect rcText,
  3758. CRect rcSortArrow,
  3759. CRect rcButton,
  3760. CRect rcButtonIcon,
  3761. bool bSorted,
  3762. bool bSortedAscending,
  3763. INT nColNo,
  3764. INT nColCount,
  3765. const CExtCmdIcon & iconItem,
  3766. const CExtCmdIcon & iconButton,
  3767. bool bHover,
  3768. bool bPressed,
  3769. bool bButtonEvent,
  3770. __EXT_MFC_SAFE_LPCTSTR strItemText,
  3771. CObject * pHelperSrc,
  3772. LPARAM lParam // = 0L
  3773. )
  3774. {
  3775. ASSERT_VALID( this );
  3776. ASSERT( dc.GetSafeHdc() != NULL );
  3777. if( IsHighContrast() )
  3778. {
  3779. CExtPaintManagerXP::Header_PaintItem(
  3780. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3781. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3782. strItemText, pHelperSrc, lParam
  3783. );
  3784. return;
  3785. }
  3786. CExtPaintManagerXP::Header_PaintItem(
  3787. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3788. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3789. strItemText, pHelperSrc, lParam
  3790. );
  3791. }
  3792. void CExtPaintManagerNativeXP::Header_PaintItem(
  3793. CDC & dc,
  3794. CRect rcItemEntire,
  3795. CRect rcItemData,
  3796. CRect rcIcon,
  3797. CRect rcText,
  3798. CRect rcSortArrow,
  3799. CRect rcButton,
  3800. CRect rcButtonIcon,
  3801. bool bSorted,
  3802. bool bSortedAscending,
  3803. INT nColNo,
  3804. INT nColCount,
  3805. const CExtCmdIcon & iconItem,
  3806. const CExtCmdIcon & iconButton,
  3807. bool bHover,
  3808. bool bPressed,
  3809. bool bButtonEvent,
  3810. __EXT_MFC_SAFE_LPCTSTR strItemText,
  3811. CObject * pHelperSrc,
  3812. LPARAM lParam // = 0L
  3813. )
  3814. {
  3815. ASSERT_VALID( this );
  3816. ASSERT( dc.GetSafeHdc() != NULL );
  3817. if( IsHighContrast() )
  3818. {
  3819. CExtPaintManager::Header_PaintItem(
  3820. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3821. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3822. strItemText, pHelperSrc, lParam
  3823. );
  3824. return;
  3825. }
  3826. COLORREF clrLT1 = GetColor( COLOR_3DHIGHLIGHT, pHelperSrc, lParam );
  3827. COLORREF clrRB1 = GetColor( COLOR_3DSHADOW,  pHelperSrc, lParam );
  3828. CRect rcDraw = rcItemEntire;
  3829. if( ! rcButton.IsRectEmpty() )
  3830. rcDraw.right = rcButton.left;
  3831. if( ! stat_PaintHeaderPartUsingUxTheme(
  3832. dc, rcDraw, pHelperSrc, lParam, true,
  3833. bHover && (!bButtonEvent),
  3834. bPressed && (!bButtonEvent) )
  3835. )
  3836. {
  3837. bool bDrawBorder = true;
  3838. if( (!bButtonEvent) && ( bHover || bPressed ) )
  3839. {
  3840. bDrawBorder = !bPressed;
  3841. if( bPressed && bHover )
  3842. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3843. else if( bPressed )
  3844. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3845. else if( bHover )
  3846. dc.FillRect( &rcDraw, &m_brushLighterDefault );
  3847. }
  3848. if( bDrawBorder )
  3849. dc.Draw3dRect( &rcDraw, clrLT1, clrRB1 );
  3850. }
  3851. if( (! rcButton.IsRectEmpty() )
  3852. && dc.RectVisible( &rcButton )
  3853. )
  3854. {
  3855. rcDraw = rcButton;
  3856. if( ! stat_PaintHeaderPartUsingUxTheme(
  3857. dc, rcDraw, pHelperSrc, lParam, true,
  3858. bHover && bButtonEvent,
  3859. bPressed && bButtonEvent
  3860. )
  3861. )
  3862. {
  3863. bool bDrawBorder = true;
  3864. if( bButtonEvent && ( bHover || bPressed ) )
  3865. {
  3866. bDrawBorder = !bPressed;
  3867. if( bPressed && bHover )
  3868. dc.FillRect( &rcDraw, &m_brushDarkerDefault );
  3869. else if( bPressed )
  3870. dc.FillRect( &rcDraw, &m_brushDarkDefault );
  3871. else if( bHover )
  3872. dc.FillRect( &rcDraw, &m_brushLighterDefault );
  3873. }
  3874. if( bDrawBorder )
  3875. dc.Draw3dRect( &rcDraw, clrLT1, clrRB1 );
  3876. }
  3877. if( (! iconButton.IsEmpty() )
  3878. && (! rcButtonIcon.IsRectEmpty() )
  3879. && dc.RectVisible( &rcButtonIcon )
  3880. )
  3881. iconButton.Paint( this, dc, rcButtonIcon );
  3882. }
  3883. if( (! iconItem.IsEmpty() )
  3884. && (! rcIcon.IsRectEmpty() )
  3885. && dc.RectVisible( &rcIcon )
  3886. )
  3887. iconItem.Paint( this, dc, rcIcon );
  3888. if( bSorted
  3889. && (! rcSortArrow.IsRectEmpty() )
  3890. && dc.RectVisible( &rcSortArrow )
  3891. )
  3892. {
  3893. COLORREF ColorValues[2] =
  3894. {
  3895. RGB(0,0,0),
  3896. GetColor( COLOR_3DSHADOW, pHelperSrc, lParam ),
  3897. };
  3898. PaintGlyphCentered(
  3899. dc,
  3900. rcSortArrow,
  3901. *( g_DockingCaptionGlyphs[ bSortedAscending ? __DCBT_ARROW_UP : __DCBT_ARROW_DOWN ] ),
  3902. ColorValues
  3903. );
  3904. }
  3905. INT nTextLen = ( LPCTSTR(strItemText) != NULL ) ? INT( _tcslen(LPCTSTR(strItemText)) ) : 0;
  3906. if( nTextLen > 0
  3907. && (! rcText.IsRectEmpty() )
  3908. && dc.RectVisible( &rcText )
  3909. )
  3910. {
  3911. COLORREF clrTextColor = GetColor( CLR_TEXT_OUT, pHelperSrc, lParam );
  3912. CFont * pItemFont = & m_FontNormal;
  3913. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3914. COLORREF clrOldText = dc.SetTextColor( clrTextColor );
  3915. CFont * pOldFont = dc.SelectObject( pItemFont );
  3916. dc.DrawText( LPCTSTR(strItemText), nTextLen, (LPRECT)&rcText, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS );
  3917. dc.SelectObject( pOldFont );
  3918. dc.SetTextColor( clrOldText );
  3919. dc.SetBkMode( nOldBkMode );
  3920. }
  3921. }
  3922. void CExtPaintManagerOffice2007_Impl::Header_PaintItem(
  3923. CDC & dc,
  3924. CRect rcItemEntire,
  3925. CRect rcItemData,
  3926. CRect rcIcon,
  3927. CRect rcText,
  3928. CRect rcSortArrow,
  3929. CRect rcButton,
  3930. CRect rcButtonIcon,
  3931. bool bSorted,
  3932. bool bSortedAscending,
  3933. INT nColNo,
  3934. INT nColCount,
  3935. const CExtCmdIcon & iconItem,
  3936. const CExtCmdIcon & iconButton,
  3937. bool bHover,
  3938. bool bPressed,
  3939. bool bButtonEvent,
  3940. __EXT_MFC_SAFE_LPCTSTR strItemText,
  3941. CObject * pHelperSrc,
  3942. LPARAM lParam // = 0L
  3943. )
  3944. {
  3945. ASSERT_VALID( this );
  3946. ASSERT( dc.GetSafeHdc() != NULL );
  3947. if( IsHighContrast() )
  3948. {
  3949. CExtPaintManagerOffice2003::Header_PaintItem(
  3950. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3951. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3952. strItemText, pHelperSrc, lParam
  3953. );
  3954. return;
  3955. }
  3956. CExtPaintManagerOffice2003::Header_PaintItem(
  3957. dc, rcItemEntire, rcItemData, rcIcon, rcText, rcSortArrow, rcButton, rcButtonIcon,
  3958. bSorted, bSortedAscending, nColNo, nColCount, iconItem, iconButton, bHover, bPressed, bButtonEvent,
  3959. strItemText, pHelperSrc, lParam
  3960. );
  3961. }