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

界面编程

开发平台:

Visual C++

  1. COLORREF clrForceTabBorderRB, // = COLORREF(-1L)
  2. COLORREF clrForceTabSeparator, // = COLORREF(-1L)
  3. bool bDwmMode // = false
  4. )
  5. {
  6. ASSERT_VALID( this );
  7. ASSERT( dc.GetSafeHdc() != NULL );
  8. CExtCmdIcon * pIconTabItemCloseButton = NULL;
  9. CExtCmdIcon::e_paint_type_t ePaintStateITICB =
  10. (CExtCmdIcon::e_paint_type_t) CExtCmdIcon::__PAINT_INVISIBLE;
  11. CRect rcTabItemCloseButton( 0, 0, 0, 0 );
  12. CExtBarButton * pTBB = NULL;
  13. CExtTabWnd * pTabs = NULL;
  14. CExtTabWnd::TAB_ITEM_INFO * pTII = NULL;
  15. bool bNoPrefix = false;
  16. if( pHelperSrc != NULL )
  17. {
  18. pTabs = DYNAMIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  19. if( pTabs != NULL )
  20. {
  21. ASSERT_VALID( pTabs );
  22. pTII = pTabs->ItemGet( LONG( lParam ) );
  23. ASSERT( pTII != NULL );
  24. ASSERT_VALID( pTII );
  25. pIconTabItemCloseButton =
  26. pTabs->OnTabWndQueryItemCloseButtonShape( pTII );
  27. if( pIconTabItemCloseButton != NULL )
  28. {
  29. rcTabItemCloseButton = pTII->CloseButtonRectGet();
  30. ePaintStateITICB = (CExtCmdIcon::e_paint_type_t)
  31. pTabs->OnTabWndQueryItemCloseButtonPaintState( pTII );
  32. } // if( pIconTabItemCloseButton != NULL )
  33. bNoPrefix = ( ( pTabs->GetTabWndStyleEx() & __ETWS_EX_NO_PREFIX ) != 0 ) ? true : false;
  34. } // if( pTabs != NULL )
  35. else
  36. {
  37. pTBB = DYNAMIC_DOWNCAST( CExtBarButton, pHelperSrc );
  38. #ifdef _DEBUG
  39. if( pTBB != NULL )
  40. {
  41. ASSERT_VALID( pTBB );
  42. } // if( pTBB != NULL )
  43. #endif // _DEBUG
  44. } // else from if( pTabs != NULL )
  45. } // if( pHelperSrc != NULL )
  46. bool bEnabled = true;
  47. if( pTII != NULL )
  48. bEnabled = pTII->EnabledGet();
  49. else if( pTBB != NULL )
  50. bEnabled = pTBB->IsEnabled();
  51. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  52. if( pTII != NULL )
  53. {
  54. CObject * pObject = pTII->EventProviderGet();
  55. if( pObject != NULL )
  56. {
  57. CExtDynamicControlBar * pBar = DYNAMIC_DOWNCAST( CExtDynamicControlBar, pObject );
  58. if( pBar != NULL )
  59. {
  60. bool bFlashCaptionHighlightedState = false;
  61. if( pBar->FlashCaptionIsInProgress( &bFlashCaptionHighlightedState ) )
  62. {
  63. if( bFlashCaptionHighlightedState )
  64. {
  65. clrForceText = pBar->m_clrFlashCaptionText;
  66. clrForceTabBk = pBar->m_clrFlashCaptionBackground;
  67. bSelected = true;
  68. }
  69. }
  70. }
  71. }
  72. }
  73. #endif// (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  74. COLORREF clrText = clrForceText;
  75. if( clrText == COLORREF(-1L) )
  76. {
  77. if( bEnabled ) 
  78. {
  79. clrText =
  80. GetColor(
  81. (bSelected && !bGroupedMode)
  82. ? COLOR_BTNTEXT
  83. : ( bGroupedMode
  84. ? COLOR_BTNTEXT
  85. : COLOR_3DHILIGHT
  86. )
  87. ,
  88. pHelperSrc,
  89. lParam 
  90. );
  91. }
  92. else
  93. {
  94. clrText =
  95. GetColor(
  96. (bSelected && !bGroupedMode)
  97. ? CLR_TEXT_DISABLED
  98. : ( bGroupedMode ? CLR_TEXT_DISABLED : COLOR_3DFACE )
  99. ,
  100. pHelperSrc,
  101. lParam 
  102. );
  103. }
  104. }
  105. COLORREF clrTabBk = clrForceTabBk;
  106. if( clrTabBk == COLORREF(-1L) )
  107. clrTabBk =
  108. GetColor(
  109. COLOR_BTNFACE,
  110. pHelperSrc,
  111. lParam
  112. );
  113. COLORREF clrTabBorderLT = clrForceTabBorderLT;
  114. if( clrTabBorderLT == COLORREF(-1L) )
  115. clrTabBorderLT =
  116. GetColor(
  117. bGroupedMode
  118. ? COLOR_3DSHADOW
  119. : COLOR_3DHILIGHT
  120. ,
  121. pHelperSrc,
  122. lParam 
  123. );
  124. COLORREF clrTabBorderRB = clrForceTabBorderRB;
  125. if( clrTabBorderRB == COLORREF(-1L) )
  126. clrTabBorderRB =
  127. GetColor(
  128. bGroupedMode
  129. ? COLOR_3DSHADOW
  130. : COLOR_3DDKSHADOW
  131. ,
  132. pHelperSrc,
  133. lParam 
  134. );
  135. COLORREF clrTabSeparator = clrForceTabSeparator;
  136. if( clrTabSeparator == COLORREF(-1L) )
  137. clrTabSeparator =
  138. GetColor(
  139. bGroupedMode
  140. ? COLOR_3DSHADOW
  141. : COLOR_3DLIGHT
  142. ,
  143. pHelperSrc,
  144. lParam 
  145. );
  146. bool bDrawIcon = (
  147. pIcon != NULL 
  148. && (!pIcon->IsEmpty()) 
  149. && ( pTabs == NULL || (pTabs->GetTabWndStyle()&__ETWS_HIDE_ICONS) == 0  )
  150. );
  151. CExtPaintManager::stat_PaintTabItemImpl(
  152. dc,
  153. rcTabItemsArea,
  154. bTopLeft,
  155. bHorz,
  156. bSelected,
  157. bEnabled,
  158. bCenteredText,
  159. bGroupedMode,
  160. bInGroupActive,
  161. bInvertedVerticalMode,
  162. bDrawIcon,
  163. rcEntireItem,
  164. sizeTextMeasured,
  165. pFont,
  166. sText,
  167. bNoPrefix,
  168. pIcon,
  169. pIconTabItemCloseButton,
  170. INT(ePaintStateITICB),
  171. rcTabItemCloseButton,
  172. clrText,
  173. clrTabBk,
  174. clrTabBorderLT,
  175. clrTabBorderRB,
  176. clrTabSeparator,
  177. ( pTBB != NULL ) ? false : true,
  178. pHelperSrc,
  179. bDwmMode
  180. );
  181. }
  182. void CExtPaintManagerXP::PaintTabItem(
  183. CDC & dc,
  184. CRect & rcTabItemsArea,
  185. bool bTopLeft,
  186. bool bHorz,
  187. bool bSelected,
  188. bool bCenteredText,
  189. bool bGroupedMode,
  190. bool bInGroupActive,
  191. bool bInvertedVerticalMode,
  192. const CRect & rcEntireItem,
  193. CSize sizeTextMeasured,
  194. CFont * pFont,
  195. __EXT_MFC_SAFE_LPCTSTR sText,
  196. CExtCmdIcon * pIcon,
  197. CObject * pHelperSrc,
  198. LPARAM lParam, // = 0L
  199. COLORREF clrForceText, // = COLORREF(-1L)
  200. COLORREF clrForceTabBk, // = COLORREF(-1L)
  201. COLORREF clrForceTabBorderLT, // = COLORREF(-1L)
  202. COLORREF clrForceTabBorderRB, // = COLORREF(-1L)
  203. COLORREF clrForceTabSeparator, // = COLORREF(-1L)
  204. bool bDwmMode // = false
  205. )
  206. {
  207. ASSERT_VALID( this );
  208. ASSERT( dc.GetSafeHdc() != NULL );
  209. CExtCmdIcon * pIconTabItemCloseButton = NULL;
  210. CExtCmdIcon::e_paint_type_t ePaintStateITICB =
  211. (CExtCmdIcon::e_paint_type_t) CExtCmdIcon::__PAINT_INVISIBLE;
  212. CRect rcTabItemCloseButton( 0, 0, 0, 0 );
  213. CExtBarButton * pTBB = NULL;
  214. CExtTabWnd * pTabs = NULL;
  215. CExtTabWnd::TAB_ITEM_INFO * pTII = NULL;
  216. bool bNoPrefix = false;
  217. if( pHelperSrc != NULL )
  218. {
  219. pTabs = DYNAMIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  220. if( pTabs != NULL )
  221. {
  222. ASSERT_VALID( pTabs );
  223. pTII = pTabs->ItemGet( LONG( lParam ) );
  224. ASSERT( pTII != NULL );
  225. ASSERT_VALID( pTII );
  226. pIconTabItemCloseButton =
  227. pTabs->OnTabWndQueryItemCloseButtonShape( pTII );
  228. if( pIconTabItemCloseButton != NULL )
  229. {
  230. rcTabItemCloseButton = pTII->CloseButtonRectGet();
  231. ePaintStateITICB = (CExtCmdIcon::e_paint_type_t)
  232. pTabs->OnTabWndQueryItemCloseButtonPaintState( pTII );
  233. } // if( pIconTabItemCloseButton != NULL )
  234. bNoPrefix = ( ( pTabs->GetTabWndStyleEx() & __ETWS_EX_NO_PREFIX ) != 0 ) ? true : false;
  235. } // if( pTabs != NULL )
  236. else
  237. {
  238. pTBB = DYNAMIC_DOWNCAST( CExtBarButton, pHelperSrc );
  239. #ifdef _DEBUG
  240. if( pTBB != NULL )
  241. {
  242. ASSERT_VALID( pTBB );
  243. } // if( pTBB != NULL )
  244. #endif // _DEBUG
  245. } // else from if( pTabs != NULL )
  246. } // if( pHelperSrc != NULL )
  247. bool bEnabled = true;
  248. if( pTII != NULL )
  249. bEnabled = pTII->EnabledGet();
  250. else if( pTBB != NULL )
  251. bEnabled = pTBB->IsEnabled();
  252. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  253. if( pTII != NULL )
  254. {
  255. CObject * pObject = pTII->EventProviderGet();
  256. if( pObject != NULL )
  257. {
  258. CExtDynamicControlBar * pBar = DYNAMIC_DOWNCAST( CExtDynamicControlBar, pObject );
  259. if( pBar != NULL )
  260. {
  261. bool bFlashCaptionHighlightedState = false;
  262. if( pBar->FlashCaptionIsInProgress( &bFlashCaptionHighlightedState ) )
  263. {
  264. if( bFlashCaptionHighlightedState )
  265. {
  266. clrForceText = pBar->m_clrFlashCaptionText;
  267. clrForceTabBk = pBar->m_clrFlashCaptionBackground;
  268. bSelected = true;
  269. }
  270. }
  271. }
  272. }
  273. }
  274. #endif// (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  275. COLORREF clrText = clrForceText;
  276. if( clrText == COLORREF(-1L) )
  277. {
  278. if( bEnabled ) 
  279. clrText = GetColor( ( bSelected || bGroupedMode ) ? COLOR_BTNTEXT : COLOR_3DSHADOW, pHelperSrc, lParam );
  280. else
  281. clrText = GetColor( CLR_TEXT_DISABLED, pHelperSrc, lParam  );
  282. }
  283. COLORREF clrTabBk = clrForceTabBk;
  284. if( clrTabBk == COLORREF(-1L) )
  285. clrTabBk = GetColor( bGroupedMode ? COLOR_3DFACE : XPCLR_3DFACE_DARK , pHelperSrc, lParam );
  286. COLORREF clrTabBorderLT = clrForceTabBorderLT;
  287. if( clrTabBorderLT == COLORREF(-1L) )
  288. clrTabBorderLT = GetColor( bGroupedMode ? COLOR_3DSHADOW : COLOR_3DHILIGHT, pHelperSrc, lParam );
  289. COLORREF clrTabBorderRB = clrForceTabBorderRB;
  290. if( clrTabBorderRB == COLORREF(-1L) )
  291. clrTabBorderRB = GetColor( bGroupedMode ? COLOR_3DSHADOW : COLOR_3DDKSHADOW, pHelperSrc, lParam  );
  292. COLORREF clrTabSeparator = clrForceTabSeparator;
  293. if( clrTabSeparator == COLORREF(-1L) )
  294. clrTabSeparator = GetColor( COLOR_3DSHADOW, pHelperSrc, lParam  );
  295. bool bDrawIcon = (
  296. pIcon != NULL 
  297. && (!pIcon->IsEmpty()) 
  298. && ( pTabs == NULL || (pTabs->GetTabWndStyle()&__ETWS_HIDE_ICONS) == 0  ) 
  299. );
  300. CExtPaintManager::stat_PaintTabItemImpl(
  301. dc,
  302. rcTabItemsArea,
  303. bTopLeft,
  304. bHorz,
  305. bSelected,
  306. bEnabled,
  307. bCenteredText,
  308. bGroupedMode,
  309. bInGroupActive,
  310. bInvertedVerticalMode,
  311. bDrawIcon,
  312. rcEntireItem,
  313. sizeTextMeasured,
  314. pFont,
  315. sText,
  316. bNoPrefix,
  317. pIcon,
  318. pIconTabItemCloseButton,
  319. INT(ePaintStateITICB),
  320. rcTabItemCloseButton,
  321. clrText,
  322. clrTabBk,
  323. clrTabBorderLT,
  324. clrTabBorderRB,
  325. clrTabSeparator,
  326. ( pTBB != NULL ) ? false : true,
  327. pHelperSrc,
  328. bDwmMode
  329. );
  330. }
  331. void CExtPaintManager::PaintTabClientArea(
  332. CDC & dc,
  333. CRect & rcClient,
  334. CRect & rcTabItemsArea,
  335. CRect & rcTabNearBorderArea,
  336. DWORD dwOrientation,
  337. bool bGroupedMode,
  338. CObject * pHelperSrc,
  339. LPARAM lParam // = 0L
  340. )
  341. {
  342. ASSERT_VALID( this );
  343. ASSERT( dc.GetSafeHdc() != NULL );
  344. int idxClrTabNearMargin = COLOR_3DDKSHADOW;
  345. switch( dwOrientation )
  346. {
  347. case __ETWS_ORIENT_TOP:
  348. idxClrTabNearMargin = COLOR_3DHILIGHT;
  349. break;
  350. case __ETWS_ORIENT_BOTTOM:
  351. break;
  352. case __ETWS_ORIENT_LEFT:
  353. idxClrTabNearMargin = COLOR_3DHILIGHT;
  354. break;
  355. case __ETWS_ORIENT_RIGHT:
  356. break;
  357. #ifdef _DEBUG
  358. default:
  359. ASSERT( FALSE );
  360. break;
  361. #endif // _DEBUG
  362. } // switch( dwOrientation )
  363. COLORREF clrTabItemsAreaBk =
  364. GetColor(
  365. ( bGroupedMode || IsHighContrast() )
  366. ? COLOR_3DFACE 
  367. : COLOR_3DSHADOW, 
  368. pHelperSrc, 
  369. lParam 
  370. );
  371. COLORREF clrTabNearBorderAreaBk =
  372. GetColor( COLOR_3DFACE, pHelperSrc, lParam );
  373. COLORREF clrTabNearMargin = 
  374. GetColor( idxClrTabNearMargin, pHelperSrc, lParam );
  375. CExtPaintManager::stat_PaintTabClientAreaImpl(
  376. dc,
  377. rcClient,
  378. rcTabItemsArea,
  379. rcTabNearBorderArea,
  380. dwOrientation,
  381. bGroupedMode,
  382. clrTabItemsAreaBk,
  383. clrTabNearBorderAreaBk,
  384. clrTabNearMargin
  385. );
  386. }
  387. bool CExtPaintManager::QueryTabWndHoverChangingRedraw(
  388. const CExtTabWnd * pWndTab,
  389. LPARAM lParam // = 0L
  390. )
  391. {
  392. ASSERT_VALID( this );
  393. ASSERT_VALID( pWndTab );
  394. pWndTab;
  395. lParam;
  396. return false;
  397. }
  398. bool CExtPaintManagerNativeXP::QueryTabWndHoverChangingRedraw(
  399. const CExtTabWnd * pWndTab,
  400. LPARAM lParam // = 0L
  401. )
  402. {
  403. ASSERT_VALID( this );
  404. ASSERT_VALID( pWndTab );
  405. bool bGroupedMode =
  406. (pWndTab->GetTabWndStyle() & __ETWS_GROUPED) ? true : false;
  407. if( bGroupedMode
  408. || (! g_PaintManager.m_UxTheme.IsControlsThemed() )
  409. )
  410. {
  411. return 
  412. CExtPaintManager::QueryTabWndHoverChangingRedraw(
  413. pWndTab,
  414. lParam
  415. );
  416. }
  417. return true;
  418. }
  419. void CExtPaintManagerXP::PaintTabClientArea(
  420. CDC & dc,
  421. CRect & rcClient,
  422. CRect & rcTabItemsArea,
  423. CRect & rcTabNearBorderArea,
  424. DWORD dwOrientation,
  425. bool bGroupedMode,
  426. CObject * pHelperSrc,
  427. LPARAM lParam // = 0L
  428. )
  429. {
  430. ASSERT_VALID( this );
  431. ASSERT( dc.GetSafeHdc() != NULL );
  432. int idxClrTabNearMargin = COLOR_3DSHADOW;
  433. switch( dwOrientation )
  434. {
  435. case __ETWS_ORIENT_TOP:
  436. idxClrTabNearMargin = COLOR_3DHILIGHT;
  437. break;
  438. case __ETWS_ORIENT_BOTTOM:
  439. break;
  440. case __ETWS_ORIENT_LEFT:
  441. idxClrTabNearMargin = COLOR_3DHILIGHT;
  442. break;
  443. case __ETWS_ORIENT_RIGHT:
  444. break;
  445. #ifdef _DEBUG
  446. default:
  447. ASSERT( FALSE );
  448. break;
  449. #endif // _DEBUG
  450. } // switch( dwOrientation )
  451. COLORREF clrTabItemsAreaBk =
  452. ( ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) > 8 )
  453. ? GetColor( XPCLR_3DFACE_NORMAL, pHelperSrc, lParam )
  454. : GetColor( XPCLR_3DFACE_DARK, pHelperSrc, lParam )
  455. ;
  456. COLORREF clrTabNearBorderAreaBk =
  457. GetColor( XPCLR_3DFACE_DARK, pHelperSrc, lParam );
  458. COLORREF clrTabNearMargin = 
  459. GetColor( idxClrTabNearMargin, pHelperSrc, lParam );
  460. CExtPaintManager::stat_PaintTabClientAreaImpl(
  461. dc,
  462. rcClient,
  463. rcTabItemsArea,
  464. rcTabNearBorderArea,
  465. dwOrientation,
  466. bGroupedMode,
  467. clrTabItemsAreaBk,
  468. clrTabNearBorderAreaBk,
  469. clrTabNearMargin
  470. );
  471. }
  472. void CExtPaintManagerOffice2003::PaintTabClientArea(
  473. CDC & dc,
  474. CRect & rcClient,
  475. CRect & rcTabItemsArea,
  476. CRect & rcTabNearBorderArea,
  477. DWORD dwOrientation,
  478. bool bGroupedMode,
  479. CObject * pHelperSrc,
  480. LPARAM lParam // = 0L
  481. )
  482. {
  483. ASSERT_VALID( this );
  484. ASSERT( dc.GetSafeHdc() != NULL );
  485. if( IsHighContrast() )
  486. {
  487. CExtPaintManagerXP::PaintTabClientArea(
  488. dc,
  489. rcClient,
  490. rcTabItemsArea,
  491. rcTabNearBorderArea,
  492. dwOrientation,
  493. bGroupedMode,
  494. pHelperSrc,
  495. lParam
  496. );
  497. return;
  498. }
  499. bool bFrameBackground = false;
  500. if( pHelperSrc != NULL
  501. && pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtTabWnd))
  502. && ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) > 8
  503. )
  504. {
  505. CExtTabWnd * pExtTabWnd = DYNAMIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  506. if( pExtTabWnd != NULL
  507. && ( pExtTabWnd->m_bReflectParentSizing
  508. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  509. || pExtTabWnd->_IsMdiTabCtrl()
  510. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  511. )
  512. )
  513. bFrameBackground = true;
  514. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  515. else if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtDynTabWnd))
  516. || pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtDynAutoHideArea))
  517. )
  518. bFrameBackground = true;
  519. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  520. }
  521. if( bFrameBackground )
  522. {
  523. CRect rcTabNearMargin( rcTabNearBorderArea ); // prepare tab border margin rect
  524. switch( dwOrientation )
  525. {
  526. case __ETWS_ORIENT_TOP:
  527. rcTabNearMargin.bottom = rcTabNearMargin.top + 1;
  528. break;
  529. case __ETWS_ORIENT_BOTTOM:
  530. rcTabNearMargin.top = rcTabNearMargin.bottom - 1;
  531. break;
  532. case __ETWS_ORIENT_LEFT:
  533. rcTabNearMargin.right = rcTabNearMargin.left + 1;
  534. break;
  535. case __ETWS_ORIENT_RIGHT:
  536. rcTabNearMargin.left = rcTabNearMargin.right - 1;
  537. break;
  538. #ifdef _DEBUG
  539. default:
  540. ASSERT( FALSE );
  541. break;
  542. #endif // _DEBUG
  543. } // switch( dwOrientation )
  544. CWnd * pWnd = STATIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  545. if( ! PaintDockerBkgnd(
  546. true,
  547. dc, 
  548. pWnd
  549. )
  550. )
  551. {
  552. CWnd * pFrame = pWnd->GetParentFrame();
  553. if( pFrame == NULL )
  554. pFrame = pWnd->GetParent();
  555. ASSERT_VALID( pFrame );
  556. CRect rcPaintGradient;
  557. pFrame->GetClientRect( &rcPaintGradient );
  558. pFrame->ClientToScreen( &rcPaintGradient );
  559. ((CExtTabWnd*)pHelperSrc)->ScreenToClient( &rcPaintGradient );
  560. PaintDockerBkgnd( 
  561. true,
  562. dc,  
  563. rcPaintGradient,
  564. rcClient
  565. );
  566. }
  567. if( ! bGroupedMode )
  568. {
  569. COLORREF clrTabNearMargin = GetColor( COLOR_3DSHADOW, pHelperSrc, lParam );
  570. COLORREF clrTabNearBorderAreaBk = GetColor( CLR_3DFACE_OUT, pHelperSrc, lParam );
  571. // fill tab border area
  572. dc.FillSolidRect(
  573. &rcTabNearBorderArea,
  574. clrTabNearBorderAreaBk
  575. );
  576. // paint tab border margin
  577. dc.FillSolidRect(
  578. &rcTabNearMargin,
  579. clrTabNearMargin
  580. );
  581. } // if( !bGroupedMode )
  582. return;
  583. } // if( bFrameBackground )
  584. CExtPaintManagerXP::PaintTabClientArea(
  585. dc,
  586. rcClient,
  587. rcTabItemsArea,
  588. rcTabNearBorderArea,
  589. dwOrientation,
  590. bGroupedMode,
  591. pHelperSrc,
  592. lParam
  593. );
  594. }
  595. void CExtPaintManager::PaintTabbedTabClientArea(
  596. CDC & dc,
  597. CRect & rcClient,
  598. CRect & rcTabItemsArea,
  599. CRect & rcTabNearBorderArea,
  600. DWORD dwOrientation,
  601. bool bGroupedMode,
  602. CObject * pHelperSrc,
  603. LPARAM lParam // = 0L
  604. )
  605. {
  606. ASSERT_VALID( this );
  607. ASSERT( dc.GetSafeHdc() != NULL );
  608. rcTabNearBorderArea;
  609. bGroupedMode;
  610. if( pHelperSrc != NULL
  611. && pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtTabWnd))
  612. )
  613. {
  614. CWnd * pWnd = STATIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  615. if( ! PaintDockerBkgnd(
  616. true,
  617. dc,
  618. pWnd,
  619. lParam
  620. )
  621. )
  622. dc.FillSolidRect(
  623. &rcClient,
  624. GetColor(
  625. CExtPaintManager::CLR_3DFACE_OUT
  626. )
  627. );
  628. COLORREF clr = 0;
  629. CRect rcTabNearMargin( rcTabItemsArea );
  630. switch( dwOrientation )
  631. {
  632. case __ETWS_ORIENT_TOP:
  633. rcTabNearMargin.top = rcTabNearMargin.bottom - 1;
  634. rcTabNearMargin.left = rcClient.left;
  635. rcTabNearMargin.right = rcClient.right;
  636. rcTabNearMargin.OffsetRect( 0, 1 );
  637. clr = GetColor( COLOR_3DHIGHLIGHT );
  638. break;
  639. case __ETWS_ORIENT_BOTTOM:
  640. rcTabNearMargin.bottom = rcTabNearMargin.top + 1;
  641. rcTabNearMargin.left = rcClient.left;
  642. rcTabNearMargin.right = rcClient.right;
  643. rcTabNearMargin.OffsetRect( 0, -1 );
  644. clr = GetColor( COLOR_3DSHADOW );
  645. break;
  646. case __ETWS_ORIENT_LEFT:
  647. rcTabNearMargin.left = rcTabNearMargin.right - 1;
  648. rcTabNearMargin.top = rcClient.top;
  649. rcTabNearMargin.bottom = rcClient.bottom;
  650. rcTabNearMargin.OffsetRect( 1, 0 );
  651. clr = GetColor( COLOR_3DHIGHLIGHT );
  652. break;
  653. case __ETWS_ORIENT_RIGHT:
  654. rcTabNearMargin.right = rcTabNearMargin.left + 1;
  655. rcTabNearMargin.top = rcClient.top;
  656. rcTabNearMargin.bottom = rcClient.bottom;
  657. rcTabNearMargin.OffsetRect( -1, 0 );
  658. clr = GetColor( COLOR_3DSHADOW );
  659. break;
  660. default:
  661. ASSERT( FALSE );
  662. return;
  663. } // switch( dwOrientation )
  664. // paint tab border margin
  665. dc.FillSolidRect(
  666. &rcTabNearMargin,
  667. clr
  668. );
  669. }
  670. }
  671. void CExtPaintManagerStudio2005::PaintTabbedTabClientArea(
  672. CDC & dc,
  673. CRect & rcClient,
  674. CRect & rcTabItemsArea,
  675. CRect & rcTabNearBorderArea,
  676. DWORD dwOrientation,
  677. bool bGroupedMode,
  678. CObject * pHelperSrc,
  679. LPARAM lParam // = 0L
  680. )
  681. {
  682. ASSERT_VALID( this );
  683. ASSERT( dc.GetSafeHdc() != NULL );
  684. if( IsHighContrast() )
  685. {
  686. CExtPaintManagerXP::PaintTabbedTabClientArea(
  687. dc,
  688. rcClient,
  689. rcTabItemsArea,
  690. rcTabNearBorderArea,
  691. dwOrientation,
  692. bGroupedMode,
  693. pHelperSrc,
  694. lParam
  695. );
  696. return;
  697. }
  698. if( pHelperSrc != NULL
  699. && pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtTabWnd))
  700. )
  701. {
  702. CWnd * pWnd = STATIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  703. if( ! PaintDockerBkgnd(
  704. true,
  705. dc,
  706. pWnd,
  707. lParam
  708. )
  709. )
  710. dc.FillSolidRect(
  711. &rcClient,
  712. GetColor(
  713. CExtPaintManager::CLR_3DFACE_OUT
  714. )
  715. );
  716. CRect rcTabNearMargin( rcTabItemsArea );
  717. switch( dwOrientation )
  718. {
  719. case __ETWS_ORIENT_TOP:
  720. rcTabNearMargin.top = rcTabNearMargin.bottom - 1;
  721. rcTabNearMargin.left = rcClient.left;
  722. rcTabNearMargin.right = rcClient.right;
  723. rcTabNearMargin.OffsetRect( 0, 1 );
  724. break;
  725. case __ETWS_ORIENT_BOTTOM:
  726. rcTabNearMargin.bottom = rcTabNearMargin.top + 1;
  727. rcTabNearMargin.left = rcClient.left;
  728. rcTabNearMargin.right = rcClient.right;
  729. rcTabNearMargin.OffsetRect( 0, -1 );
  730. break;
  731. case __ETWS_ORIENT_LEFT:
  732. rcTabNearMargin.left = rcTabNearMargin.right - 1;
  733. rcTabNearMargin.top = rcClient.top;
  734. rcTabNearMargin.bottom = rcClient.bottom;
  735. rcTabNearMargin.OffsetRect( 1, 0 );
  736. break;
  737. case __ETWS_ORIENT_RIGHT:
  738. rcTabNearMargin.right = rcTabNearMargin.left + 1;
  739. rcTabNearMargin.top = rcClient.top;
  740. rcTabNearMargin.bottom = rcClient.bottom;
  741. rcTabNearMargin.OffsetRect( -1, 0 );
  742. break;
  743. default:
  744. ASSERT( FALSE );
  745. return;
  746. } // switch( dwOrientation )
  747. // paint tab border margin
  748. dc.FillSolidRect(
  749. &rcTabNearMargin,
  750. GetColor( COLOR_3DSHADOW )
  751. );
  752. }
  753. }
  754. void CExtPaintManager::PaintTabButton(
  755. CDC & dc,
  756. CRect & rcButton,
  757. LONG nHitTest,
  758. bool bTopLeft,
  759. bool bHorz,
  760. bool bEnabled,
  761. bool bHover,
  762. bool bPushed,
  763. bool bGroupedMode,
  764. CObject * pHelperSrc,
  765. LPARAM lParam, // = 0L
  766. bool bFlat // = false
  767. )
  768. {
  769. ASSERT_VALID( this );
  770. ASSERT( dc.GetSafeHdc() != NULL );
  771. COLORREF clrGlyph = GetColor( bEnabled ? COLOR_BTNTEXT : CLR_TEXT_DISABLED, pHelperSrc, lParam  );
  772. COLORREF clrTL = GetColor( bPushed ? COLOR_3DDKSHADOW : COLOR_3DHILIGHT, pHelperSrc, lParam  );
  773. COLORREF clrBR = GetColor( bPushed ? COLOR_3DHILIGHT : COLOR_3DDKSHADOW, pHelperSrc, lParam  );
  774. CExtPaintManager::stat_PaintTabButtonImpl(
  775. dc,
  776. rcButton,
  777. nHitTest,
  778. bTopLeft,
  779. bHorz,
  780. bEnabled,
  781. bHover,
  782. bPushed,
  783. bGroupedMode,
  784. clrGlyph,
  785. clrTL,
  786. clrBR,
  787. bFlat
  788. );
  789. }
  790. void CExtPaintManagerXP::PaintTabButton(
  791. CDC & dc,
  792. CRect & rcButton,
  793. LONG nHitTest,
  794. bool bTopLeft,
  795. bool bHorz,
  796. bool bEnabled,
  797. bool bHover,
  798. bool bPushed,
  799. bool bGroupedMode,
  800. CObject * pHelperSrc,
  801. LPARAM lParam, // = 0L
  802. bool bFlat // = false
  803. )
  804. {
  805. ASSERT_VALID( this );
  806. ASSERT( dc.GetSafeHdc() != NULL );
  807. COLORREF clrGlyph = GetColor( bEnabled ? COLOR_BTNTEXT : CLR_TEXT_DISABLED, pHelperSrc, lParam  );
  808. COLORREF clrTL = GetColor( bPushed ? COLOR_3DDKSHADOW : COLOR_3DHILIGHT, pHelperSrc, lParam );
  809. COLORREF clrBR = GetColor( bPushed ? COLOR_3DHILIGHT : COLOR_3DDKSHADOW, pHelperSrc, lParam );
  810. CExtPaintManager::stat_PaintTabButtonImpl(
  811. dc,
  812. rcButton,
  813. nHitTest,
  814. bTopLeft,
  815. bHorz,
  816. bEnabled,
  817. bHover,
  818. bPushed,
  819. bGroupedMode,
  820. clrGlyph,
  821. clrTL,
  822. clrBR,
  823. bFlat
  824. );
  825. }
  826. void CExtPaintManagerStudio2005::PaintTabButton(
  827. CDC & dc,
  828. CRect & rcButton,
  829. LONG nHitTest,
  830. bool bTopLeft,
  831. bool bHorz,
  832. bool bEnabled,
  833. bool bHover,
  834. bool bPushed,
  835. bool bGroupedMode,
  836. CObject * pHelperSrc,
  837. LPARAM lParam, // = 0L
  838. bool bFlat // = false
  839. )
  840. {
  841. ASSERT_VALID( this );
  842. ASSERT( dc.GetSafeHdc() != NULL );
  843. if( IsHighContrast() )
  844. {
  845. CExtPaintManagerXP::PaintTabButton(
  846. dc,
  847. rcButton,
  848. nHitTest,
  849. bTopLeft,
  850. bHorz,
  851. bEnabled,
  852. bHover,
  853. bPushed,
  854. bGroupedMode,
  855. pHelperSrc,
  856. lParam,
  857. bFlat
  858. );
  859. return;
  860. }
  861. if( bEnabled && ( bHover || bPushed ) )
  862. {
  863. PAINTPUSHBUTTONDATA _ppbd(
  864. pHelperSrc,
  865. bHorz,
  866. rcButton,
  867. _T(""),
  868. NULL, // pIcon
  869. false, // bFlat
  870. bHover,
  871. bPushed,
  872. false, // bIndeterminate
  873. bEnabled,
  874. false, // bDrawBorder
  875. false, // bDrawFocusRect
  876. false, // bDefaultPushButton
  877. 0,
  878. NULL, // hFont
  879. false, // bDropDown
  880. 0,
  881. false // bTransparentBackground
  882. );
  883. PaintPushButton( dc, _ppbd );
  884. }
  885. CExtPaintManagerOffice2003::PaintTabButton(
  886. dc,
  887. rcButton,
  888. nHitTest,
  889. bTopLeft,
  890. bHorz,
  891. bEnabled,
  892. bHover,
  893. bPushed,
  894. bGroupedMode,
  895. pHelperSrc,
  896. lParam,
  897. true
  898. );
  899. }
  900. void CExtPaintManagerOffice2007_R2_Obsidian::PaintTabButton(
  901. CDC & dc,
  902. CRect & rcButton,
  903. LONG nHitTest,
  904. bool bTopLeft,
  905. bool bHorz,
  906. bool bEnabled,
  907. bool bHover,
  908. bool bPushed,
  909. bool bGroupedMode,
  910. CObject * pHelperSrc,
  911. LPARAM lParam, // = 0L
  912. bool bFlat // = false
  913. )
  914. {
  915. ASSERT_VALID( this );
  916. ASSERT( dc.GetSafeHdc() != NULL );
  917. if( IsHighContrast() )
  918. {
  919. CExtPaintManagerXP::PaintTabButton( dc, rcButton, nHitTest, bTopLeft, bHorz, bEnabled, bHover, bPushed, bGroupedMode, pHelperSrc, lParam, bFlat );
  920. return;
  921. }
  922. COLORREF clrGlyph = RGB(141,141,141);
  923. if( bEnabled )
  924. {
  925. if( pHelperSrc != NULL
  926. && pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPopupMenuWnd) ) 
  927. )
  928. clrGlyph = RGB(0,0,0);
  929. else
  930. clrGlyph = RGB(255,255,255);
  931. }
  932. COLORREF clrTL = GetColor( bPushed ? COLOR_3DDKSHADOW : COLOR_3DHILIGHT, pHelperSrc, lParam );
  933. COLORREF clrBR = GetColor( bPushed ? COLOR_3DHILIGHT : COLOR_3DDKSHADOW, pHelperSrc, lParam );
  934. CExtPaintManager::stat_PaintTabButtonImpl( dc, rcButton, nHitTest, bTopLeft, bHorz, bEnabled, bHover, bPushed, bGroupedMode, clrGlyph, clrTL, clrBR, bFlat );
  935. }
  936. void CExtPaintManagerOffice2010_R2_Black::PaintTabButton(
  937. CDC & dc,
  938. CRect & rcButton,
  939. LONG nHitTest,
  940. bool bTopLeft,
  941. bool bHorz,
  942. bool bEnabled,
  943. bool bHover,
  944. bool bPushed,
  945. bool bGroupedMode,
  946. CObject * pHelperSrc,
  947. LPARAM lParam, // = 0L
  948. bool bFlat // = false
  949. )
  950. {
  951. ASSERT_VALID( this );
  952. ASSERT( dc.GetSafeHdc() != NULL );
  953. if( IsHighContrast() )
  954. {
  955. CExtPaintManagerXP::PaintTabButton( dc, rcButton, nHitTest, bTopLeft, bHorz, bEnabled, bHover, bPushed, bGroupedMode, pHelperSrc, lParam, bFlat );
  956. return;
  957. }
  958. COLORREF clrGlyph = RGB(141,141,141);
  959. if( bEnabled )
  960. {
  961. if( pHelperSrc != NULL
  962. && pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPopupMenuWnd) ) 
  963. )
  964. clrGlyph = RGB(0,0,0);
  965. else
  966. clrGlyph = RGB(220,220,220);
  967. }
  968. COLORREF clrTL = GetColor( bPushed ? COLOR_3DDKSHADOW : COLOR_3DHILIGHT, pHelperSrc, lParam );
  969. COLORREF clrBR = GetColor( bPushed ? COLOR_3DHILIGHT : COLOR_3DDKSHADOW, pHelperSrc, lParam );
  970. CExtPaintManager::stat_PaintTabButtonImpl( dc, rcButton, nHitTest, bTopLeft, bHorz, bEnabled, bHover, bPushed, bGroupedMode, clrGlyph, clrTL, clrBR, bFlat );
  971. }
  972. void CExtPaintManager::TabWnd_MeasureItemAreaMargins(
  973. CExtTabWnd * pTabWnd,
  974. LONG & nSpaceBefore,
  975. LONG & nSpaceAfter,
  976. LONG & nSpaceOver
  977. )
  978. {
  979. ASSERT_VALID( this );
  980. ASSERT( pTabWnd != NULL && ::IsWindow(pTabWnd->m_hWnd) );
  981. ASSERT_VALID( pTabWnd );
  982. pTabWnd;
  983. nSpaceBefore = 4;
  984. nSpaceAfter = 2;
  985. if( (pTabWnd->GetTabWndStyle() & __ETWS_GROUPED) == 0 )
  986. nSpaceOver = 2;
  987. }
  988. void CExtPaintManagerNativeXP::TabWnd_MeasureItemAreaMargins(
  989. CExtTabWnd * pTabWnd,
  990. LONG & nSpaceBefore,
  991. LONG & nSpaceAfter,
  992. LONG & nSpaceOver
  993. )
  994. {
  995. ASSERT_VALID( this );
  996. ASSERT( pTabWnd != NULL && ::IsWindow(pTabWnd->m_hWnd) );
  997. ASSERT_VALID( pTabWnd );
  998. bool bGroupedMode =
  999. (pTabWnd->GetTabWndStyle() & __ETWS_GROUPED) ? true : false;
  1000. if( bGroupedMode
  1001. || (! g_PaintManager.m_UxTheme.IsControlsThemed() )
  1002. )
  1003. {
  1004. CExtPaintManager::TabWnd_MeasureItemAreaMargins(
  1005. pTabWnd,
  1006. nSpaceBefore,
  1007. nSpaceAfter,
  1008. nSpaceOver
  1009. );
  1010. return;
  1011. }
  1012. nSpaceBefore = 0;
  1013. nSpaceAfter = 0;
  1014. nSpaceOver = 0;
  1015. }
  1016. void CExtPaintManager::TabWnd_UpdateItemMeasure(
  1017. CExtTabWnd * pTabWnd,
  1018. CExtTabWnd::TAB_ITEM_INFO * pTii,
  1019. CDC & dcMeasure,
  1020. CSize & sizePreCalc
  1021. )
  1022. {
  1023. ASSERT_VALID( this );
  1024. ASSERT_VALID( pTii );
  1025. ASSERT( dcMeasure.GetSafeHdc() != NULL );
  1026. ASSERT( pTii->GetTabWnd() == pTabWnd );
  1027. pTabWnd;
  1028. pTii;
  1029. dcMeasure;
  1030. sizePreCalc;
  1031. }
  1032. void CExtPaintManager::TabWnd_AdjustItemCloseButtonRect(
  1033. CRect & rcCloseButton,
  1034. CExtTabWnd * pTabWnd
  1035. )
  1036. {
  1037. ASSERT_VALID( this );
  1038. pTabWnd;
  1039. rcCloseButton;
  1040. }
  1041. bool CExtPaintManager::TabWnd_GetParentSizingMargin(
  1042. INT & nMargin,
  1043. DWORD dwOrientation,
  1044. CExtTabWnd * pTabWnd
  1045. ) const
  1046. {
  1047. ASSERT_VALID( this );
  1048. ASSERT_VALID( pTabWnd );
  1049. nMargin;
  1050. dwOrientation;
  1051. pTabWnd;
  1052. return false;
  1053. }
  1054. bool CExtPaintManagerNativeXP::TabWnd_GetParentSizingMargin(
  1055. INT & nMargin,
  1056. DWORD dwOrientation,
  1057. CExtTabWnd * pTabWnd
  1058. ) const
  1059. {
  1060. ASSERT_VALID( this );
  1061. ASSERT_VALID( pTabWnd );
  1062. if( (! g_PaintManager.m_UxTheme.IsControlsThemed() )
  1063. || pTabWnd->_IsCustomLayoutTabWnd() 
  1064. )
  1065. return
  1066. CExtPaintManager::TabWnd_GetParentSizingMargin(
  1067. nMargin,
  1068. dwOrientation,
  1069. pTabWnd
  1070. );
  1071. nMargin = 1;
  1072. return true;
  1073. }
  1074. void CExtPaintManager::PaintTabNcAreaRect(
  1075. CDC & dc,
  1076. const RECT & rc,
  1077. CObject * pHelperSrc,
  1078. LPARAM lParam // = 0L
  1079. )
  1080. {
  1081. ASSERT_VALID( this );
  1082. ASSERT( dc.GetSafeHdc() != NULL );
  1083. COLORREF clrTL = GetColor( COLOR_3DSHADOW, pHelperSrc, lParam );
  1084. COLORREF clrBR = GetColor( COLOR_3DHILIGHT, pHelperSrc, lParam );
  1085. dc.Draw3dRect(
  1086. &rc,
  1087. clrTL,
  1088. clrBR
  1089. );
  1090. }
  1091. void CExtPaintManagerXP::PaintTabNcAreaRect(
  1092. CDC & dc,
  1093. const RECT & rc,
  1094. CObject * pHelperSrc,
  1095. LPARAM lParam // = 0L
  1096. )
  1097. {
  1098. ASSERT_VALID( this );
  1099. ASSERT( dc.GetSafeHdc() != NULL );
  1100. COLORREF clrTL = GetColor( COLOR_3DSHADOW, pHelperSrc, lParam );
  1101. COLORREF clrBR = clrTL;
  1102. dc.Draw3dRect(
  1103. &rc,
  1104. clrTL,
  1105. clrBR
  1106. );
  1107. }
  1108. void CExtPaintManagerNativeXP::PaintTabNcAreaRect(
  1109. CDC & dc,
  1110. const RECT & rc,
  1111. CObject * pHelperSrc,
  1112. LPARAM lParam // = 0L
  1113. )
  1114. {
  1115. ASSERT_VALID( this );
  1116. ASSERT( dc.GetSafeHdc() != NULL );
  1117. if( (! g_PaintManager.m_UxTheme.IsControlsThemed() )
  1118. || pHelperSrc == NULL
  1119. || (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  1120. || ((CExtTabWnd*)pHelperSrc)->_IsCustomLayoutTabWnd()
  1121. )
  1122. CExtPaintManager::PaintTabNcAreaRect( dc, rc, pHelperSrc, lParam );
  1123. PaintDockerBkgnd( false, dc, (CWnd*)pHelperSrc, lParam );
  1124. }
  1125. #endif // #if (!defined __EXT_MFC_NO_TAB_CTRL)
  1126. void CExtPaintManager::PaintDockBarClientArea(
  1127. CDC & dc,
  1128. const RECT & rcClient,
  1129. CObject * pHelperSrc,
  1130. LPARAM lParam // = 0L
  1131. )
  1132. {
  1133. ASSERT_VALID( this );
  1134. ASSERT( dc.GetSafeHdc() != NULL );
  1135. if( ::IsRectEmpty( &rcClient ) || ( ! dc.RectVisible( &rcClient ) ) )
  1136. return;
  1137. if( RenderCustomBackground( true, dc, pHelperSrc, lParam ) )
  1138. return;
  1139. dc.FillSolidRect( &rcClient, GetColor( CLR_3DFACE_OUT, pHelperSrc, lParam ) );
  1140. }
  1141. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::PAINTINHERITEDBACKGROUNDDATA(
  1142. bool bClientMapping,
  1143. CDC & dc,
  1144. CWnd * pWnd,
  1145. CObject * pObjHelperSrc, // = NULL
  1146. LPARAM lParam // = 0L
  1147. )
  1148. : m_bClientMapping( bClientMapping )
  1149. , m_bBackgroundDrawn( false )
  1150. , m_bSequenceCanceled( false )
  1151. , m_hWndBackgroundRequestPainter( NULL )
  1152. , m_dc( dc )
  1153. , m_pWnd( pWnd )
  1154. , m_pObjHelperSrc( pObjHelperSrc )
  1155. , m_lParam( lParam )
  1156. {
  1157. ASSERT_VALID( (&m_dc) );
  1158. ASSERT( m_dc.GetSafeHdc() != NULL );
  1159. ASSERT_VALID( m_pWnd );
  1160. ASSERT( m_pWnd->GetSafeHwnd() != NULL );
  1161. }
  1162. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::PAINTINHERITEDBACKGROUNDDATA(
  1163. bool bClientMapping,
  1164. CDC & dc,
  1165. CObject * pObjHelperSrc,
  1166. LPARAM lParam // = 0L
  1167. )
  1168. : m_bClientMapping( bClientMapping )
  1169. , m_bBackgroundDrawn( false )
  1170. , m_bSequenceCanceled( false )
  1171. , m_hWndBackgroundRequestPainter( NULL )
  1172. , m_dc( dc )
  1173. , m_pWnd( NULL )
  1174. , m_pObjHelperSrc( pObjHelperSrc )
  1175. , m_lParam( lParam )
  1176. {
  1177. ASSERT_VALID( (&m_dc) );
  1178. ASSERT( m_dc.GetSafeHdc() != NULL );
  1179. ASSERT_VALID( m_pObjHelperSrc );
  1180. m_pWnd = STATIC_DOWNCAST( CWnd, m_pObjHelperSrc );
  1181. ASSERT_VALID( m_pWnd );
  1182. ASSERT( m_pWnd->GetSafeHwnd() != NULL );
  1183. }
  1184. bool CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::Notify()
  1185. {
  1186. ASSERT_VALID( (&m_dc) );
  1187. ASSERT( m_dc.GetSafeHdc() != NULL );
  1188. ASSERT_VALID( m_pWnd );
  1189. ASSERT( m_pWnd->GetSafeHwnd() != NULL );
  1190. HWND hWnd = m_pWnd->GetSafeHwnd();
  1191. for( ; hWnd != NULL; hWnd = ::GetParent(hWnd) )
  1192. {
  1193. ::SendMessage(
  1194. hWnd,
  1195. CExtPaintManager::g_nMsgPaintInheritedBackground,
  1196. *this,
  1197. 0
  1198. );
  1199. if( m_bSequenceCanceled )
  1200. {
  1201. m_bBackgroundDrawn = false;
  1202. m_hWndBackgroundRequestPainter = NULL;
  1203. break;
  1204. } // if( m_bSequenceCanceled )
  1205. if( m_bBackgroundDrawn )
  1206. {
  1207. if( m_hWndBackgroundRequestPainter == NULL )
  1208. m_hWndBackgroundRequestPainter = hWnd;
  1209. return true;
  1210. } // if( m_bBackgroundDrawn )
  1211. __EXT_MFC_LONG_PTR dwStyle = ::__EXT_MFC_GetWindowLong( hWnd, GWL_STYLE );
  1212. if( (dwStyle&WS_CHILD) == 0 )
  1213. break;
  1214. } // for( ; hWnd != NULL; hWnd = ::GetParent(hWnd) )
  1215. return false;
  1216. }
  1217. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::operator WPARAM() const
  1218. {
  1219. return WPARAM( this );
  1220. }
  1221. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA *
  1222. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::FromWPARAM( WPARAM wParam )
  1223. {
  1224. PAINTINHERITEDBACKGROUNDDATA * pPIBD =
  1225. reinterpret_cast < PAINTINHERITEDBACKGROUNDDATA * > ( wParam );
  1226. ASSERT( pPIBD != NULL );
  1227. return pPIBD;
  1228. }
  1229. CRect CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA::GetRenderingRect() const
  1230. {
  1231. CRect rc;
  1232. if( m_bClientMapping )
  1233. m_pWnd->GetClientRect( &rc );
  1234. else
  1235. {
  1236. m_pWnd->GetWindowRect( &rc );
  1237. rc.OffsetRect( -rc.left, -rc.top );
  1238. }
  1239. return rc;
  1240. }
  1241. bool CExtPaintManager::RenderCustomBackground(
  1242. bool bClientMapping,
  1243. CDC & dc,
  1244. CObject * pObjHelperSrc,
  1245. LPARAM lParam // = 0L
  1246. ) const
  1247. {
  1248. ASSERT_VALID( this );
  1249. if( pObjHelperSrc == NULL
  1250. || (! GetCustomBackgroundInheritanceMode(
  1251. pObjHelperSrc,
  1252. lParam
  1253. ) )
  1254. || dc.GetSafeHdc() == NULL
  1255. )
  1256. return false;
  1257. CWnd * pWnd = DYNAMIC_DOWNCAST( CWnd, pObjHelperSrc );
  1258. if( pWnd->GetSafeHwnd() == NULL )
  1259. {
  1260. CExtBarButton * pTBB = DYNAMIC_DOWNCAST( CExtBarButton, pObjHelperSrc );
  1261. if( pTBB != NULL )
  1262. pWnd = pTBB->GetBar();
  1263. }
  1264. if( pWnd->GetSafeHwnd() == NULL )
  1265. return false;
  1266. CExtPaintManager::PAINTINHERITEDBACKGROUNDDATA _pibd(
  1267. bClientMapping,
  1268. dc,
  1269. pWnd,
  1270. pObjHelperSrc = NULL,
  1271. lParam
  1272. );
  1273. return _pibd.Notify();
  1274. }
  1275. UINT CExtPaintManager::g_nMsgPaintInheritedBackground =
  1276. ::RegisterWindowMessage(
  1277. _T("CExtPaintManager::g_nMsgPaintInheritedBackground")
  1278. );
  1279. bool CExtPaintManager::IsCustomBackgroundInheritanceEnabled() const
  1280. {
  1281. ASSERT_VALID( this );
  1282. return m_bCustomBackgroundInheritanceEnabled;
  1283. }
  1284. bool CExtPaintManager::GetCustomBackgroundInheritanceMode(
  1285. CObject * pObjHelperSrc,
  1286. LPARAM lParam // = 0L
  1287. ) const
  1288. {
  1289. ASSERT_VALID( this );
  1290. ASSERT_VALID( pObjHelperSrc );
  1291. pObjHelperSrc;
  1292. lParam;
  1293. return IsCustomBackgroundInheritanceEnabled();
  1294. }
  1295. bool CExtPaintManager::GetCb2DbTransparentMode(
  1296. CObject * pObjHelperSrc,
  1297. LPARAM lParam // = 0L
  1298. )
  1299. {
  1300. ASSERT_VALID( this );
  1301. if( GetCustomBackgroundInheritanceMode(
  1302. pObjHelperSrc,
  1303. lParam
  1304. )
  1305. )
  1306. return true;
  1307. return false;
  1308. }
  1309. bool CExtPaintManagerNativeXP::GetCb2DbTransparentMode(
  1310. CObject * pObjHelperSrc,
  1311. LPARAM lParam // = 0L
  1312. )
  1313. {
  1314. ASSERT_VALID( this );
  1315. if( GetCustomBackgroundInheritanceMode(
  1316. pObjHelperSrc,
  1317. lParam
  1318. )
  1319. )
  1320. return true;
  1321. // return false;
  1322. return true;
  1323. }
  1324. bool CExtPaintManagerOffice2003::GetCb2DbTransparentMode(
  1325. CObject * pObjHelperSrc,
  1326. LPARAM lParam // = 0L
  1327. )
  1328. {
  1329. ASSERT_VALID( this );
  1330. if( IsHighContrast() )
  1331. return CExtPaintManagerXP::GetCb2DbTransparentMode( pObjHelperSrc, lParam );
  1332. if( stat_GetBPP() <= 8 )
  1333. return false;
  1334. // (- 2.25)
  1335. // if( g_PaintManager.m_bUxValidColorsExtracted && pObjHelperSrc != NULL )
  1336. // {
  1337. // ASSERT_VALID( pObjHelperSrc );
  1338. // CDialog * pWnd = DYNAMIC_DOWNCAST( CDialog, pObjHelperSrc );
  1339. // if( pWnd != NULL
  1340. // && pWnd->GetSafeHwnd() != NULL
  1341. // && (pWnd->GetStyle()&WS_CHILD) != 0
  1342. // )
  1343. // {
  1344. // return false;
  1345. // } // if( pWnd != NULL && ...
  1346. // } // if( g_PaintManager.m_bUxValidColorsExtracted && pObjHelperSrc != NULL )
  1347. return true;
  1348. }
  1349. bool CExtPaintManager::PaintDocumentClientAreaBkgnd(
  1350. CDC & dc,
  1351. CWnd * pWnd,
  1352. LPARAM lParam // = NULL
  1353. )
  1354. {
  1355. ASSERT_VALID( this );
  1356. ASSERT( dc.GetSafeHdc() != NULL );
  1357. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  1358. CRect rcClient;
  1359. pWnd->GetClientRect( &rcClient );
  1360. if( dc.RectVisible( &rcClient ) )
  1361. dc.FillSolidRect( rcClient, GetColor( COLOR_3DFACE, pWnd, lParam ) );
  1362. return true;
  1363. }
  1364. bool CExtPaintManager::PaintDockerBkgnd(
  1365. bool bClientMapping,
  1366. CDC & dc,
  1367. CWnd * pWnd,
  1368. LPARAM lParam // = NULL
  1369. )
  1370. {
  1371. ASSERT_VALID( this );
  1372. ASSERT( dc.GetSafeHdc() != NULL );
  1373. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  1374. if( RenderCustomBackground( bClientMapping, dc, pWnd, lParam ) )
  1375. return true;
  1376. CRect rc;
  1377. if( bClientMapping )
  1378. pWnd->GetClientRect( &rc );
  1379. else
  1380. {
  1381. pWnd->GetWindowRect( &rc );
  1382. rc.OffsetRect( -rc.left, -rc.top );
  1383. }
  1384. dc.FillSolidRect( rc, GetColor( CLR_3DFACE_OUT, pWnd, lParam ) );
  1385. return true;
  1386. }
  1387. bool CExtPaintManager::PaintDockerBkgnd(
  1388. bool bClientMapping,
  1389. CDC & dc,
  1390. const CRect &rcDst,
  1391. const CRect &rcWnd,
  1392. LPARAM lParam // = NULL
  1393. )
  1394. {
  1395. ASSERT_VALID( this );
  1396. ASSERT( dc.GetSafeHdc() != NULL );
  1397. rcWnd; lParam; bClientMapping;
  1398. dc.FillSolidRect( rcDst, GetColor( CLR_3DFACE_OUT, NULL ) );
  1399. return true;
  1400. }
  1401. bool CExtPaintManagerNativeXP::PaintDockerBkgnd(
  1402. bool bClientMapping,
  1403. CDC & dc,
  1404. CWnd * pWnd,
  1405. LPARAM lParam // = NULL
  1406. )
  1407. {
  1408. ASSERT_VALID( this );
  1409. ASSERT( dc.GetSafeHdc() != NULL );
  1410. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  1411. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  1412. return  CExtPaintManager::PaintDockerBkgnd( bClientMapping, dc, pWnd, lParam );
  1413. if( RenderCustomBackground( bClientMapping, dc, pWnd, lParam ) )
  1414. return true;
  1415. if( ! GetCb2DbTransparentMode( pWnd ) )
  1416. return false;
  1417. bool bToolbarShade = false;
  1418. bool bToolbarHorz = false;
  1419. CWnd * pFrame = pWnd;
  1420. for( ; pFrame != NULL; pFrame = pFrame->GetParent() )
  1421. {
  1422. if( (pFrame->GetStyle() & WS_CHILD) == 0 )
  1423. break;
  1424. else // frame features - design mode
  1425. if( pFrame->IsKindOf(RUNTIME_CLASS(CFrameWnd)) )
  1426. break;
  1427. if( pFrame != pWnd
  1428. && pFrame->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  1429. )
  1430. {
  1431. if( ((CExtToolControlBar*)pFrame)->m_pDockSite != NULL )
  1432. {
  1433. if( (!( pFrame->IsKindOf( RUNTIME_CLASS(CExtPanelControlBar) )
  1434. || pFrame->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) )
  1435. ) )
  1436. && (! ((CExtToolControlBar*)pFrame)->m_bForceNoBalloonWhenRedockable)
  1437. )
  1438. {
  1439. if( ((CExtToolControlBar*)pFrame)->m_pDockBar == NULL )
  1440. {
  1441. if( ((CExtToolControlBar*)pFrame)->m_bForceBalloonGradientInDialogs != 0 )
  1442. {
  1443. bToolbarShade = true;
  1444. DWORD dwBarStyle = ((CExtToolControlBar*)pFrame)->GetBarStyle();
  1445. bToolbarHorz = ( ( dwBarStyle & ( CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT ) ) != 0 ) ? false : true;
  1446. break;
  1447. }
  1448. continue;
  1449. }
  1450. if( ! ((CExtToolControlBar*)pFrame)->IsFloating() )
  1451. {
  1452. bToolbarShade = true;
  1453. bToolbarHorz = ((CExtToolControlBar*)pFrame)->IsDockedHorizontally();
  1454. }
  1455. break;
  1456. }
  1457. }
  1458. else if( ((CExtToolControlBar*)pFrame)->m_bForceBalloonGradientInDialogs != 0 )
  1459. {
  1460. bToolbarShade = true;
  1461. DWORD dwBarStyle = ((CExtToolControlBar*)pFrame)->GetBarStyle();
  1462. bToolbarHorz = ( ( dwBarStyle & ( CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT ) ) != 0 ) ? false : true;
  1463. break;
  1464. }
  1465. }
  1466. } // for( ; pFrame != NULL; pFrame = pFrame->GetParent() )
  1467. if( pFrame == NULL )
  1468. return false;
  1469. CExtToolControlBar::FtLayoutQuery _FtLayoutQuery;
  1470. if( _FtLayoutQuery.Query( pWnd->m_hWnd ) )
  1471. {
  1472. if( bClientMapping )
  1473. _FtLayoutQuery.ReMapRectsToTargetClient();
  1474. else
  1475. _FtLayoutQuery.ReMapRectsToTargetWindow();
  1476. _FtLayoutQuery.DrawRects( dc );
  1477. return true;
  1478. } // if( _FtLayoutQuery.Query( pWnd->m_hWnd ) )
  1479. CRect rcPaintGradient;
  1480. pFrame->GetClientRect( &rcPaintGradient );
  1481. pFrame->ClientToScreen( &rcPaintGradient );
  1482. if( bClientMapping )
  1483. {
  1484. pWnd->ScreenToClient( &rcPaintGradient );
  1485. } // if( bClientMapping )
  1486. else
  1487. {
  1488. CRect rc;
  1489. pWnd->GetWindowRect( &rc );
  1490. rcPaintGradient.OffsetRect( -rc.left, -rc.top );
  1491. } // else from if( bClientMapping )
  1492. if( ::IsRectEmpty( &rcPaintGradient )
  1493. || ( ! dc.RectVisible( &rcPaintGradient ) )
  1494. )
  1495. return true;
  1496. if( bToolbarShade )
  1497. {
  1498. bool bRebarDrawingStyle = false;
  1499. CExtControlBar * pWndCB = DYNAMIC_DOWNCAST( CExtControlBar, pFrame );
  1500. if( pWndCB != NULL )
  1501. {
  1502. ASSERT_VALID( pWndCB );
  1503. if( pWndCB->m_pDockBar->GetSafeHwnd() != NULL )
  1504. {
  1505. ASSERT_VALID( pWndCB->m_pDockBar );
  1506. if( pWndCB->IsFixedDockStyle() 
  1507. && (!pWndCB->IsFloating())
  1508. )
  1509. bRebarDrawingStyle = true;
  1510. }
  1511. }
  1512. if( bRebarDrawingStyle )
  1513. {
  1514. CRect rcPaint;
  1515. pWndCB->m_pDockBar->GetWindowRect( &rcPaint );
  1516. pWndCB->ScreenToClient( &rcPaint );
  1517. if( g_PaintManager.m_UxTheme.OpenThemeData( pWndCB->GetSafeHwnd(), VSCLASS_REBAR ) != NULL )
  1518. {
  1519. VERIFY( 
  1520. g_PaintManager.m_UxTheme.DrawBackground(
  1521. pWndCB->GetSafeHwnd(),
  1522. dc.GetSafeHdc(), 
  1523. 0, 
  1524. 0, 
  1525. &rcPaint, 
  1526. &rcPaint
  1527. ) == S_OK
  1528. );
  1529. g_PaintManager.m_UxTheme.CloseThemeData();
  1530. }
  1531. }
  1532. else
  1533. dc.FillSolidRect( &rcPaintGradient, ::GetSysColor( COLOR_3DFACE ) );
  1534. } // else if( bToolbarShade )
  1535. else
  1536. dc.FillSolidRect( rcPaintGradient, ::GetSysColor( COLOR_3DFACE ) );
  1537. return true;
  1538. }
  1539. bool CExtPaintManagerOffice2003::PaintDockerBkgnd(
  1540. bool bClientMapping,
  1541. CDC & dc,
  1542. CWnd * pWnd,
  1543. LPARAM lParam // = NULL
  1544. )
  1545. {
  1546. ASSERT_VALID( this );
  1547. ASSERT( dc.GetSafeHdc() != NULL );
  1548. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  1549. if( IsHighContrast() )
  1550. return CExtPaintManagerXP::PaintDockerBkgnd( bClientMapping, dc, pWnd, lParam );
  1551. if( RenderCustomBackground( bClientMapping, dc, pWnd, lParam ) )
  1552. return true;
  1553. if( ! GetCb2DbTransparentMode( pWnd ) )
  1554. return false;
  1555. COLORREF clrSolidShade0 = ((COLORREF)(-1L));
  1556. COLORREF clrSolidShade1 = ((COLORREF)(-1L));
  1557. bool bToolbarShade = false;
  1558. bool bToolbarHorz = false;
  1559. CWnd * pFrame = pWnd;
  1560. for( ; pFrame != NULL; pFrame = pFrame->GetParent() )
  1561. {
  1562. if( (pFrame->GetStyle() & WS_CHILD) == 0 )
  1563. break;
  1564. else // frame features - design mode
  1565. if( pFrame->IsKindOf(RUNTIME_CLASS(CFrameWnd)) )
  1566. break;
  1567. if( pFrame != pWnd
  1568. && pFrame->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  1569. )
  1570. {
  1571. if( ((CExtToolControlBar*)pFrame)->m_pDockSite != NULL )
  1572. {
  1573. if( (!( pFrame->IsKindOf( RUNTIME_CLASS(CExtPanelControlBar) )
  1574. || pFrame->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) )
  1575. ) )
  1576. && (! ((CExtToolControlBar*)pFrame)->m_bForceNoBalloonWhenRedockable)
  1577. )
  1578. {
  1579. if( ((CExtToolControlBar*)pFrame)->m_pDockBar == NULL )
  1580. {
  1581. if( ((CExtToolControlBar*)pFrame)->m_bForceBalloonGradientInDialogs != 0 )
  1582. {
  1583. bToolbarShade = true;
  1584. DWORD dwBarStyle = ((CExtToolControlBar*)pFrame)->GetBarStyle();
  1585. bToolbarHorz = ( ( dwBarStyle & ( CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT ) ) != 0 ) ? false : true;
  1586. break;
  1587. }
  1588. continue;
  1589. }
  1590. if( ((CExtToolControlBar*)pFrame)->IsFloating() )
  1591. {
  1592. clrSolidShade0 = GetColor( _2003CLR_GRADIENT_DARK, pWnd, lParam );
  1593. clrSolidShade1 = GetColor( _2003CLR_GRADIENT_LIGHT, pWnd, lParam );
  1594. }
  1595. else
  1596. {
  1597. bToolbarShade = true;
  1598. bToolbarHorz = ((CExtToolControlBar*)pFrame)->IsDockedHorizontally();
  1599. }
  1600. break;
  1601. }
  1602. }
  1603. else if( ((CExtToolControlBar*)pFrame)->m_bForceBalloonGradientInDialogs != 0 )
  1604. {
  1605. bToolbarShade = true;
  1606. DWORD dwBarStyle = ((CExtToolControlBar*)pFrame)->GetBarStyle();
  1607. bToolbarHorz = ( ( dwBarStyle & ( CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT ) ) != 0 ) ? false : true;
  1608. break;
  1609. }
  1610. }
  1611. } // for( ; pFrame != NULL; pFrame = pFrame->GetParent() )
  1612. if( pFrame == NULL )
  1613. return false;
  1614. CExtToolControlBar::FtLayoutQuery _FtLayoutQuery;
  1615. if( _FtLayoutQuery.Query( pWnd->m_hWnd ) )
  1616. {
  1617. if( bClientMapping )
  1618. _FtLayoutQuery.ReMapRectsToTargetClient();
  1619. else
  1620. _FtLayoutQuery.ReMapRectsToTargetWindow();
  1621. _FtLayoutQuery.DrawRects( dc );
  1622. return true;
  1623. } // if( _FtLayoutQuery.Query( pWnd->m_hWnd ) )
  1624. CRect rcPaintGradient;
  1625. /// pFrame->GetWindowRect( &rcPaintGradient );
  1626. pFrame->GetClientRect( &rcPaintGradient );
  1627. pFrame->ClientToScreen( &rcPaintGradient );
  1628. if( bClientMapping )
  1629. {
  1630. pWnd->ScreenToClient( &rcPaintGradient );
  1631. } // if( bClientMapping )
  1632. else
  1633. {
  1634. CRect rc;
  1635. pWnd->GetWindowRect( &rc );
  1636. rcPaintGradient.OffsetRect( -rc.left, -rc.top );
  1637. /// rcPaintGradient.OffsetRect( -rcPaintGradient.left, -rcPaintGradient.top );
  1638. } // else from if( bClientMapping )
  1639. if( ::IsRectEmpty( &rcPaintGradient )
  1640. || ( ! dc.RectVisible( &rcPaintGradient ) )
  1641. )
  1642. return true;
  1643. if( clrSolidShade0 != ((COLORREF)(-1L)) )
  1644. {
  1645. if( clrSolidShade1 != ((COLORREF)(-1L)) )
  1646. {
  1647. bool bRTL = ( (dc.GetLayout()&LAYOUT_RTL) != 0 ) ? true : false;
  1648. if( bRTL )
  1649. {
  1650. COLORREF clrTmp = clrSolidShade0;
  1651. clrSolidShade0 = clrSolidShade1;
  1652. clrSolidShade1 = clrTmp;
  1653. } // if( bRTL )
  1654. stat_PaintGradientRect(
  1655. dc,
  1656. rcPaintGradient,
  1657. clrSolidShade0,
  1658. clrSolidShade1,
  1659. true
  1660. );
  1661. } // if( clrSolidShade1 != ((COLORREF)(-1L)) )
  1662. else
  1663. dc.FillSolidRect( rcPaintGradient, clrSolidShade0 );
  1664. return true;
  1665. } // if( clrSolidShade0 != ((COLORREF)(-1L)) )
  1666. if( bToolbarShade )
  1667. {
  1668. if( OnQueryUseThemeColors() )
  1669. {
  1670. // if use WinXP themed colors
  1671. COLORREF clrLeft   = GetColor( _2003CLR_TOOLBAR_GRADIENT_LIGHT,  pWnd, lParam );
  1672. COLORREF clrMiddle = GetColor( _2003CLR_TOOLBAR_GRADIENT_MIDDLE, pWnd, lParam );
  1673. COLORREF clrRight  = GetColor( _2003CLR_TOOLBAR_GRADIENT_DARK,   pWnd, lParam );
  1674. stat_PaintGradientRect2steps( dc, rcPaintGradient, clrLeft, clrMiddle, clrRight, bToolbarHorz, 5, 11 );
  1675. } // if( OnQueryUseThemeColors() )
  1676. else
  1677. {
  1678. COLORREF clrLeft = 
  1679. bToolbarHorz 
  1680. ? GetColor( _2003CLR_MLA_NORM_RIGHT, pWnd, lParam )
  1681. : GetColor( _2003CLR_MLA_NORM_LEFT,  pWnd, lParam )
  1682. ;
  1683. COLORREF clrRight = 
  1684. bToolbarHorz 
  1685. ? GetColor( _2003CLR_MLA_NORM_LEFT,  pWnd, lParam )
  1686. : GetColor( _2003CLR_MLA_NORM_RIGHT, pWnd, lParam )
  1687. ;
  1688. stat_PaintGradientRect( dc, rcPaintGradient, clrLeft, clrRight, bToolbarHorz );
  1689. } // else from if( OnQueryUseThemeColors() )
  1690. } // if( bToolbarShade )
  1691. else
  1692. {
  1693. CRect rcWnd;
  1694. if( bClientMapping )
  1695. {
  1696. pWnd->GetClientRect( &rcWnd );
  1697. pFrame->ClientToScreen( &rcWnd );
  1698. }
  1699. else
  1700. pWnd->GetWindowRect( &rcWnd );
  1701. PaintDockerBkgnd( bClientMapping, dc, rcPaintGradient, rcWnd );
  1702. } // else from if( bToolbarShade )
  1703. return true;
  1704. }
  1705. bool CExtPaintManagerOffice2003::PaintDockerBkgnd(
  1706. bool bClientMapping,
  1707. CDC & dc,
  1708. const CRect &rcDst,
  1709. const CRect &rcWnd,
  1710. LPARAM lParam // = NULL
  1711. )
  1712. {
  1713. ASSERT_VALID( this );
  1714. ASSERT( dc.GetSafeHdc() != NULL );
  1715. if( IsHighContrast() )
  1716. return CExtPaintManagerXP::PaintDockerBkgnd( bClientMapping, dc, rcDst, rcWnd, lParam );
  1717. COLORREF clrLeft  = GetColor( _2003CLR_GRADIENT_DARK,  NULL );
  1718. COLORREF clrRight = GetColor( _2003CLR_GRADIENT_LIGHT, NULL );
  1719. if( clrLeft == clrRight )
  1720. {
  1721. dc.FillSolidRect( &rcDst, clrLeft );
  1722. return true;
  1723. }
  1724. CRect rcDst1( rcDst );
  1725. CRect rcDst2( 0, 0, 0, 0 );
  1726. bool bRTL = ( (dc.GetLayout()&LAYOUT_RTL) != 0 ) ? true : false;
  1727. if( rcDst.Width() >= 686 ) 
  1728. {
  1729. if( bRTL )
  1730. {
  1731. rcDst2 = rcDst;
  1732. rcDst2.right = rcDst2.left + rcDst1.Width() - 686;
  1733. rcDst1 = rcDst;
  1734. rcDst1.left = rcDst2.right;
  1735. } // if( bRTL )
  1736. else
  1737. {
  1738. rcDst1.right = rcDst1.left + 686;
  1739. rcDst2 = rcDst;
  1740. rcDst2.left = rcDst1.right;
  1741. } // else from if( bRTL )
  1742. } // if( rcDst.Width() >= 686 ) 
  1743. stat_PaintGradientRect( dc, rcDst1, bRTL ? clrRight : clrLeft, bRTL ? clrLeft : clrRight, false, 64 );
  1744. if( ! rcDst2.IsRectNull() )
  1745. {
  1746. if( ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) > 16 )
  1747. dc.FillSolidRect( &rcDst2, clrRight );
  1748. else
  1749. stat_PaintGradientRect( dc, rcDst2, clrRight, clrRight, false, 64 );
  1750. }
  1751. return true;
  1752. }
  1753. void CExtPaintManager::PaintControlBarClientArea(
  1754. CDC & dc,
  1755. const RECT & rcClient,
  1756. CObject * pHelperSrc,
  1757. LPARAM lParam // = 0L
  1758. )
  1759. {
  1760. ASSERT_VALID( this );
  1761. ASSERT( dc.GetSafeHdc() != NULL );
  1762. if( ::IsRectEmpty( &rcClient ) || ( ! dc.RectVisible( &rcClient ) ) )
  1763. return;
  1764. if( pHelperSrc != NULL
  1765. && pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  1766. && ( ((CExtToolControlBar*)pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  1767. && RenderCustomBackground( true, dc, pHelperSrc, lParam )
  1768. )
  1769. return;
  1770. dc.FillSolidRect( &rcClient, GetColor( CLR_3DFACE_OUT, pHelperSrc, lParam ) );
  1771. }
  1772. void CExtPaintManagerOffice2003::InitTranslatedColors()
  1773. {
  1774. ASSERT_VALID( this );
  1775. m_nIdxClrBtnHoverLeft = -1;
  1776. m_nIdxClrBtnHoverRight = -1;
  1777. m_nIdxClrBtnPressedLeft = -1;
  1778. m_nIdxClrBtnPressedRight = -1;
  1779. m_nIdxClrBtnHovPresLeft = -1;
  1780. m_nIdxClrBtnHovPresRight = -1;
  1781. m_nIdxClrTbFillMargin = -1;
  1782. g_PaintManager.m_bUxValidColorsExtracted = false;
  1783. g_PaintManager.InitUserExApi();
  1784. CExtPaintManagerXP::InitTranslatedColors();
  1785. if( stat_GetBPP() > 8 )
  1786. {
  1787. if( OnQueryUseThemeColors() )
  1788. // if use WinXP themed colors
  1789. COLORREF clrFillHint, clrAccentHint;
  1790. OnQueryThemeColors( &clrFillHint, &clrAccentHint );
  1791. // xp - menu face
  1792. COLORREF xpclr_MenuLight = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.95, -0.05 );
  1793. xpclr_MenuLight = RGB(
  1794. GetRValue(xpclr_MenuLight) + ::MulDiv( 255 - GetRValue(xpclr_MenuLight), 40, 100 ),
  1795. GetGValue(xpclr_MenuLight) + ::MulDiv( 255 - GetGValue(xpclr_MenuLight), 20, 100 ),
  1796. GetBValue(xpclr_MenuLight) );
  1797. xpclr_MenuLight = CExtBitmap::stat_HLS_Adjust( xpclr_MenuLight, 0.00, 0.06, 0.05 );
  1798. // 2003 - float light
  1799. COLORREF xpclr_FloatFace = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.50, 0.00 );
  1800. // xp - rarely used item left side
  1801. COLORREF xpclr_RarelyUsedMenuLeft = RGB(
  1802. ( 999L*long(GetRValue(clrFillHint)) ) / 1000L,
  1803. ( 995L*long(GetGValue(clrFillHint)) ) / 1000L,
  1804. ( 995L*long(GetBValue(clrFillHint)) ) / 1000L );
  1805. // xp - control bar background
  1806. COLORREF xpclr_ControlBarBk = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.20, 0.00 );
  1807. // xp - orange like light ver
  1808. COLORREF xpclr_Highlight = CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.02, 0.60, 0.45 );
  1809. // 2003 - dark orange
  1810. COLORREF clr2003faceIn = CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.00, -0.30, 0.45 );
  1811. // xp - blue like dark ver
  1812. COLORREF clrTmp = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.20, 0.00 );
  1813. COLORREF xpclr_HighlightDarked = CExtBitmap::stat_HLS_Adjust( clrTmp, 0.00, -0.25, 0.10 );
  1814. // xp - dark selected border
  1815. COLORREF xpclr_HighlightBorder = CExtBitmap::stat_HLS_Adjust( xpclr_HighlightDarked, 0.00, -0.50, 0.00 );
  1816. // xp - dark gray separator
  1817. COLORREF xpclr_Separator = RGB(
  1818. ( 857L*long(GetRValue(clrFillHint)) ) / 1000L,
  1819. ( 857L*long(GetGValue(clrFillHint)) ) / 1000L,
  1820. ( 857L*long(GetBValue(clrFillHint)) ) / 1000L );
  1821. // xp - dark panel border (for floating controlbars)
  1822. COLORREF xpclr_PanelBorder =
  1823. CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.25, 0.00 );
  1824. m_mapColorTranslate[CLR_3DFACE_OUT] = InstallColor( xpclr_ControlBarBk );
  1825. m_mapColorTranslate[CLR_3DFACE_IN] = InstallColor( xpclr_Highlight );
  1826. m_mapColorTranslate[CLR_3DFACE_DISABLED] = COLOR_3DFACE;
  1827. int idxClrDark = InstallColor( xpclr_PanelBorder );
  1828. m_mapColorTranslate[CLR_3DLIGHT_OUT] = idxClrDark;
  1829. m_mapColorTranslate[CLR_3DLIGHT_IN] = idxClrDark;
  1830. m_mapColorTranslate[CLR_3DLIGHT_DISABLED] = idxClrDark;
  1831. m_mapColorTranslate[CLR_3DHILIGHT_OUT] = idxClrDark;
  1832. m_mapColorTranslate[CLR_3DHILIGHT_IN] = idxClrDark;
  1833. m_mapColorTranslate[CLR_3DHILIGHT_DISABLED] = idxClrDark;
  1834. m_mapColorTranslate[CLR_3DSHADOW_OUT] = idxClrDark;
  1835. m_mapColorTranslate[CLR_3DSHADOW_IN] = idxClrDark;
  1836. m_mapColorTranslate[CLR_3DSHADOW_DISABLED] = idxClrDark;
  1837. m_mapColorTranslate[CLR_3DDKSHADOW_OUT] = idxClrDark;
  1838. m_mapColorTranslate[CLR_3DDKSHADOW_IN] = idxClrDark;
  1839. m_mapColorTranslate[CLR_3DDKSHADOW_DISABLED] = idxClrDark;
  1840. m_mapColorTranslate[CLR_TEXT_OUT] = COLOR_WINDOWTEXT;
  1841. m_mapColorTranslate[CLR_TEXT_IN] = COLOR_WINDOWTEXT;
  1842. m_mapColorTranslate[CLR_TEXT_DISABLED] = COLOR_GRAYTEXT;
  1843. m_mapColorTranslate[XPCLR_PUSHEDHOVERTEXT] = COLOR_BTNTEXT;
  1844. // Menu text colors
  1845. m_mapColorTranslate[CLR_MENUTEXT_OUT] = InstallColor( RGB(0,0,0) );
  1846. m_mapColorTranslate[CLR_MENUTEXT_IN] = InstallColor( RGB(0,0,0) );
  1847. m_mapColorTranslate[CLR_MENUTEXT_DISABLED] = COLOR_GRAYTEXT;
  1848. m_mapColorTranslate[XPCLR_TEXT_FIELD_BORDER_NORMAL] = COLOR_3DFACE;
  1849. m_mapColorTranslate[XPCLR_TEXT_FIELD_BORDER_DISABLED] = InstallColor( xpclr_Separator );
  1850. m_mapColorTranslate[XPCLR_3DFACE_DARK] = InstallColor( xpclr_ControlBarBk );
  1851. m_mapColorTranslate[XPCLR_3DFACE_NORMAL] = InstallColor( xpclr_MenuLight );
  1852. m_mapColorTranslate[XPCLR_SEPARATOR] = InstallColor( xpclr_Separator ); 
  1853. m_mapColorTranslate[XPCLR_HILIGHT] =
  1854. //InstallColor( xpclr_HighlightDarked ); 
  1855. InstallColor( clr2003faceIn ); 
  1856. m_mapColorTranslate[XPCLR_HILIGHT_BORDER] = InstallColor( xpclr_HighlightBorder ); 
  1857. m_mapColorTranslate[XPCLR_HILIGHT_BORDER_SELECTED] = InstallColor( xpclr_HighlightBorder );  
  1858. m_mapColorTranslate[XPCLR_RARELY_BORDER] = InstallColor( xpclr_RarelyUsedMenuLeft );
  1859. m_mapColorTranslate[XPCLR_3DFACE_FLOAT_F] = InstallColor( xpclr_FloatFace );
  1860. // install new colors
  1861. m_mapColorTranslate[_2003CLR_GRADIENT_LIGHT] =
  1862. InstallColor(
  1863. ( OnQuerySystemTheme() == ThemeLunaSilver )
  1864. ? CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.845, 0.10 )
  1865. : CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.43, 0.00 )
  1866. );
  1867. m_mapColorTranslate[_2003CLR_GRADIENT_DARK] =
  1868. InstallColor(
  1869. ( OnQuerySystemTheme() == ThemeLunaSilver )
  1870. ? CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.45, 0.10 )
  1871. : CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.02, 0.07, 0.00 )
  1872. );
  1873. m_mapColorTranslate[_2003CLR_SEPARATOR_LIGHT]      = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.98, 0.00 ) );
  1874. m_mapColorTranslate[_2003CLR_SEPARATOR_DARK]       = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.45, -0.00 ) );
  1875. m_mapColorTranslate[_2003CLR_GRIPPER_DOT_DARK]     = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.60, 0.00 ) );
  1876. m_mapColorTranslate[_2003CLR_GRIPPER_DOT_LIGHT]    = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.95, 0.00 ) );
  1877. m_mapColorTranslate[_2003CLR_EXPBTN_LIGHT]         = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.10, 0.00 ) );
  1878. m_mapColorTranslate[_2003CLR_EXPBTN_DARK]          = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.60, 0.00 ) );
  1879. m_mapColorTranslate[_2003CLR_EXPBTN_HOVER_LIGHT]   = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.00, 0.85, 0.00 ) );
  1880. m_mapColorTranslate[_2003CLR_EXPBTN_HOVER_DARK]    = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.00, -0.05, 0.00 ) );
  1881. m_mapColorTranslate[_2003CLR_EXPBTN_PRESSED_LIGHT] = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.00, 0.30, 0.00 ) );
  1882. m_mapColorTranslate[_2003CLR_EXPBTN_PRESSED_DARK]  = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.00, -0.30, 0.00 ) );
  1883. m_mapColorTranslate[_2003CLR_EXPGLYPH_LIGHT]       = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.97, 0.00 ) );
  1884. m_mapColorTranslate[_2003CLR_EXPGLYPH_DARK]        = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.97, 0.00 ) );
  1885. m_mapColorTranslate[_2003CLR_STATUSBAR_ITEM]       = COLOR_3DSHADOW;
  1886. COLORREF clrTbGradientLight  = (COLORREF)(-1L);
  1887. COLORREF clrTbGradientMiddle = (COLORREF)(-1L);
  1888. COLORREF clrTbGradientDark   = (COLORREF)(-1L);
  1889. COLORREF clrTbBottomLine     = (COLORREF)(-1L);
  1890. COLORREF clrMlaNormLeft      = (COLORREF)(-1L);
  1891. COLORREF clrMlaNormMiddle    = (COLORREF)(-1L);
  1892. COLORREF clrMlaNormRight     = (COLORREF)(-1L);
  1893. COLORREF clrMlaRarelyLeft    = (COLORREF)(-1L);
  1894. COLORREF clrMlaRarelyMiddle  = (COLORREF)(-1L);
  1895. COLORREF clrMlaRarelyRight   = (COLORREF)(-1L);
  1896. COLORREF clrMenuBorder       = (COLORREF)(-1L);
  1897. COLORREF clrTbbBkTop         = (COLORREF)(-1L);
  1898. COLORREF clrTbbBkBottom      = (COLORREF)(-1L);
  1899. e_system_theme_t eCurrentTheme = OnQuerySystemTheme();
  1900. switch( eCurrentTheme ) 
  1901. {
  1902. case ThemeLunaRoyale:       // +2.87
  1903. case ThemeVistaOrLaterUX:   // +2.87
  1904. case ThemeVistaOrLaterDWM:  // +2.87
  1905. case ThemeLunaBlue:
  1906. clrTbGradientLight  = RGB(221, 236, 254);
  1907. clrTbGradientMiddle = RGB(202, 225, 252);
  1908. clrTbGradientDark   = RGB(110, 155, 216);
  1909. clrTbBottomLine     = RGB(59, 97, 156);
  1910. clrMlaNormLeft      = RGB(227, 239, 255);
  1911. clrMlaNormMiddle    = RGB(202, 225, 252);
  1912. clrMlaNormRight     = RGB(135, 173, 228);
  1913. clrMlaRarelyLeft    = RGB(203, 221, 246);
  1914. clrMlaRarelyMiddle  = RGB(161, 196, 248);
  1915. clrMlaRarelyRight   = RGB(121, 161, 220);
  1916. clrMenuBorder       = RGB(0, 45, 150);
  1917. clrTbbBkTop         = RGB(227, 239, 255);
  1918. clrTbbBkBottom      = RGB(123, 164, 224);
  1919. break;
  1920. case ThemeLunaOlive:
  1921. clrTbGradientLight  = RGB(244, 247, 222);
  1922. clrTbGradientMiddle = RGB(206, 220, 167);
  1923. clrTbGradientDark   = RGB(177, 192, 139);
  1924.   clrTbBottomLine     = RGB(96, 128, 88);
  1925. clrMlaNormLeft      = RGB(255, 255, 237);
  1926. clrMlaNormMiddle    = RGB(206, 219, 167);
  1927. clrMlaNormRight     = RGB(184, 199, 146);
  1928. clrMlaRarelyLeft    = RGB(230, 230, 209);
  1929. clrMlaRarelyMiddle  = RGB(186, 200, 143);
  1930. clrMlaRarelyRight   = RGB(164, 180, 120);
  1931. clrMenuBorder       = RGB(117, 141, 94);
  1932. clrTbbBkTop         = RGB(237, 239, 214);
  1933. clrTbbBkBottom      = RGB(181, 196, 143);
  1934. break;
  1935. case ThemeLunaSilver:
  1936. clrTbGradientLight  = RGB(243, 244, 250);
  1937. clrTbGradientMiddle = RGB(225, 226, 236);
  1938. clrTbGradientDark   = RGB(134, 130, 166);
  1939. clrTbBottomLine     = RGB(124, 124, 148);
  1940. clrMlaNormLeft      = RGB(249, 249, 255);
  1941. clrMlaNormMiddle    = RGB(225, 226, 236);
  1942. clrMlaNormRight     = RGB(159, 157, 185);
  1943. clrMlaRarelyLeft    = RGB(215, 215, 226);
  1944. clrMlaRarelyMiddle  = RGB(184, 185, 202);
  1945. clrMlaRarelyRight   = RGB(128, 126, 158);
  1946. clrMenuBorder       = RGB(124, 124, 148);
  1947. clrTbbBkTop         = RGB(231, 233, 241);
  1948. clrTbbBkBottom      = RGB(172, 170, 194);
  1949. break;
  1950. default:
  1951. clrTbGradientLight  = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.75, 0.15 );
  1952. clrTbGradientMiddle = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.65, 0.15 );
  1953. clrTbGradientDark   = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00,-0.22,-0.25 );
  1954. clrTbBottomLine     = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.60, 0.00 );
  1955. clrMlaNormLeft      = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.75, 0.00 );
  1956. clrMlaNormRight     = CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_3DFACE_DARK, this ), 0.00, -0.10, 0.00 );
  1957. clrMlaNormMiddle    = CExtBitmap::stat_HLS_Adjust( clrMlaNormRight, 0.00, 0.55, 0.00 );
  1958. clrMlaRarelyLeft    = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.30, 0.00 );
  1959. clrMlaRarelyRight   = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.25, 0.00 );
  1960. clrMlaRarelyMiddle  = CExtBitmap::stat_HLS_Adjust( clrMlaRarelyRight, 0.00, 0.55, 0.00 );
  1961. clrMenuBorder       = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.68, 0.00 );
  1962. clrTbbBkTop         = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.75, 0.00 );
  1963. clrTbbBkBottom      = CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_3DFACE_DARK, this ), 0.00, -0.10, 0.00 );
  1964. break;
  1965. } // switch( eCurrentTheme ) 
  1966. m_mapColorTranslate[_2003CLR_TBB_BK_COMBINED_TOP]     = InstallColor( clrTbbBkTop );
  1967. m_mapColorTranslate[_2003CLR_TBB_BK_COMBINED_BOTTOM]  = InstallColor( clrTbbBkBottom );
  1968. m_mapColorTranslate[_2003CLR_TOOLBAR_GRADIENT_LIGHT]  = InstallColor( clrTbGradientLight );
  1969. m_mapColorTranslate[_2003CLR_TOOLBAR_GRADIENT_MIDDLE] = InstallColor( clrTbGradientMiddle );
  1970. m_mapColorTranslate[_2003CLR_TOOLBAR_GRADIENT_DARK]   = InstallColor( clrTbGradientDark );
  1971. m_mapColorTranslate[_2003CLR_TOOLBAR_BOTTOM_LINE]     = InstallColor( clrTbBottomLine );
  1972. m_mapColorTranslate[_2003CLR_MLA_NORM_LEFT]           = InstallColor( clrMlaNormLeft );
  1973. m_mapColorTranslate[_2003CLR_MLA_NORM_MIDDLE]         = InstallColor( clrMlaNormMiddle );
  1974. m_mapColorTranslate[_2003CLR_MLA_NORM_RIGHT]          = InstallColor( clrMlaNormRight );
  1975. m_mapColorTranslate[_2003CLR_MLA_RARELY_LEFT]         = InstallColor( clrMlaRarelyLeft );
  1976. m_mapColorTranslate[_2003CLR_MLA_RARELY_MIDDLE]       = InstallColor( clrMlaRarelyMiddle );
  1977. m_mapColorTranslate[_2003CLR_MLA_RARELY_RIGHT]        = InstallColor( clrMlaRarelyRight );
  1978. m_mapColorTranslate[XPCLR_MENU_BORDER]                = InstallColor( clrMenuBorder );
  1979. m_mapColorTranslate[_2003CLR_BTN_HOVER_LEFT]          = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.05, 0.75, 0.00 ) );
  1980. m_mapColorTranslate[_2003CLR_BTN_HOVER_RIGHT]         = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, -0.05, -0.02, 0.00 ) );
  1981. m_mapColorTranslate[_2003CLR_BTN_PRESSED_LEFT]        = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.02, 0.40, 0.00 ) );
  1982. m_mapColorTranslate[_2003CLR_BTN_PRESSED_RIGHT]       = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, -0.07, -0.31, 0.00 ) );
  1983. m_mapColorTranslate[_2003CLR_BTN_HP_LEFT]             = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, -0.07, -0.31, 0.00 ) );
  1984. m_mapColorTranslate[_2003CLR_BTN_HP_RIGHT]            = InstallColor( CExtBitmap::stat_HLS_Adjust( clrAccentHint, 0.02, 0.40, 0.00 ) );
  1985. // page navigator colors
  1986. m_mapColorTranslate[_2003CLR_PN_BORDER]               = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.10, -0.55, 0.00 ) );
  1987. m_mapColorTranslate[_2003CLR_PN_GRIPPER_LIGHT]        = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.02, -0.23, -0.25 ) );
  1988. m_mapColorTranslate[_2003CLR_PN_GRIPPER_DARK]         = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.05, -0.60, 0.00 ) );
  1989. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_LIGHT]   = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.45, 0.00 ) );
  1990. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_DARK]    = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.00, 0.00 ) );
  1991. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_HOVER_LIGHT]  = m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_LIGHT];
  1992. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_HOVER_DARK]   = m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_DARK];
  1993. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_BOTTOM_LINE]  = m_mapColorTranslate[_2003CLR_PN_BORDER];
  1994. m_mapColorTranslate[_2003CLR_PN_ITEM_LIGHT]           = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.55, 0.20 ) );
  1995. m_mapColorTranslate[_2003CLR_PN_ITEM_DARK]            = InstallColor( CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.13, -0.15 ) );
  1996. // Popup menu Expand Button
  1997. m_mapColorTranslate[_2003CLR_EXPBTN_CIRCLE_LIGHT]     = InstallColor( GetColor( _2003CLR_MLA_NORM_LEFT, this ) );
  1998. m_mapColorTranslate[_2003CLR_EXPBTN_CIRCLE_DARK]      = InstallColor( GetColor( _2003CLR_MLA_NORM_RIGHT, this ) );
  1999. // Button colors
  2000. m_nIdxClrBtnHoverLeft    = _2003CLR_BTN_HOVER_LEFT;
  2001. m_nIdxClrBtnHoverRight   = _2003CLR_BTN_HOVER_RIGHT;
  2002. m_nIdxClrBtnPressedLeft  = _2003CLR_BTN_PRESSED_LEFT;
  2003. m_nIdxClrBtnPressedRight = _2003CLR_BTN_PRESSED_RIGHT;
  2004. m_nIdxClrBtnHovPresLeft  = _2003CLR_BTN_HP_LEFT;
  2005. m_nIdxClrBtnHovPresRight = _2003CLR_BTN_HP_RIGHT;
  2006. m_nIdxClrTbFillMargin    = _2003CLR_TOOLBAR_BOTTOM_LINE;
  2007. m_colors[COLOR_3DFACE]      = clrFillHint;
  2008. m_colors[COLOR_3DLIGHT]     = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.45, 0.10 );
  2009. m_colors[COLOR_3DHIGHLIGHT] = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, 0.75, 0.00 );
  2010. m_colors[COLOR_3DSHADOW]    = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.45, 0.10 );
  2011. m_colors[COLOR_3DDKSHADOW]  = CExtBitmap::stat_HLS_Adjust( clrFillHint, 0.00, -0.75, 0.00 );
  2012. // Task Pane Colors
  2013. COLORREF clrTPBkTop    = (COLORREF)(-1L);
  2014. COLORREF clrTPBkBottom = (COLORREF)(-1L);
  2015. COLORREF clrTPGroupCaptionTextNormal      = (COLORREF)(-1L);
  2016. COLORREF clrTPGroupCaptionTextNormalHover = (COLORREF)(-1L);
  2017. COLORREF clrTPGroupCaptionBkLeftNormal    = (COLORREF)(-1L);
  2018. COLORREF clrTPGroupCaptionBkRightNormal   = (COLORREF)(-1L);
  2019. switch( eCurrentTheme ) 
  2020. {
  2021. case ThemeLunaRoyale:       // +2.87
  2022. case ThemeVistaOrLaterUX:   // +2.87
  2023. case ThemeVistaOrLaterDWM:  // +2.87
  2024. case ThemeLunaBlue:
  2025. clrTPBkTop = RGB(221, 236, 254);
  2026. clrTPBkBottom = RGB(74, 122, 201);
  2027. clrTPGroupCaptionTextNormal = RGB(0, 45, 134);
  2028. clrTPGroupCaptionTextNormalHover = RGB(0, 45, 134);
  2029. clrTPGroupCaptionBkLeftNormal = RGB(196, 219, 249);
  2030. clrTPGroupCaptionBkRightNormal = RGB(101, 143, 224);
  2031. break;
  2032. case ThemeLunaOlive:
  2033. clrTPBkTop = RGB(243, 242, 231);
  2034. clrTPBkBottom = RGB(190, 198, 152);
  2035. clrTPGroupCaptionTextNormal = RGB(90, 107, 70);
  2036. clrTPGroupCaptionTextNormalHover = RGB(90, 107, 70);
  2037. clrTPGroupCaptionBkLeftNormal = RGB(210, 223, 174);
  2038. clrTPGroupCaptionBkRightNormal = RGB(161, 176, 128);
  2039. break;
  2040. case ThemeLunaSilver:
  2041. clrTPBkTop = RGB(238, 238, 244);
  2042. clrTPBkBottom = RGB(177, 176, 195);
  2043. clrTPGroupCaptionTextNormal = RGB(92, 91, 121);
  2044. clrTPGroupCaptionTextNormalHover = RGB(92, 91, 121);
  2045. clrTPGroupCaptionBkLeftNormal = RGB(207, 207, 222);
  2046. clrTPGroupCaptionBkRightNormal = RGB(169, 168, 191);
  2047. break;
  2048. default:
  2049. clrTPBkTop    = CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ),  GetColor( COLOR_WINDOW, this ), 50 );
  2050. clrTPBkBottom = GetColor( COLOR_3DFACE, this );
  2051. clrTPGroupCaptionTextNormal      = GetColor( COLOR_WINDOWTEXT, this );
  2052. clrTPGroupCaptionTextNormalHover = GetColor( COLOR_WINDOWTEXT, this );
  2053. clrTPGroupCaptionBkLeftNormal    = CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ), GetColor( COLOR_WINDOW, this ), 39 );
  2054. clrTPGroupCaptionBkRightNormal   = CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ), GetColor( COLOR_WINDOW, this ), 70 );
  2055. break;
  2056. } // switch( eCurrentTheme ) 
  2057. m_mapColorTranslate[ CLR_TASK_PANE_BK_TOP ]    = InstallColor( clrTPBkTop );
  2058. m_mapColorTranslate[ CLR_TASK_PANE_BK_BOTTOM ] = InstallColor( clrTPBkBottom );
  2059. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL ]              = InstallColor( clrTPGroupCaptionTextNormal );
  2060. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL_HOVERED ]      = InstallColor( clrTPGroupCaptionTextNormalHover );
  2061. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED ]         = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL ];
  2062. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED_HOVERED ] = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL_HOVERED ];
  2063. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_NORMAL]             = InstallColor( clrTPGroupCaptionBkLeftNormal );
  2064. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_HIGHLIGHTED]        = InstallColor( clrTPGroupCaptionBkRightNormal );
  2065. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_NORMAL]            = InstallColor( clrTPGroupCaptionBkRightNormal );
  2066. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_HIGHLIGHTED]       = InstallColor( clrTPGroupCaptionBkLeftNormal );
  2067. } // if use WinXP themed colors
  2068. else
  2069. { // if use system colors
  2070. // install new colors
  2071. m_mapColorTranslate[_2003CLR_GRADIENT_LIGHT]         = InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ), GetColor( COLOR_WINDOW, this ), 222 ) );
  2072. m_mapColorTranslate[_2003CLR_GRADIENT_DARK]          = COLOR_3DFACE;
  2073. m_mapColorTranslate[_2003CLR_SEPARATOR_LIGHT]        = InstallColor( RGB(255,255,255) );
  2074. m_mapColorTranslate[_2003CLR_SEPARATOR_DARK]         = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( COLOR_WINDOW, this ), 0.0, -0.36, -0.80 ) );
  2075. m_mapColorTranslate[_2003CLR_GRIPPER_DOT_DARK]       = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( COLOR_3DSHADOW, this ), 0.0, 0.20, 0.0 ) );
  2076. m_mapColorTranslate[_2003CLR_GRIPPER_DOT_LIGHT]      = COLOR_WINDOW;
  2077. m_mapColorTranslate[_2003CLR_EXPBTN_LIGHT]           = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( COLOR_3DSHADOW, this ), 0.0, 0.70, 0.10 ) );
  2078. m_mapColorTranslate[_2003CLR_EXPBTN_DARK]            = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( COLOR_3DSHADOW, this ), 0.0, -0.05, 0.0 ) );
  2079. m_mapColorTranslate[_2003CLR_EXPBTN_HOVER_LIGHT]     = m_mapColorTranslate[_2003CLR_EXPBTN_HOVER_DARK] =
  2080. InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_HILIGHT, this ), 0.0, 0.30, 0.0 ) );
  2081. m_mapColorTranslate[_2003CLR_EXPBTN_PRESSED_LIGHT]   = m_mapColorTranslate[_2003CLR_EXPBTN_PRESSED_DARK] =
  2082. InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_HILIGHT, this ), 0.0, 0.60, 0.0 ) );
  2083. m_mapColorTranslate[_2003CLR_EXPGLYPH_LIGHT]         = COLOR_WINDOW;
  2084. m_mapColorTranslate[_2003CLR_EXPGLYPH_DARK]          = COLOR_BTNTEXT;
  2085. m_mapColorTranslate[_2003CLR_STATUSBAR_ITEM]         = COLOR_3DSHADOW;
  2086. m_mapColorTranslate[_2003CLR_MLA_NORM_LEFT]          = InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_WINDOW, this ), GetColor( XPCLR_3DFACE_NORMAL, this ), 0 ) );
  2087. m_mapColorTranslate[_2003CLR_MLA_NORM_MIDDLE]        = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_3DFACE_DARK, this ), 0.00, 0.40, 0.00 ) );
  2088. m_mapColorTranslate[_2003CLR_MLA_NORM_RIGHT]         = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( XPCLR_3DFACE_DARK, this ), 0.00, -0.04, 0.00 ) );
  2089. m_mapColorTranslate[_2003CLR_MLA_RARELY_LEFT]        = InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_WINDOW, this ), GetColor( XPCLR_3DFACE_DARK, this ), 500 ) );
  2090. m_mapColorTranslate[_2003CLR_MLA_RARELY_MIDDLE]      = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( _2003CLR_MLA_NORM_RIGHT, this ), 0.00, 0.30, 0.00 ) );
  2091. m_mapColorTranslate[_2003CLR_MLA_RARELY_RIGHT]       = InstallColor( CExtBitmap::stat_HLS_Adjust( GetColor( _2003CLR_MLA_NORM_RIGHT, this ), 0.00, -0.04, 0.00 ) );
  2092. m_mapColorTranslate[_2003CLR_TBB_BK_COMBINED_TOP]    = m_mapColorTranslate[_2003CLR_MLA_NORM_LEFT];
  2093. m_mapColorTranslate[_2003CLR_TBB_BK_COMBINED_BOTTOM] = m_mapColorTranslate[_2003CLR_MLA_NORM_RIGHT];
  2094. // Button colors
  2095. m_mapColorTranslate[_2003CLR_BTN_HOVER_LEFT]         = InstallColor( GetColor( CLR_3DFACE_IN, this ) );
  2096. m_mapColorTranslate[_2003CLR_BTN_HOVER_RIGHT]        = InstallColor( GetColor( CLR_3DFACE_IN, this ) );
  2097. m_mapColorTranslate[_2003CLR_BTN_PRESSED_LEFT]       = InstallColor( GetColor( CLR_3DFACE_IN, this ) );
  2098. m_mapColorTranslate[_2003CLR_BTN_PRESSED_RIGHT]      = InstallColor( GetColor( CLR_3DFACE_IN, this ) );
  2099. m_mapColorTranslate[_2003CLR_BTN_HP_LEFT]            = InstallColor( GetColor( XPCLR_HILIGHT, this ) );
  2100. m_mapColorTranslate[_2003CLR_BTN_HP_RIGHT]           = InstallColor( GetColor( XPCLR_HILIGHT, this ) );
  2101. // page navigator colors
  2102. m_mapColorTranslate[_2003CLR_PN_BORDER]              = InstallColor( GetColor( COLOR_3DSHADOW, this ) );
  2103. m_mapColorTranslate[_2003CLR_PN_GRIPPER_LIGHT]       = InstallColor( GetColor( COLOR_3DLIGHT, this ) );
  2104. m_mapColorTranslate[_2003CLR_PN_GRIPPER_DARK]        = InstallColor( GetColor( COLOR_3DSHADOW, this ) );
  2105. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_LIGHT]  = InstallColor( GetColor( COLOR_3DHILIGHT, this ) );
  2106. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_DARK]   = InstallColor( GetColor( COLOR_3DLIGHT, this ) );
  2107. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_HOVER_LIGHT] = m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_LIGHT];
  2108. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_HOVER_DARK]  = m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_DARK];
  2109. m_mapColorTranslate[_2003CLR_PN_PANE_CAPTION_BOTTOM_LINE] = m_mapColorTranslate[_2003CLR_PN_BORDER];
  2110. m_mapColorTranslate[_2003CLR_PN_ITEM_LIGHT]          = InstallColor( GetColor( COLOR_3DHILIGHT, this ) );
  2111. m_mapColorTranslate[_2003CLR_PN_ITEM_DARK]           = InstallColor( GetColor( COLOR_3DLIGHT, this ) );
  2112. // Popup menu Expand Button
  2113. m_mapColorTranslate[_2003CLR_EXPBTN_CIRCLE_LIGHT]    = InstallColor( GetColor( XPCLR_3DFACE_NORMAL, this ) );
  2114. m_mapColorTranslate[_2003CLR_EXPBTN_CIRCLE_DARK]     = InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_WINDOW, this ), GetColor( COLOR_3DFACE, this ), 550 ) );
  2115. // Task Pane Colors
  2116. m_mapColorTranslate[ CLR_TASK_PANE_BK_TOP ]          = InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ), GetColor( COLOR_WINDOW, this ), 50 ) );
  2117. m_mapColorTranslate[ CLR_TASK_PANE_BK_BOTTOM ]       = InstallColor( GetColor( COLOR_3DFACE, this ) );
  2118. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL ]              = COLOR_WINDOWTEXT;
  2119. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL_HOVERED ]      = COLOR_WINDOWTEXT;
  2120. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED ]         = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL ];
  2121. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_HIGHLIGHTED_HOVERED ] = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_TEXT_NORMAL_HOVERED ];
  2122. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_NORMAL ] = 
  2123. InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ),  GetColor( COLOR_WINDOW, this ), 39 ) );
  2124. m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_NORMAL ] = 
  2125. InstallColor( CExtBitmap::stat_RGB_Enlight( GetColor( COLOR_3DFACE, this ), GetColor( COLOR_WINDOW, this ), 70 ) );
  2126. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_HIGHLIGHTED]  = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_NORMAL ];
  2127. m_mapColorTranslate[CLR_TASK_PANE_GROUP_CAPTION_BK_RIGHT_HIGHLIGHTED] = m_mapColorTranslate[ CLR_TASK_PANE_GROUP_CAPTION_BK_LEFT_NORMAL ];
  2128. } // if use system colors
  2129. } // if( stat_GetBPP() > 8 )
  2130. else
  2131. {
  2132. m_mapColorTranslate[_2003CLR_STATUSBAR_ITEM] = InstallColor( GetColor( COLOR_3DSHADOW, this ) );
  2133. } // else from if( stat_GetBPP() > 8 )
  2134. }
  2135. void CExtPaintManagerOffice2003::PaintControlBarClientArea(
  2136. CDC & dc,
  2137. const RECT & rcClient,
  2138. CObject * pHelperSrc,
  2139. LPARAM lParam // = 0L
  2140. )
  2141. {
  2142. ASSERT_VALID( this );
  2143. ASSERT( dc.GetSafeHdc() != NULL );
  2144. if( ::IsRectEmpty( &rcClient ) || ( ! dc.RectVisible( &rcClient ) ) )
  2145. return;
  2146. if( IsHighContrast() )
  2147. {
  2148. CExtPaintManagerXP::PaintControlBarClientArea( dc, rcClient, pHelperSrc, lParam );
  2149. return;
  2150. }
  2151. CExtToolControlBar * pToolBar = NULL;
  2152. CWnd * pFrame = NULL;
  2153. if( pHelperSrc != NULL )
  2154. {
  2155. pToolBar = DYNAMIC_DOWNCAST( CExtToolControlBar, pHelperSrc );
  2156. if( pToolBar != NULL )
  2157. {
  2158. if( ! ( pToolBar->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) )
  2159. || pToolBar->IsKindOf( RUNTIME_CLASS(CExtPanelControlBar) )
  2160. )
  2161. )
  2162. { // not menu bar, not panel bar
  2163. if( pToolBar->m_pDockSite != NULL )
  2164. {
  2165. if( pToolBar->m_bForceNoBalloonWhenRedockable
  2166. && (! pToolBar->IsFloating() )
  2167. )
  2168. pToolBar = NULL;
  2169. else
  2170. if( ( pToolBar->m_pDockBar == NULL || pToolBar->IsFloating() )
  2171. &&  (!pToolBar->m_bForceBalloonGradientInDialogs)
  2172. )
  2173. pToolBar = NULL;
  2174. } // if( pToolBar->m_pDockSite != NULL )
  2175. else
  2176. {
  2177. CWnd * pWndOwner = pToolBar->GetOwner();
  2178. if( pWndOwner != NULL )
  2179. {
  2180. pFrame =
  2181. DYNAMIC_DOWNCAST( CFrameWnd, pWndOwner );
  2182. if( pFrame == NULL )
  2183. {
  2184. if( (pWndOwner->GetStyle()&WS_CHILD) != 0 )
  2185. pFrame = pWndOwner->GetParentFrame();
  2186. } // if( pFrame == NULL )
  2187. if( pFrame != NULL 
  2188. &&  (!pToolBar->m_bForceBalloonGradientInDialogs)
  2189. )
  2190. {
  2191. if( pFrame->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) ) )
  2192. { // if ext mini dock frame
  2193. } // if ext mini dock frame
  2194. else
  2195. {
  2196. CControlBar * pDocker =
  2197. ((CFrameWnd *)pFrame)->
  2198. GetControlBar( AFX_IDW_DOCKBAR_TOP );
  2199. if( pDocker == NULL )
  2200. {
  2201. pFrame = NULL;
  2202. pToolBar = NULL;
  2203. }
  2204. else if( ! pDocker->IsKindOf(RUNTIME_CLASS(CExtDockOuterBar)) )
  2205. {
  2206. pFrame = NULL;
  2207. pToolBar = NULL;
  2208. }
  2209. }
  2210. } // if( pFrame != NULL )
  2211. } // if( pWndOwner != NULL )
  2212. } // else from if( pToolBar->m_pDockSite != NULL )
  2213. } // not menu bar, not panel bar
  2214. } // if( pToolBar != NULL )
  2215. } // if( pHelperSrc != NULL )
  2216. if( pToolBar == NULL
  2217. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  2218. )
  2219. {
  2220. CWnd * pWnd = DYNAMIC_DOWNCAST( CWnd, pHelperSrc );
  2221. if( pWnd != NULL
  2222. && GetCb2DbTransparentMode( pWnd )
  2223. && PaintDockerBkgnd( true, dc, pWnd )
  2224. )
  2225. return;
  2226. CExtPaintManagerXP::PaintControlBarClientArea(
  2227. dc,
  2228. rcClient,
  2229. pHelperSrc,
  2230. lParam
  2231. );
  2232. return;
  2233. }
  2234. CRect rcPaintGradient;
  2235. if( pFrame == NULL )
  2236. pFrame = (pToolBar->m_pDockSite == NULL)
  2237. ? pToolBar->GetParent()
  2238. : pToolBar->GetParentFrame()
  2239. ;
  2240. ASSERT_VALID( pFrame );
  2241. pFrame->GetClientRect( &rcPaintGradient );
  2242. pFrame->ClientToScreen( &rcPaintGradient );
  2243. pToolBar->ScreenToClient( &rcPaintGradient );
  2244. if( ::IsRectEmpty( &rcPaintGradient )
  2245. || ( ! dc.RectVisible( &rcPaintGradient ) )
  2246. )
  2247. return;
  2248. bool bHorz = true;
  2249. if( pToolBar->IsDocked() )
  2250. bHorz = (! pToolBar->IsDockedVertically() );
  2251. PaintDockerBkgnd( true, dc, pToolBar );
  2252. if( pToolBar->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) )
  2253. || pToolBar->IsKindOf( RUNTIME_CLASS(CExtPanelControlBar) )
  2254. || ( ( pToolBar->m_pDockSite == NULL || pToolBar->m_bPresubclassDialogMode )
  2255. && (! pToolBar->m_bForceBalloonGradientInDialogs )
  2256. )
  2257. )
  2258. return; // if dockbar-like background style
  2259. pToolBar->GetWindowRect( &rcPaintGradient );
  2260. pToolBar->ScreenToClient( &rcPaintGradient );
  2261. int nIdxClrTbFillMargin = -1;
  2262. CRgn _rgnBaloonRight, _rgnBaloonLeft, _rgnBaloonSet;
  2263. CSize _sizeRoundedAreaMerics = FixedBar_GetRoundedAreaMerics();
  2264. if( g_PaintManager.m_bIsWin9x )
  2265. { // region fix for Win9x
  2266. if( _sizeRoundedAreaMerics.cx > 0
  2267. && _sizeRoundedAreaMerics.cx <= 4
  2268. )
  2269. _sizeRoundedAreaMerics.cx +=
  2270. __WIN9X_FIXED_BAR_ROUNDED_AREA_ADJUST_X;
  2271. if( _sizeRoundedAreaMerics.cy > 0
  2272. && _sizeRoundedAreaMerics.cy <= 4
  2273. )
  2274. _sizeRoundedAreaMerics.cy +=
  2275. __WIN9X_FIXED_BAR_ROUNDED_AREA_ADJUST_Y;
  2276. } // region fix for Win9x
  2277. if( _sizeRoundedAreaMerics.cx > 0
  2278. && _sizeRoundedAreaMerics.cy > 0
  2279. && pToolBar->IsDocked()
  2280. )
  2281. { // if balloon style
  2282. nIdxClrTbFillMargin = m_nIdxClrTbFillMargin;
  2283. if( pToolBar->IsBarWithGripper() )
  2284. {
  2285. if( _rgnBaloonRight.CreateRoundRectRgn(
  2286. 0,
  2287. 0,
  2288. rcClient.right - rcClient.left,
  2289. rcClient.bottom - rcClient.top,
  2290. _sizeRoundedAreaMerics.cx,
  2291. _sizeRoundedAreaMerics.cy
  2292. )
  2293. && _rgnBaloonLeft.CreateRectRgn(
  2294. 0,
  2295. 0,
  2296. bHorz
  2297. ? (_sizeRoundedAreaMerics.cx + 2)
  2298. : (rcClient.right - rcClient.left - 1),
  2299. bHorz
  2300. ? (rcClient.bottom - rcClient.top - 1)
  2301. : (_sizeRoundedAreaMerics.cy + 2)
  2302. )
  2303. && _rgnBaloonSet.CreateRectRgn( 0, 0, 1, 1 )
  2304. && _rgnBaloonSet.CombineRgn(
  2305. &_rgnBaloonLeft,
  2306. &_rgnBaloonRight,
  2307. RGN_OR
  2308. ) != ERROR
  2309. )
  2310. dc.SelectClipRgn( &_rgnBaloonSet );
  2311. #ifdef _DEBUG
  2312. else
  2313. {
  2314. ASSERT( FALSE );
  2315. }
  2316. #endif // _DEBUG
  2317. } // if( pToolBar->IsBarWithGripper() )
  2318. else
  2319. {
  2320. if( _rgnBaloonSet.CreateRoundRectRgn(
  2321. 0,
  2322. 0,
  2323. (rcClient.right - rcClient.left - 1),
  2324. (rcClient.bottom - rcClient.top - 1),
  2325. _sizeRoundedAreaMerics.cx,
  2326. _sizeRoundedAreaMerics.cy
  2327. )
  2328. )
  2329. {
  2330. dc.SelectClipRgn( &_rgnBaloonSet );
  2331. }
  2332. #ifdef _DEBUG
  2333. else
  2334. {
  2335. ASSERT( FALSE );
  2336. }
  2337. #endif // _DEBUG
  2338. } // else from if( pToolBar->IsBarWithGripper() )
  2339. }  // if balloon style
  2340. OnPaintToolBarGradient( dc, rcPaintGradient, bHorz, pHelperSrc, lParam );
  2341. if( nIdxClrTbFillMargin >= 0 )
  2342. {
  2343. CPen _pen( PS_SOLID, 1, GetColor( m_nIdxClrTbFillMargin, pHelperSrc, lParam ) );
  2344. CPen * pOldPen = dc.SelectObject( &_pen );
  2345. CRect rcClient;
  2346. pToolBar->GetClientRect( &rcClient );
  2347. if( bHorz )
  2348. {
  2349. dc.MoveTo( rcClient.left, rcClient.bottom - 2 );
  2350. dc.LineTo( rcClient.right, rcClient.bottom - 2 );
  2351. } // if( bHorz )
  2352. else
  2353. {
  2354. dc.MoveTo( rcClient.right - 2, rcClient.top );
  2355. dc.LineTo( rcClient.right - 2, rcClient.bottom );
  2356. } // else from if( bHorz )
  2357. dc.SelectObject( pOldPen );
  2358. } // if( nIdxClrTbFillMargin >= 0 )
  2359. if( _rgnBaloonSet.GetSafeHandle() != NULL )
  2360. dc.SelectClipRgn( NULL );
  2361. }
  2362. void CExtPaintManagerNativeXP::PaintControlBarClientArea(
  2363. CDC & dc,
  2364. const RECT & rcClient,
  2365. CObject * pHelperSrc,
  2366. LPARAM lParam // = 0L
  2367. )
  2368. {
  2369. ASSERT_VALID( this );
  2370. ASSERT( dc.GetSafeHdc() != NULL );
  2371. if( ::IsRectEmpty( &rcClient ) || ( ! dc.RectVisible( &rcClient ) ) )
  2372. return;
  2373. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2374. {
  2375. CExtPaintManager::PaintControlBarClientArea( dc, rcClient, pHelperSrc, lParam );
  2376. return;
  2377. } // if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2378. if( pHelperSrc != NULL
  2379. && pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  2380. && ( ((CExtToolControlBar*)pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  2381. && RenderCustomBackground( true, dc, pHelperSrc, lParam )
  2382. )
  2383. return;
  2384. bool bRebarDrawingStyle = false;
  2385. CExtControlBar * pWnd = DYNAMIC_DOWNCAST( CExtControlBar, pHelperSrc );
  2386. if( pWnd != NULL )
  2387. {
  2388. ASSERT_VALID( pWnd );
  2389. if( pWnd->m_pDockBar->GetSafeHwnd() != NULL )
  2390. {
  2391. ASSERT_VALID( pWnd->m_pDockBar );
  2392. if( pWnd->IsFixedDockStyle() && ( ! pWnd->IsFloating() ) )
  2393. bRebarDrawingStyle = true;
  2394. }
  2395. }
  2396. if( bRebarDrawingStyle )
  2397. {
  2398. CRect rcPaint;
  2399. pWnd->m_pDockBar->GetWindowRect( &rcPaint );
  2400. pWnd->ScreenToClient( &rcPaint );
  2401. if( g_PaintManager.m_UxTheme.OpenThemeData( pWnd->GetSafeHwnd(), VSCLASS_REBAR ) != NULL )
  2402. {
  2403. VERIFY( 
  2404. g_PaintManager.m_UxTheme.DrawBackground(
  2405. pWnd->GetSafeHwnd(),
  2406. dc.GetSafeHdc(), 
  2407. 0, 
  2408. 0, 
  2409. &rcPaint, 
  2410. &rcPaint
  2411. ) == S_OK
  2412. );
  2413. g_PaintManager.m_UxTheme.CloseThemeData();
  2414. }
  2415. }
  2416. else
  2417. dc.FillSolidRect( &rcClient, ::GetSysColor( COLOR_3DFACE ) );
  2418. }
  2419. void CExtPaintManagerOffice2003::OnPaintToolBarGradient(
  2420. CDC & dc,
  2421. CRect rcPaintGradient,
  2422. bool bHorz,
  2423. CObject * pHelperSrc,
  2424. LPARAM lParam, // = 0L
  2425. COLORREF clrLeft, // = COLORREF(-1L)
  2426. COLORREF clrRight // = COLORREF(-1L)
  2427. ) const
  2428. {
  2429. ASSERT_VALID( this );
  2430. if( clrLeft != COLORREF(-1L) && clrRight != COLORREF(-1L) )
  2431. stat_PaintGradientRect(  dc, rcPaintGradient, clrLeft, clrRight, bHorz  );
  2432. else
  2433. {
  2434. CExtPaintManagerOffice2003 * pThis = const_cast < CExtPaintManagerOffice2003 * > ( this );
  2435. if( OnQueryUseThemeColors() )
  2436. {
  2437. // if use WinXP themed colors
  2438. COLORREF clrLeft   = pThis->GetColor( _2003CLR_TOOLBAR_GRADIENT_LIGHT,  pHelperSrc, lParam );
  2439. COLORREF clrMiddle = pThis->GetColor( _2003CLR_TOOLBAR_GRADIENT_MIDDLE, pHelperSrc, lParam );
  2440. COLORREF clrRight  = pThis->GetColor( _2003CLR_TOOLBAR_GRADIENT_DARK,   pHelperSrc, lParam );
  2441. stat_PaintGradientRect2steps( dc, rcPaintGradient, clrLeft, clrMiddle, clrRight, bHorz, 5, 11 );
  2442. } // if( OnQueryUseThemeColors() )
  2443. else
  2444. {
  2445. clrLeft = bHorz 
  2446. ? pThis->GetColor( _2003CLR_MLA_NORM_RIGHT, pHelperSrc, lParam )
  2447. : pThis->GetColor( _2003CLR_MLA_NORM_LEFT,  pHelperSrc, lParam );
  2448. clrRight = bHorz 
  2449. ? pThis->GetColor( _2003CLR_MLA_NORM_LEFT,  pHelperSrc, lParam )
  2450. : pThis->GetColor( _2003CLR_MLA_NORM_RIGHT, pHelperSrc, lParam );
  2451. stat_PaintGradientRect( dc, rcPaintGradient, clrLeft, clrRight, bHorz  );
  2452. } // else from if( OnQueryUseThemeColors() )
  2453. } // else from if( clrLeft != COLORREF(-1L) && clrRight != COLORREF(-1L) )
  2454. }
  2455. void CExtPaintManagerOffice2003::PaintDockBarClientArea(
  2456. CDC & dc,
  2457. const RECT & rcClient,
  2458. CObject * pHelperSrc,
  2459. LPARAM lParam // = 0L
  2460. )
  2461. {
  2462. ASSERT_VALID( this );
  2463. ASSERT( dc.GetSafeHdc() != NULL );
  2464. if( ::IsRectEmpty( &rcClient )
  2465. || ( ! dc.RectVisible( &rcClient ) )
  2466. )
  2467. return;
  2468. if( IsHighContrast() )
  2469. {
  2470. CExtPaintManagerXP::PaintDockBarClientArea(
  2471. dc,
  2472. rcClient,
  2473. pHelperSrc,
  2474. lParam
  2475. );
  2476. return;
  2477. }
  2478. CRect rcPaintGradient( 0, 0, 0, 0 );
  2479. CExtDockOuterBar * pOuterDocker = NULL;
  2480. if( pHelperSrc != NULL )
  2481. {
  2482. pOuterDocker =
  2483. DYNAMIC_DOWNCAST(
  2484. CExtDockOuterBar,
  2485. pHelperSrc
  2486. );
  2487. if( pOuterDocker != NULL )
  2488. {
  2489. CFrameWnd * pFrame =
  2490. pOuterDocker->GetParentFrame();
  2491. ASSERT_VALID( pFrame );
  2492. pFrame->GetClientRect( &rcPaintGradient );
  2493. pFrame->ClientToScreen( &rcPaintGradient );
  2494. pOuterDocker->ScreenToClient( &rcPaintGradient );
  2495. if( ::IsRectEmpty( &rcPaintGradient )
  2496. || ( ! dc.RectVisible( &rcPaintGradient ) )
  2497. )
  2498. return;
  2499. }
  2500. }
  2501. if( pOuterDocker == NULL
  2502. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  2503. )
  2504. {
  2505. CExtPaintManagerXP::PaintDockBarClientArea(
  2506. dc,
  2507. rcClient,
  2508. pHelperSrc,
  2509. lParam
  2510. );
  2511. return;
  2512. }
  2513. if( RenderCustomBackground(
  2514. true,
  2515. dc,
  2516. pHelperSrc,
  2517. lParam
  2518. )
  2519. )
  2520. return;
  2521. PaintDockerBkgnd( 
  2522. true,
  2523. dc,  
  2524. rcPaintGradient,
  2525. rcClient
  2526. );
  2527. }
  2528. void CExtPaintManagerNativeXP::PaintDockBarClientArea(
  2529. CDC & dc,
  2530. const RECT & rcClient,
  2531. CObject * pHelperSrc,
  2532. LPARAM lParam // = 0L
  2533. )
  2534. {
  2535. ASSERT_VALID( this );
  2536. ASSERT( dc.GetSafeHdc() != NULL );
  2537. if( ::IsRectEmpty( &rcClient ) || ( ! dc.RectVisible( &rcClient ) ) )
  2538. return;
  2539. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2540. {
  2541. CExtPaintManager::PaintDockBarClientArea( dc, rcClient, pHelperSrc, lParam );
  2542. return;
  2543. } // if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2544. if( RenderCustomBackground( true, dc, pHelperSrc, lParam ) )
  2545. return;
  2546. HWND hWnd = NULL;
  2547. CWnd * pWnd = DYNAMIC_DOWNCAST( CWnd, pHelperSrc );
  2548. if( pWnd != NULL )
  2549. {
  2550. ASSERT_VALID( pWnd );
  2551. hWnd = pWnd->GetSafeHwnd();
  2552. }
  2553. if( g_PaintManager.m_UxTheme.OpenThemeData( hWnd, VSCLASS_REBAR ) != NULL )
  2554. {
  2555. VERIFY( 
  2556. g_PaintManager.m_UxTheme.DrawBackground(
  2557. hWnd,
  2558. dc.GetSafeHdc(), 
  2559. 0, 
  2560. 0, 
  2561. &rcClient, 
  2562. &rcClient
  2563. ) == S_OK
  2564. );
  2565. g_PaintManager.m_UxTheme.CloseThemeData();
  2566. }
  2567. }
  2568. CExtPaintManager::PAINTDOCKINGFRAMEDATA::PAINTDOCKINGFRAMEDATA()
  2569. : m_pHelperSrc( NULL )
  2570. , m_lParam( 0L )
  2571. , m_rcWindow( 0,0,0,0 )
  2572. , m_rcClient( 0,0,0,0 )
  2573. , m_bActive( false )
  2574. , m_bFloating( false )
  2575. , m_bExtBar( false )
  2576. , m_bSideBar( false )
  2577. {
  2578. }
  2579. CExtPaintManager::PAINTDOCKINGFRAMEDATA::PAINTDOCKINGFRAMEDATA(
  2580. CObject * pHelperSrc,
  2581. const RECT & rcWindow,
  2582. const RECT & rcClient,
  2583. bool bActive,
  2584. bool bFloating,
  2585. bool bExtBar,
  2586. bool bSideBar // = false
  2587. )
  2588. : m_pHelperSrc( pHelperSrc )
  2589. , m_lParam( 0L )
  2590. , m_rcWindow( rcWindow )
  2591. , m_rcClient( rcClient )
  2592. , m_bActive( bActive )
  2593. , m_bFloating( bFloating )
  2594. , m_bExtBar( bExtBar )
  2595. , m_bSideBar( bSideBar )
  2596. {
  2597. }
  2598. void CExtPaintManager::PaintDockingFrame(
  2599. CDC & dc,
  2600. CExtPaintManager::PAINTDOCKINGFRAMEDATA & _pdfd
  2601. )
  2602. {
  2603. ASSERT_VALID( this );
  2604. ASSERT( dc.GetSafeHdc() != NULL );
  2605. if( _pdfd.m_rcWindow.IsRectEmpty() )
  2606. return;
  2607. dc.ExcludeClipRect( _pdfd.m_rcClient );
  2608. CRect rcWnd( _pdfd.m_rcWindow );
  2609. COLORREF clr3dFace = GetColor( CLR_3DFACE_OUT, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2610. COLORREF clr3dHilight = GetColor( CLR_3DHILIGHT_OUT, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2611. COLORREF clr3dShadow = GetColor( CLR_3DSHADOW_OUT, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2612. COLORREF clr3dDkShadow = GetColor( CLR_3DDKSHADOW_OUT, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2613. if( _pdfd.m_pHelperSrc != NULL
  2614. && _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  2615. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_pDockSite != NULL )
  2616. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  2617. )
  2618. return;
  2619. dc.FillSolidRect(
  2620. &rcWnd,
  2621. clr3dFace
  2622. );
  2623. if( _pdfd.m_bFloating )
  2624. {
  2625. dc.Draw3dRect(
  2626. &rcWnd, clr3dFace, clr3dDkShadow);
  2627. rcWnd.DeflateRect(1,1);
  2628. dc.Draw3dRect(
  2629. &rcWnd, clr3dHilight, clr3dShadow);
  2630. }
  2631. else
  2632. {
  2633. if( !_pdfd.m_bExtBar )
  2634. {
  2635. dc.Draw3dRect(
  2636. &rcWnd, clr3dHilight, clr3dShadow);
  2637. }
  2638. }
  2639. dc.IntersectClipRect( _pdfd.m_rcWindow );
  2640. }
  2641. void CExtPaintManagerXP::PaintDockingFrame(
  2642. CDC & dc,
  2643. CExtPaintManager::PAINTDOCKINGFRAMEDATA & _pdfd
  2644. )
  2645. {
  2646. ASSERT_VALID( this );
  2647. ASSERT( dc.GetSafeHdc() != NULL );
  2648. if( _pdfd.m_rcWindow.IsRectEmpty() )
  2649. return;
  2650. dc.ExcludeClipRect( _pdfd.m_rcClient );
  2651. CRect rcWnd( _pdfd.m_rcWindow );
  2652. COLORREF clr3dFace = GetColor( COLOR_3DFACE, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2653. COLORREF clrDark = GetColor( COLOR_3DSHADOW, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2654. COLORREF clrBkOld = dc.GetBkColor();
  2655. COLORREF clrBkNew =
  2656. GetColor(
  2657. ( _pdfd.m_bFloating )
  2658. ? ( _pdfd.m_bExtBar
  2659. ? XPCLR_3DFACE_FLOAT_R
  2660. : XPCLR_3DFACE_FLOAT_F
  2661. )
  2662. : CLR_3DFACE_OUT
  2663. ,
  2664. _pdfd.m_pHelperSrc,
  2665. _pdfd.m_lParam 
  2666. );
  2667. if( _pdfd.m_bFloating )
  2668. {
  2669. dc.Draw3dRect( &rcWnd, clrDark, clrDark);
  2670. rcWnd.DeflateRect(1,1);
  2671. dc.Draw3dRect( &rcWnd, clrDark, clrDark);
  2672. rcWnd.DeflateRect(1,1);
  2673. dc.Draw3dRect( &rcWnd, clrBkNew, clrBkNew);
  2674. rcWnd.DeflateRect(0,0,1,1);
  2675. dc.SetPixel( rcWnd.left, rcWnd.top, clrDark );
  2676. dc.SetPixel( rcWnd.left, rcWnd.bottom, clrDark );
  2677. dc.SetPixel( rcWnd.right, rcWnd.top, clrDark );
  2678. dc.SetPixel( rcWnd.right, rcWnd.bottom, clrDark );
  2679. } // if( _pdfd.m_bFloating )
  2680. else
  2681. {
  2682. if( _pdfd.m_pHelperSrc != NULL
  2683. && _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  2684. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_pDockSite != NULL )
  2685. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  2686. )
  2687. return;
  2688. dc.FillSolidRect( &rcWnd, clrBkNew );
  2689. if( ! _pdfd.m_bExtBar )
  2690. dc.Draw3dRect( &rcWnd, clr3dFace, clr3dFace);
  2691. if( _pdfd.m_pHelperSrc != NULL
  2692. && _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  2693. && (!_pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) ))
  2694. && IsHighContrast()
  2695. )
  2696. {
  2697. CExtToolControlBar * pBar =
  2698. STATIC_DOWNCAST( CExtToolControlBar, _pdfd.m_pHelperSrc );
  2699. ASSERT_VALID( pBar );
  2700. if( ! pBar->IsFloating() )
  2701. {
  2702. COLORREF clrOldText = 
  2703. dc.SetTextColor( GetColor( COLOR_3DSHADOW, _pdfd.m_pHelperSrc, _pdfd.m_lParam ) );
  2704. dc.DrawFocusRect( &rcWnd );
  2705. dc.SetTextColor( clrOldText );
  2706. }
  2707. }
  2708. if( (!_pdfd.m_bSideBar)
  2709. && (::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8 )
  2710. )
  2711. {
  2712. static WORD hatchBits[8] =
  2713. {
  2714. 0xAA,
  2715. 0x55,
  2716. 0xAA,
  2717. 0x55,
  2718. 0xAA,
  2719. 0x55,
  2720. 0xAA,
  2721. 0x55,
  2722. };
  2723. CBrush br;
  2724. CBitmap bmp;
  2725. bmp.CreateBitmap( 8, 8, 1, 1, hatchBits );
  2726. br.CreatePatternBrush( &bmp );
  2727. LOGBRUSH lbr;
  2728. br.GetLogBrush( &lbr );
  2729. HPEN hPenDesired =
  2730. ::ExtCreatePen(
  2731. PS_GEOMETRIC,
  2732. 1,
  2733. &lbr,
  2734. 0,
  2735. NULL
  2736. );
  2737. if( hPenDesired == NULL )
  2738. {
  2739. COLORREF clrDesiredSolidPen =
  2740. GetColor( COLOR_3DSHADOW, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  2741. hPenDesired =
  2742. ::CreatePen(
  2743. PS_SOLID,
  2744. 1,
  2745. clrDesiredSolidPen
  2746. );
  2747. if( hPenDesired == NULL )
  2748. {
  2749. hPenDesired = (HPEN)
  2750. ::GetStockObject(BLACK_PEN);
  2751. ASSERT( hPenDesired != NULL );
  2752. } // if( hPenDesired == NULL )
  2753. } // if( hPenDesired == NULL )
  2754. // CPen pen( PS_GEOMETRIC, 1, &lbr );
  2755. CPen pen;
  2756. VERIFY( pen.Attach( hPenDesired ) );
  2757. CPen * pOldPen = dc.SelectObject( &pen );
  2758. if( m_bHelperXpStyle8BitBarRect )
  2759. {
  2760. dc.MoveTo( rcWnd.left, rcWnd.top );
  2761. dc.LineTo( rcWnd.right-1, rcWnd.top );
  2762. dc.LineTo( rcWnd.right-1, rcWnd.bottom-1 );
  2763. dc.LineTo( rcWnd.left, rcWnd.bottom-1 );
  2764. dc.LineTo( rcWnd.left, rcWnd.top );
  2765. } // if( m_bHelperXpStyle8BitBarRect )
  2766. else
  2767. {
  2768. static const SIZE g_sizeRO = { 2, 2 };
  2769. dc.MoveTo( rcWnd.left+g_sizeRO.cx, rcWnd.top );
  2770. dc.LineTo( rcWnd.right-1-g_sizeRO.cx, rcWnd.top );
  2771. dc.LineTo( rcWnd.right-1, rcWnd.top+g_sizeRO.cy );
  2772. dc.LineTo( rcWnd.right-1, rcWnd.bottom-1-g_sizeRO.cy );
  2773. dc.LineTo( rcWnd.right-1-g_sizeRO.cx, rcWnd.bottom-1 );
  2774. dc.LineTo( rcWnd.left+g_sizeRO.cx, rcWnd.bottom-1 );
  2775. dc.LineTo( rcWnd.left, rcWnd.bottom-1-g_sizeRO.cy );
  2776. dc.LineTo( rcWnd.left, rcWnd.top+g_sizeRO.cy );
  2777. dc.LineTo( rcWnd.left+g_sizeRO.cx, rcWnd.top );
  2778. } // else from if( m_bHelperXpStyle8BitBarRect )
  2779. dc.SelectObject( pOldPen );
  2780. } // if( !_pdfd.m_bSideBar && ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) < 8 )
  2781. } // else from if( _pdfd.m_bFloating )
  2782. dc.SetBkColor( clrBkOld );
  2783. //dc.IntersectClipRect(rectWindow);
  2784. dc.SelectClipRgn(NULL);
  2785. }
  2786. void CExtPaintManagerOffice2003::PaintDockingFrame(
  2787. CDC & dc,
  2788. CExtPaintManager::PAINTDOCKINGFRAMEDATA & _pdfd
  2789. )
  2790. {
  2791. ASSERT_VALID( this );
  2792. ASSERT( dc.GetSafeHdc() != NULL );
  2793. if( _pdfd.m_rcWindow.IsRectEmpty() )
  2794. return;
  2795. if( IsHighContrast() )
  2796. {
  2797. CExtPaintManagerXP::PaintDockingFrame( dc, _pdfd );
  2798. return;
  2799. }
  2800. if( _pdfd.m_bFloating
  2801. //|| (!_pdfd.m_bExtBar)
  2802. //|| _pdfd.m_bSideBar
  2803. || _pdfd.m_pHelperSrc == NULL
  2804. || (! _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtControlBar) ) )
  2805. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  2806. )
  2807. {
  2808. CExtPaintManagerXP::PaintDockingFrame(
  2809. dc,
  2810. _pdfd
  2811. );
  2812. return;
  2813. }
  2814. }
  2815. void CExtPaintManagerNativeXP::PaintDockingFrame(
  2816. CDC & dc,
  2817. CExtPaintManager::PAINTDOCKINGFRAMEDATA & _pdfd
  2818. )
  2819. {
  2820. ASSERT_VALID( this );
  2821. ASSERT( dc.GetSafeHdc() != NULL );
  2822. if( _pdfd.m_rcWindow.IsRectEmpty() )
  2823. return;
  2824. if( _pdfd.m_pHelperSrc != NULL
  2825. && _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  2826. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_pDockSite != NULL )
  2827. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  2828. )
  2829. return;
  2830. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2831. {
  2832. CExtPaintManager::PaintDockingFrame(
  2833. dc,
  2834. _pdfd
  2835. );
  2836. return;
  2837. } // if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  2838. CWnd * pWnd =
  2839. DYNAMIC_DOWNCAST(
  2840. CWnd,
  2841. _pdfd.m_pHelperSrc
  2842. );
  2843. ASSERT( pWnd != NULL );
  2844. ASSERT_VALID( pWnd );
  2845. CRect rcWnd( _pdfd.m_rcWindow );
  2846. dc.ExcludeClipRect( _pdfd.m_rcClient );
  2847. dc.FillSolidRect(
  2848. &rcWnd,
  2849. ::GetSysColor( COLOR_3DFACE )
  2850. );
  2851. bool bRebarDrawingStyle = false;
  2852. CExtControlBar * pCB =
  2853. DYNAMIC_DOWNCAST(
  2854. CExtControlBar,
  2855. _pdfd.m_pHelperSrc
  2856. );
  2857. if( pCB != NULL )
  2858. {
  2859. ASSERT_VALID( pCB );
  2860. if( pCB->m_pDockBar->GetSafeHwnd() != NULL )
  2861. {
  2862. ASSERT_VALID( pCB->m_pDockBar );
  2863. if( pCB->IsFixedDockStyle() 
  2864. && (!pCB->IsFloating())
  2865. )
  2866. bRebarDrawingStyle = true;
  2867. }
  2868. }
  2869. if( bRebarDrawingStyle 
  2870. && (!_pdfd.m_bFloating)
  2871. && (!_pdfd.m_bExtBar)
  2872. )
  2873. {
  2874. CRect rcPaint;
  2875. pCB->m_pDockBar->GetWindowRect( &rcPaint );
  2876. pCB->ScreenToClient( &rcPaint );
  2877. CRect rcAdjust( 0, 0, 0, 0 );
  2878. FixedBar_AdjustClientRect(
  2879. pCB,
  2880. rcAdjust
  2881. );
  2882. rcPaint.DeflateRect( &rcAdjust );
  2883. if( g_PaintManager.m_UxTheme.OpenThemeData( pCB->GetSafeHwnd(), VSCLASS_REBAR ) != NULL )
  2884. {
  2885. VERIFY( 
  2886. g_PaintManager.m_UxTheme.DrawBackground(
  2887. pCB->GetSafeHwnd(),
  2888. dc.GetSafeHdc(), 
  2889. 0, 
  2890. 0, 
  2891. &rcPaint, 
  2892. &rcPaint
  2893. ) == S_OK
  2894. );
  2895. COLORREF clrEdgeShadow = COLORREF( -1L );
  2896. VERIFY( 
  2897. g_PaintManager.m_UxTheme.GetThemeColor(
  2898. RP_BAND, 
  2899. 0,
  2900. TMT_EDGESHADOWCOLOR, 
  2901. &clrEdgeShadow
  2902. ) == S_OK
  2903. );
  2904. if( clrEdgeShadow != COLORREF( -1L ) )
  2905. {
  2906. dc.Draw3dRect(
  2907. &rcWnd,
  2908. ::GetSysColor( COLOR_BTNHIGHLIGHT ),
  2909. clrEdgeShadow
  2910. );
  2911. }
  2912. g_PaintManager.m_UxTheme.CloseThemeData();
  2913. }
  2914. }
  2915. if( _pdfd.m_bFloating )
  2916. {
  2917. if( g_PaintManager.m_UxTheme.OpenThemeData(  pCB->GetSafeHwnd(), VSCLASS_WINDOW ) != NULL )
  2918. {
  2919. // !!! TODO
  2920. // _pdfd.m_bActive = true;
  2921. // !!! TODO
  2922. INT nStateID = 
  2923. _pdfd.m_bActive
  2924. ? FS_ACTIVE
  2925. : FS_INACTIVE;
  2926. CRect rcNcLeft( _pdfd.m_rcWindow );
  2927. rcNcLeft.right = _pdfd.m_rcClient.left;
  2928. if( rcNcLeft.Width() > 0 )
  2929. {
  2930. VERIFY( 
  2931. g_PaintManager.m_UxTheme.DrawBackground(
  2932. pCB->GetSafeHwnd(), 
  2933. dc.GetSafeHdc(), 
  2934. WP_SMALLFRAMELEFT, 
  2935. nStateID, 
  2936. &rcNcLeft, 
  2937. &rcNcLeft
  2938. ) == S_OK
  2939. );
  2940. }
  2941. CRect rcNcRight( _pdfd.m_rcWindow );
  2942. rcNcRight.left = _pdfd.m_rcClient.right;
  2943. if( rcNcRight.Width() > 0 )
  2944. {
  2945. VERIFY( 
  2946. g_PaintManager.m_UxTheme.DrawBackground(
  2947. pCB->GetSafeHwnd(), 
  2948. dc.GetSafeHdc(), 
  2949. WP_SMALLFRAMERIGHT, 
  2950. nStateID, 
  2951. &rcNcRight, 
  2952. &rcNcRight
  2953. ) == S_OK
  2954. );
  2955. }
  2956. CRect rcNcTop( _pdfd.m_rcWindow );
  2957. rcNcTop.bottom = _pdfd.m_rcClient.top;
  2958. if( rcNcTop.Height() > 0 )
  2959. {
  2960. VERIFY( 
  2961. g_PaintManager.m_UxTheme.DrawBackground(
  2962. pCB->GetSafeHwnd(), 
  2963. dc.GetSafeHdc(), 
  2964. WP_SMALLCAPTION, 
  2965. _pdfd.m_bActive
  2966. ? CS_ACTIVE
  2967. : CS_INACTIVE, 
  2968. &rcNcTop, 
  2969. &rcNcTop
  2970. ) == S_OK
  2971. );
  2972. }
  2973. CRect rcNcBottom( _pdfd.m_rcWindow );
  2974. rcNcBottom.top = _pdfd.m_rcClient.bottom;
  2975. if( rcNcBottom.Height() > 0 )
  2976. {
  2977. VERIFY( 
  2978. g_PaintManager.m_UxTheme.DrawBackground(
  2979. pCB->GetSafeHwnd(), 
  2980. dc.GetSafeHdc(), 
  2981. WP_SMALLFRAMEBOTTOM, 
  2982. nStateID, 
  2983. &rcNcBottom, 
  2984. &rcNcBottom
  2985. ) == S_OK
  2986. );
  2987. }
  2988. } // if( g_PaintManager.m_UxTheme.OpenThemeData ...
  2989. } // if( _pdfd.m_bFloating )
  2990. dc.IntersectClipRect( _pdfd.m_rcWindow );
  2991. }
  2992. CExtPaintManager::PAINTGRIPPERDATA::PAINTGRIPPERDATA()
  2993. : m_pHelperSrc( NULL )
  2994. , m_lParam( 0L )
  2995. , m_rcGripper( 0,0,0,0 )
  2996. , m_rcText( 0,0,0,0 )
  2997. , m_bActive( false )
  2998. , m_bFloating( false )
  2999. , m_bHorz( false )
  3000. , m_bSideBar( false )
  3001. , m_sCaption( _T("") )
  3002. , m_bHelperNoRect( false )
  3003. , m_bHelperNoFill( false )
  3004. , m_bForceRTL( false )
  3005. , m_bFlashCaptionHighlightedState( false )
  3006. , m_clrFlashCaptionText( COLORREF(-1L) )
  3007. , m_clrFlashCaptionBackground( COLORREF(-1L) )
  3008. {
  3009. }
  3010. CExtPaintManager::PAINTGRIPPERDATA::PAINTGRIPPERDATA(
  3011. CObject * pHelperSrc,
  3012. const RECT & rcGripper,
  3013. const RECT & rcText,
  3014. bool bActive,
  3015. bool bFloating,
  3016. bool bHorz,
  3017. bool bSideBar, // = false
  3018. __EXT_MFC_SAFE_LPCTSTR sCaption, // = NULL
  3019. bool bForceRTL // = false
  3020. )
  3021. : m_pHelperSrc( pHelperSrc )
  3022. , m_lParam( 0L )
  3023. , m_rcGripper( rcGripper )
  3024. , m_rcText( rcText )
  3025. , m_bActive( bActive )
  3026. , m_bFloating( bFloating )
  3027. , m_bHorz( bHorz )
  3028. , m_bSideBar( bSideBar )
  3029. , m_sCaption( (sCaption == NULL) ? _T("") : sCaption )
  3030. , m_bHelperNoRect( false )
  3031. , m_bHelperNoFill( false )
  3032. , m_bForceRTL( bForceRTL )
  3033. , m_bFlashCaptionHighlightedState( false )
  3034. , m_clrFlashCaptionText( COLORREF(-1L) )
  3035. , m_clrFlashCaptionBackground( COLORREF(-1L) )
  3036. {
  3037. }
  3038. void CExtPaintManager::PaintGripper(
  3039. CDC & dc,
  3040. CExtPaintManager::PAINTGRIPPERDATA & _pgd
  3041. )
  3042. {
  3043. ASSERT_VALID( this );
  3044. ASSERT( dc.GetSafeHdc() != NULL );
  3045. CRect rectGripper2( _pgd.m_rcGripper );
  3046. COLORREF clrBtnShadow =  GetColor( CLR_3DSHADOW_OUT, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3047. COLORREF clrBtnHilight = GetColor( CLR_3DHILIGHT_OUT, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3048. if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3049. {
  3050. if( ! _pgd.m_bFloating )
  3051. rectGripper2.DeflateRect( 1, 1 );
  3052. #if (defined COLOR_GRADIENTACTIVECAPTION && defined COLOR_GRADIENTACTIVECAPTION)
  3053. ASSERT( COLOR_GRADIENTACTIVECAPTION == 27 );
  3054. ASSERT( COLOR_GRADIENTINACTIVECAPTION == 28 );
  3055. #endif
  3056. INT nTextColorIndex = COLOR_HIGHLIGHTTEXT;
  3057. if( _pgd.m_bFlashCaptionHighlightedState )
  3058. {
  3059. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3060. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3061. dc.FillSolidRect(
  3062. rectGripper2,
  3063. _pgd.m_clrFlashCaptionBackground
  3064. );
  3065. } // if( _pgd.m_bFlashCaptionHighlightedState )
  3066. else if( _pgd.m_bSideBar )
  3067. {
  3068. #ifdef __FREIWALD_ORIGINAL__
  3069. if( _pgd.m_bFloating || _pgd.m_bActive )
  3070. #else
  3071. /*
  3072. // draw an active gripper only, 
  3073. // when the bar actually has the focus
  3074. // (and not, whenever it is floating)
  3075. */
  3076. if (_pgd.m_bActive)
  3077. #endif
  3078. {
  3079. nTextColorIndex = COLOR_CAPTIONTEXT;
  3080. if( !_pgd.m_bHelperNoFill )
  3081. {
  3082. if( stat_GetBPP() > 8 )
  3083. {
  3084. COLORREF clrLeft =
  3085. GetColor( COLOR_ACTIVECAPTION, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3086. COLORREF clrRight =
  3087. GetColor( 27, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3088. if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3089. {
  3090. COLORREF clrTemp = clrLeft;
  3091. clrLeft = clrRight;
  3092. clrRight = clrTemp;
  3093. } // if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3094. stat_PaintGradientRect(
  3095. dc,
  3096. rectGripper2,
  3097. clrLeft,
  3098. clrRight,
  3099. _pgd.m_bHorz
  3100. );
  3101. } // if( stat_GetBPP() > 8 )
  3102. else
  3103. {
  3104. dc.FillSolidRect(
  3105. rectGripper2,
  3106. GetColor( COLOR_ACTIVECAPTION, _pgd.m_pHelperSrc, _pgd.m_lParam )
  3107. );
  3108. } // else from if( stat_GetBPP() > 8 )
  3109. } // if( !_pgd.m_bHelperNoFill )
  3110. }
  3111. else
  3112. {
  3113. nTextColorIndex = COLOR_INACTIVECAPTIONTEXT;
  3114. if( !_pgd.m_bHelperNoFill )
  3115. {
  3116. if( stat_GetBPP() > 8 )
  3117. {
  3118. COLORREF clrLeft =
  3119. GetColor( COLOR_INACTIVECAPTION, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3120. COLORREF clrRight =
  3121. GetColor( 28, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3122. if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3123. {
  3124. COLORREF clrTemp = clrLeft;
  3125. clrLeft = clrRight;
  3126. clrRight = clrTemp;
  3127. } // if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3128. stat_PaintGradientRect(
  3129. dc,
  3130. rectGripper2,
  3131. clrLeft,
  3132. clrRight,
  3133. _pgd.m_bHorz
  3134. );
  3135. } // if( stat_GetBPP() > 8 )
  3136. else
  3137. {
  3138. dc.FillSolidRect(
  3139. rectGripper2,
  3140. GetColor( COLOR_INACTIVECAPTION, _pgd.m_pHelperSrc, _pgd.m_lParam )
  3141. );
  3142. } // else from if( stat_GetBPP() > 8 )
  3143. } // if( !_pgd.m_bHelperNoFill )
  3144. }
  3145. } // else if( _pgd.m_bSideBar )
  3146. else
  3147. {
  3148. dc.FillSolidRect(
  3149. rectGripper2,
  3150. GetColor( COLOR_HIGHLIGHT, _pgd.m_pHelperSrc, _pgd.m_lParam )
  3151. );
  3152. } // else from if( _pgd.m_bSideBar )
  3153. int nTextLen = 0;
  3154. if( _pgd.m_sCaption != NULL
  3155. && ( nTextLen = int(_tcslen(_pgd.m_sCaption)) ) > 0
  3156. && (! _pgd.m_rcText.IsRectEmpty() )
  3157. && _pgd.m_rcText.right > _pgd.m_rcText.left
  3158. && _pgd.m_rcText.bottom > _pgd.m_rcText.top
  3159. )
  3160. {
  3161. COLORREF clrText =
  3162. _pgd.m_bFlashCaptionHighlightedState
  3163. ? _pgd.m_clrFlashCaptionText
  3164. : GetColor( nTextColorIndex, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3165. COLORREF clrOldText = dc.SetTextColor(clrText);
  3166. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3167. CFont * pCurrFont =
  3168. ( _pgd.m_bSideBar && (!_pgd.m_bFloating) )
  3169. ? (
  3170. (!_pgd.m_bHorz) ?
  3171. &m_FontNormalBC : &m_FontNormalVertXBC
  3172. )
  3173. : (
  3174. (!_pgd.m_bHorz) ?
  3175. &m_FontBoldBC : &m_FontBoldVertXBC
  3176. )
  3177. ;
  3178. CFont * pOldFont =
  3179. dc.SelectObject( pCurrFont );
  3180. ASSERT( pOldFont != NULL );
  3181. if( ! _pgd.m_bHorz )
  3182. { // if text is horizontal
  3183. UINT nDtAlign = _pgd.m_bForceRTL ? DT_RIGHT : DT_LEFT;
  3184. bool bFloatingFixedBar = false;
  3185. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) ) )
  3186. {
  3187. CExtControlBar * pBar = 
  3188. ((CExtMiniDockFrameWnd *)_pgd.m_pHelperSrc)->GetControlBarExt();
  3189. if( pBar != NULL 
  3190. && pBar->IsFixedMode()
  3191. )
  3192. bFloatingFixedBar = true;
  3193. }
  3194. if( bFloatingFixedBar )
  3195. {
  3196. CExtSafeString sCaption( _pgd.m_sCaption );
  3197. INT nAvailableWidth = _pgd.m_rcText.Width();
  3198. for(;;) 
  3199. {
  3200. INT nWidth =
  3201. stat_CalcTextWidth( 
  3202. dc,
  3203. *pCurrFont,
  3204. sCaption
  3205. );
  3206. if( nAvailableWidth >= nWidth 
  3207. || sCaption.IsEmpty()
  3208. )
  3209. break;
  3210. sCaption.Delete( sCaption.GetLength() - 1 );
  3211. if( sCaption.GetLength() > 0 )
  3212. dc.DrawText(
  3213. sCaption,
  3214. sCaption.GetLength(),
  3215. (LPRECT)&_pgd.m_rcText,
  3216. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_NOCLIP
  3217. );
  3218. } // if( bFloatingFixedBar )
  3219. else
  3220. {
  3221. dc.DrawText(
  3222. _pgd.m_sCaption,
  3223. nTextLen,
  3224. (LPRECT)&_pgd.m_rcText,
  3225. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS
  3226. );
  3227. } // else if( bFloatingFixedBar )
  3228. } // if text is horizontal
  3229. else
  3230. { // if text is vertical
  3231. LOGFONT lf;
  3232. ::memset(&lf,0,sizeof(LOGFONT));
  3233. pCurrFont->GetLogFont(&lf);
  3234. int _cyHorzFont = abs(lf.lfHeight);
  3235. int _cyTextMargin =
  3236. (_pgd.m_rcText.Width() - _cyHorzFont)  / 2
  3237. ;
  3238. CRect rcString = 
  3239. CRect(
  3240. CPoint(
  3241. _pgd.m_rcText.left + _cyTextMargin - __ExtMfc_CXTEXTMARGIN,
  3242. _pgd.m_rcText.bottom - __ExtMfc_CYTEXTMARGIN
  3243. ),
  3244. _pgd.m_rcText.Size() //m_sizeHorz
  3245. );
  3246. rcString.DeflateRect(2,2);
  3247. CRect rcExclude;
  3248. rcExclude.SetRect(
  3249. _pgd.m_rcGripper.left,
  3250. _pgd.m_rcGripper.top,
  3251. _pgd.m_rcGripper.right,
  3252. _pgd.m_rcText.top
  3253. );
  3254. dc.ExcludeClipRect( &rcExclude );
  3255. rcString.OffsetRect( -2, -3 );
  3256. dc.DrawText(
  3257. _pgd.m_sCaption,
  3258. nTextLen,
  3259. rcString,
  3260. DT_SINGLELINE //|DT_CENTER|DT_VCENTER
  3261. |DT_NOCLIP |DT_NOPREFIX
  3262. ); // don't forget DT_NOCLIP
  3263. //dc.IntersectClipRect( &rectGripper );
  3264. dc.SelectClipRgn(NULL);
  3265. } // if text is vertical
  3266. dc.SelectObject( pOldFont );
  3267. dc.SetBkMode(nOldBkMode);
  3268. dc.SetTextColor(clrOldText);
  3269. }
  3270. } // if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3271. else
  3272. {
  3273. if( _pgd.m_bHorz )
  3274. {
  3275. rectGripper2.DeflateRect( 4, 1, 4, 0 );
  3276. rectGripper2.right = rectGripper2.left + 3;
  3277. dc.Draw3dRect(
  3278. rectGripper2,
  3279. clrBtnHilight,
  3280. clrBtnShadow
  3281. );
  3282. rectGripper2.OffsetRect( 3, 0 );
  3283. dc.Draw3dRect(
  3284. rectGripper2,
  3285. clrBtnHilight,
  3286. clrBtnShadow
  3287. );
  3288. } // if( bHorz )
  3289. else
  3290. {
  3291. rectGripper2.OffsetRect( 1, 0 );
  3292. rectGripper2.DeflateRect( 0, 4, 1, 4 );
  3293. rectGripper2.bottom = rectGripper2.top + 3;
  3294. dc.Draw3dRect(
  3295. rectGripper2,
  3296. clrBtnHilight,
  3297. clrBtnShadow
  3298. );
  3299. rectGripper2.OffsetRect( 0, 3 );
  3300. dc.Draw3dRect(
  3301. rectGripper2,
  3302. clrBtnHilight,
  3303. clrBtnShadow
  3304. );
  3305. } // else from if( bHorz )
  3306. } // else from if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3307. }
  3308. void CExtPaintManagerXP::PaintGripper(
  3309. CDC & dc,
  3310. CExtPaintManager::PAINTGRIPPERDATA & _pgd
  3311. )
  3312. {
  3313. ASSERT_VALID( this );
  3314. ASSERT( dc.GetSafeHdc() != NULL );
  3315. CRect rectGripper( _pgd.m_rcGripper );
  3316. if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3317. {
  3318. if( _pgd.m_bFlashCaptionHighlightedState )
  3319. {
  3320. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3321. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3322. dc.FillSolidRect(
  3323. rectGripper,
  3324. _pgd.m_clrFlashCaptionBackground
  3325. );
  3326. } // if( _pgd.m_bFlashCaptionHighlightedState )
  3327. else
  3328. {
  3329. COLORREF clrGrip =
  3330. GetColor(
  3331. _pgd.m_bSideBar
  3332. ? (_pgd.m_bActive ? COLOR_HIGHLIGHT : XPCLR_3DFACE_DARK )
  3333. : COLOR_3DSHADOW
  3334. ,
  3335. _pgd.m_pHelperSrc,
  3336. _pgd.m_lParam 
  3337. );
  3338. if( ! _pgd.m_bHelperNoFill )
  3339. dc.FillSolidRect( rectGripper, clrGrip );
  3340. if( _pgd.m_bSideBar
  3341. && (!_pgd.m_bHelperNoFill)
  3342. && (!_pgd.m_bFloating)
  3343. && (!_pgd.m_bActive)
  3344. )
  3345. { // rect border of docked bar caption like VS-.NET-7.0
  3346. COLORREF clrSideRect = GetColor( COLOR_3DSHADOW, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3347. stat_PaintDotNet3dRect(
  3348. dc,
  3349. rectGripper,
  3350. clrSideRect,
  3351. clrSideRect
  3352. );
  3353. } // rect border of docked bar caption like VS-.NET-7.0
  3354. } // else from  // if( _pgd.m_bFlashCaptionHighlightedState )
  3355. int nTextLen = 0;
  3356. if( _pgd.m_sCaption != NULL
  3357. && ( nTextLen = int(_tcslen(_pgd.m_sCaption)) ) > 0
  3358. && (! _pgd.m_rcText.IsRectEmpty() )
  3359. && _pgd.m_rcText.right > _pgd.m_rcText.left
  3360. && _pgd.m_rcText.bottom > _pgd.m_rcText.top
  3361. )
  3362. {
  3363. e_paint_manager_name_t ePMN = OnQueryPaintManagerName();
  3364. e_system_theme_t eST = OnQuerySystemTheme();
  3365. COLORREF clrText =
  3366. _pgd.m_bFlashCaptionHighlightedState
  3367. ? _pgd.m_clrFlashCaptionText
  3368. : (
  3369. ( _pgd.m_bActive || (! _pgd.m_bSideBar) )
  3370. ? GetColor(
  3371. ( ( ePMN == Office2003 || ePMN == Studio2005 )
  3372. && (eST == ThemeLunaSilver)
  3373. )
  3374. ? COLOR_WINDOW
  3375. : COLOR_HIGHLIGHTTEXT, // COLOR_CAPTIONTEXT
  3376. _pgd.m_pHelperSrc,
  3377. _pgd.m_lParam
  3378. )
  3379. : GetColor(
  3380. COLOR_BTNTEXT,
  3381. _pgd.m_pHelperSrc,
  3382. _pgd.m_lParam
  3383. )
  3384. );
  3385. COLORREF clrOldText =
  3386. dc.SetTextColor(clrText);
  3387. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3388. CFont * pCurrFont =
  3389. (! _pgd.m_bHorz)
  3390. ? ( _pgd.m_bSideBar
  3391. ? &m_FontNormalBC
  3392. : &m_FontBoldBC
  3393. )
  3394. : ( _pgd.m_bSideBar
  3395. ? &m_FontNormalVertXBC
  3396. : &m_FontBoldVertXBC
  3397. )
  3398. ;
  3399. CFont * pOldFont =
  3400. dc.SelectObject( pCurrFont );
  3401. //ASSERT( pOldFont != NULL );
  3402. if( !_pgd.m_bHorz )
  3403. { // if text is horizontal
  3404. bool bFloatingFixedBar = false;
  3405. UINT nDtAlign = _pgd.m_bForceRTL ? DT_RIGHT : DT_LEFT;
  3406. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) ) )
  3407. {
  3408. CExtControlBar * pBar = 
  3409. ((CExtMiniDockFrameWnd *)_pgd.m_pHelperSrc)->GetControlBarExt();
  3410. if( pBar != NULL 
  3411. && pBar->IsFixedMode()
  3412. )
  3413. bFloatingFixedBar = true;
  3414. }
  3415. if( bFloatingFixedBar )
  3416. {
  3417. CExtSafeString sCaption( _pgd.m_sCaption );
  3418. INT nAvailableWidth = _pgd.m_rcText.Width();
  3419. for(;;) 
  3420. {
  3421. INT nWidth =
  3422. stat_CalcTextWidth( 
  3423. dc,
  3424. *pCurrFont,
  3425. sCaption
  3426. );
  3427. if( nAvailableWidth >= nWidth 
  3428. || sCaption.IsEmpty()
  3429. )
  3430. break;
  3431. sCaption.Delete( sCaption.GetLength() - 1 );
  3432. if( sCaption.GetLength() > 0 )
  3433. dc.DrawText(
  3434. sCaption,
  3435. sCaption.GetLength(),
  3436. (LPRECT)&_pgd.m_rcText,
  3437. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_NOCLIP
  3438. );
  3439. } // if( bFloatingFixedBar )
  3440. else
  3441. {
  3442. dc.DrawText(
  3443. _pgd.m_sCaption,
  3444. nTextLen,
  3445. (LPRECT)&_pgd.m_rcText,
  3446. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS
  3447. );
  3448. } // else if( bFloatingFixedBar )
  3449. } // if text is horizontal
  3450. else
  3451. { // if text is vertical
  3452. LOGFONT lf;
  3453. ::memset(&lf,0,sizeof(LOGFONT));
  3454. pCurrFont->GetLogFont(&lf);
  3455. int _cyHorzFont = abs(lf.lfHeight);
  3456. int _cyTextMargin =
  3457. (_pgd.m_rcText.Width() - _cyHorzFont)  / 2
  3458. ;
  3459. CRect rcString = 
  3460. CRect(
  3461. CPoint(
  3462. _pgd.m_rcText.left + _cyTextMargin - __ExtMfc_CXTEXTMARGIN,
  3463. _pgd.m_rcText.bottom - __ExtMfc_CYTEXTMARGIN
  3464. ),
  3465. _pgd.m_rcText.Size() //m_sizeHorz
  3466. );
  3467. rcString.DeflateRect(2,2);
  3468. CRect rcExclude;
  3469. rcExclude.SetRect(
  3470. _pgd.m_rcGripper.left,
  3471. _pgd.m_rcGripper.top,
  3472. _pgd.m_rcGripper.right,
  3473. _pgd.m_rcText.top
  3474. );
  3475. dc.ExcludeClipRect( &rcExclude );
  3476. rcString.OffsetRect( -2, -3 );
  3477. dc.DrawText(
  3478. _pgd.m_sCaption,
  3479. nTextLen,
  3480. rcString,
  3481. DT_SINGLELINE //|DT_CENTER|DT_VCENTER
  3482. |DT_NOCLIP |DT_NOPREFIX
  3483. ); // don't forget DT_NOCLIP
  3484. //dc.IntersectClipRect( &rectGripper );
  3485. dc.SelectClipRgn(NULL);
  3486. } // if text is vertical
  3487. dc.SelectObject( pOldFont );
  3488. dc.SetBkMode(nOldBkMode);
  3489. dc.SetTextColor(clrOldText);
  3490. }
  3491. } // if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3492. else
  3493. {
  3494. COLORREF clrGrip =
  3495. GetColor( CLR_3DFACE_OUT, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3496. CRect rcGripToClear( _pgd.m_rcGripper );
  3497. rcGripToClear.DeflateRect( 1, 1 );
  3498. if( _pgd.m_pHelperSrc != NULL
  3499. && _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  3500. && ((CControlBar*)_pgd.m_pHelperSrc)->m_pDockSite != NULL
  3501. && ((CExtToolControlBar*)_pgd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable
  3502. )
  3503. {
  3504. }
  3505. else
  3506. dc.FillSolidRect(
  3507. rcGripToClear,
  3508. clrGrip
  3509. );
  3510. CPen pen;
  3511. pen.CreatePen(
  3512. PS_SOLID,
  3513. 1,
  3514. GetColor( XPCLR_GRIPPER, _pgd.m_pHelperSrc, _pgd.m_lParam )
  3515. );
  3516. CPen * pOldPen = dc.SelectObject( &pen );
  3517. if( _pgd.m_bHorz )
  3518. {
  3519. rectGripper.DeflateRect( 4, 1, 6, 2 );
  3520. rectGripper.right = rectGripper.left + 5;
  3521. rectGripper.DeflateRect( 1, 0 );
  3522. CRect rcLine( rectGripper );
  3523. INT nLineCount = rectGripper.Height() / (1 + 1);
  3524. rcLine.top += rcLine.Height() - (1 + 1) * nLineCount;
  3525. rcLine.bottom = rcLine.top + 1;
  3526. for( INT nLine = 0; nLine < nLineCount; nLine++ )
  3527. {
  3528. dc.MoveTo( rcLine.left, rcLine.top + 1 );
  3529. dc.LineTo( rcLine.right, rcLine.bottom );
  3530. rcLine.OffsetRect( 0, 1 + 1 );
  3531. }
  3532. }
  3533. else
  3534. {
  3535. rectGripper.OffsetRect( 1, 0 );
  3536. rectGripper.DeflateRect( 1, 4, 2, 6 );
  3537. rectGripper.bottom = rectGripper.top + 5;
  3538. rectGripper.DeflateRect( 0, 1 );
  3539. CRect rcLine( rectGripper );
  3540. int nLineCount = rectGripper.Width() / (1 + 1);
  3541. rcLine.left += rcLine.Width() - (1 + 1) * nLineCount;
  3542. rcLine.right = rcLine.left + 1;
  3543. for( int nLine = 0; nLine < nLineCount; nLine++ )
  3544. {
  3545. dc.MoveTo( rcLine.left + 1, rcLine.top );
  3546. dc.LineTo( rcLine.right, rcLine.bottom );
  3547. rcLine.OffsetRect( 1 + 1, 0 );
  3548. }
  3549. } // else from if( _pgd.m_bHorz )
  3550. dc.SelectObject( pOldPen );
  3551. } // else from if( _pgd.m_bSideBar || _pgd.m_bFloating )
  3552. }
  3553. void CExtPaintManagerOffice2003::PaintGripper(
  3554. CDC & dc,
  3555. CExtPaintManager::PAINTGRIPPERDATA & _pgd
  3556. )
  3557. {
  3558. ASSERT_VALID( this );
  3559. ASSERT( dc.GetSafeHdc() != NULL );
  3560. if( IsHighContrast() )
  3561. {
  3562. CExtPaintManagerXP::PaintGripper( dc, _pgd );
  3563. return;
  3564. }
  3565. // if( _pgd.m_pHelperSrc != NULL
  3566. // && _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CWnd) )
  3567. // )
  3568. // PaintDockerBkgnd(
  3569. // false,
  3570. // dc,
  3571. // (CWnd*)_pgd.m_pHelperSrc
  3572. // );
  3573. bool bStyleOffice2003 = true;
  3574. if( _pgd.m_bFloating
  3575. //|| _pgd.m_bSideBar
  3576. || _pgd.m_pHelperSrc == NULL
  3577. || (!(
  3578. _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtControlBar))
  3579. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  3580. || _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtDynAutoHideSlider))
  3581. #endif
  3582. ))
  3583. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  3584. )
  3585. bStyleOffice2003 = false;
  3586. CWnd * pBar = NULL;
  3587. bool bForceNoBaloon = false;
  3588. bool bInactiveResizableBarCapt = false;
  3589. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  3590. if( bStyleOffice2003
  3591. && _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtDynAutoHideSlider))
  3592. )
  3593. { // auto-hide slider
  3594. pBar = STATIC_DOWNCAST( CWnd, _pgd.m_pHelperSrc );
  3595. bInactiveResizableBarCapt = true;
  3596. } // auto-hide slider
  3597. else 
  3598. #endif
  3599. if( bStyleOffice2003 )
  3600. { // non-dockers
  3601. pBar =
  3602. STATIC_DOWNCAST(
  3603. CWnd,
  3604. _pgd.m_pHelperSrc
  3605. );
  3606. ASSERT_VALID( pBar );
  3607. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPanelControlBar) ) )
  3608. { // if panel bar
  3609. bForceNoBaloon = true;
  3610. } // if panel bar
  3611. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  3612. && ((CControlBar*)_pgd.m_pHelperSrc)->m_pDockSite != NULL
  3613. && ((CExtToolControlBar*)_pgd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable
  3614. )
  3615. bForceNoBaloon = true;
  3616. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtControlBar) ) )
  3617. { // if control bar
  3618. if( ((CExtControlBar*)pBar)->m_pDockSite != NULL )
  3619. { // if docked
  3620. if( ((CExtControlBar*)pBar)->IsFloating() )
  3621. bStyleOffice2003 = false;
  3622. } // if docked
  3623. else
  3624. { // if simple
  3625. CExtToolControlBar *pToolBar = 
  3626. DYNAMIC_DOWNCAST( CExtToolControlBar, _pgd.m_pHelperSrc );
  3627. if( pToolBar == NULL || ( ! pToolBar->m_bForceBalloonGradientInDialogs ) )
  3628. bForceNoBaloon = true;
  3629. } // if simple
  3630. } // if control bar
  3631. else
  3632. { // if NOT control bar
  3633. bStyleOffice2003 = false;
  3634. } // if NOT control bar
  3635. } // non-dockers
  3636. if( ! bStyleOffice2003 )
  3637. {
  3638. CExtPaintManagerXP::PaintGripper( dc, _pgd );
  3639. return;
  3640. } // if( !bStyleOffice2003 )
  3641. ASSERT_VALID( pBar );
  3642. CRect rcBarWnd, rcBarClient;
  3643. pBar->GetWindowRect( &rcBarWnd );
  3644. pBar->GetClientRect( &rcBarClient );
  3645. pBar->ClientToScreen( &rcBarClient );
  3646. if( _pgd.m_bSideBar || bInactiveResizableBarCapt )
  3647. { // if resizable bar caption
  3648. _pgd.m_bHelperNoFill
  3649. = _pgd.m_bHelperNoRect
  3650. = !_pgd.m_bActive;
  3651. if( _pgd.m_bSideBar )
  3652. bInactiveResizableBarCapt = !_pgd.m_bActive;
  3653. if( bInactiveResizableBarCapt )
  3654. {
  3655. CRect rcHelper( rcBarClient );
  3656. rcHelper.OffsetRect( -rcBarWnd.TopLeft() );
  3657. CRect rcGripper( _pgd.m_rcGripper );
  3658. rcGripper.bottom = rcHelper.top + 4;
  3659. COLORREF clrLeft =
  3660. GetColor( _2003CLR_GRADIENT_LIGHT, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3661. COLORREF clrRight =
  3662. GetColor( _2003CLR_GRADIENT_DARK, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3663. if( _pgd.m_bForceRTL )
  3664. {
  3665. COLORREF clrTemp = clrLeft;
  3666. clrLeft = clrRight;
  3667. clrRight = clrTemp;
  3668. }
  3669. stat_PaintGradientRect(
  3670. dc,
  3671. rcGripper,
  3672. clrLeft,
  3673. clrRight
  3674. );
  3675. } // if( bInactiveResizableBarCapt )
  3676. CExtPaintManagerXP::PaintGripper( dc, _pgd );
  3677. return;
  3678. } // if resizable bar caption
  3679. if( (! pBar->IsKindOf(RUNTIME_CLASS(CExtMenuControlBar)) )
  3680. && (! bForceNoBaloon )
  3681. )
  3682. { // if toolbar balloon style
  3683. CRect rcPaintGradient( rcBarWnd );
  3684. if( _pgd.m_bHorz )
  3685. {
  3686. rcPaintGradient.top = rcBarClient.top;
  3687. rcPaintGradient.bottom = rcBarClient.bottom; // + 1;
  3688. rcPaintGradient.right = rcBarClient.right;
  3689. rcPaintGradient.OffsetRect(
  3690. -rcPaintGradient.left,
  3691. -rcPaintGradient.top
  3692. + rcBarClient.top - rcBarWnd.top
  3693. );
  3694. } // if( _pgd.m_bHorz )
  3695. else
  3696. {
  3697. rcPaintGradient.left = rcBarClient.left;
  3698. rcPaintGradient.right = rcBarClient.right; // + 1;
  3699. rcPaintGradient.bottom = rcBarClient.bottom;
  3700. rcPaintGradient.OffsetRect(
  3701. -rcPaintGradient.left
  3702. + rcBarClient.left - rcBarWnd.left,
  3703. -rcPaintGradient.top
  3704. );
  3705. } // else from if( _pgd.m_bHorz )
  3706. int nIdxClrTbFillMargin = -1;
  3707. CRgn _rgnBaloonSet;
  3708. const CSize _sizeRoundedAreaMerics =
  3709. FixedBar_GetRoundedAreaMerics();
  3710. if( _sizeRoundedAreaMerics.cx > 0
  3711. && _sizeRoundedAreaMerics.cy > 0
  3712. )
  3713. { // if baloon style
  3714. nIdxClrTbFillMargin = m_nIdxClrTbFillMargin;
  3715. if( _rgnBaloonSet.CreateRoundRectRgn(
  3716. rcPaintGradient.left,
  3717. rcPaintGradient.top,
  3718. rcPaintGradient.Width(),
  3719. rcPaintGradient.Height(),
  3720. _sizeRoundedAreaMerics.cx,
  3721. _sizeRoundedAreaMerics.cy
  3722. )
  3723. )
  3724. {
  3725. dc.SelectClipRgn( &_rgnBaloonSet );
  3726. }
  3727. }  // if baloon style
  3728. OnPaintToolBarGradient( dc, rcPaintGradient, _pgd.m_bHorz, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3729. if( nIdxClrTbFillMargin >= 0 )
  3730. {
  3731. CPen _pen( PS_SOLID, 1, GetColor( m_nIdxClrTbFillMargin, _pgd.m_pHelperSrc, _pgd.m_lParam ) );
  3732. CPen  * pOldPen = dc.SelectObject( &_pen );
  3733. if( _pgd.m_bHorz )
  3734. {
  3735. dc.MoveTo(
  3736. rcPaintGradient.left,
  3737. rcPaintGradient.bottom-2
  3738. );
  3739. dc.LineTo(
  3740. rcPaintGradient.right,
  3741. rcPaintGradient.bottom-2
  3742. );
  3743. } // if( _pgd.m_bHorz )
  3744. else
  3745. {
  3746. dc.MoveTo(
  3747. rcPaintGradient.right-2,
  3748. rcPaintGradient.top
  3749. );
  3750. dc.LineTo(
  3751. rcPaintGradient.right-2,
  3752. rcPaintGradient.bottom
  3753. );
  3754. } // else from if( _pgd.m_bHorz )
  3755. dc.SelectObject( pOldPen );
  3756. } // if( nIdxClrTbFillMargin >= 0 )
  3757. if( _rgnBaloonSet.GetSafeHandle() != NULL )
  3758. dc.SelectClipRgn( NULL );
  3759. } // if toolbar balloon style
  3760. COLORREF clrDotShadow = GetColor( _2003CLR_GRIPPER_DOT_LIGHT, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3761. COLORREF clrDotFace = GetColor( _2003CLR_GRIPPER_DOT_DARK, _pgd.m_pHelperSrc, _pgd.m_lParam );
  3762. static const CSize g_sizeGripDot( 2, 2 );
  3763. static const CSize g_sizeGripDist( 1, 1 );
  3764. static const CSize g_sizeGripShadowOffset( 1, 1 );
  3765. CRect rcGripHelper( _pgd.m_rcGripper );
  3766. CRect rcBarClientW( rcBarClient );
  3767. rcBarClientW.OffsetRect( -rcBarWnd.TopLeft() );
  3768. if( _pgd.m_bHorz )
  3769. {
  3770. rcGripHelper.top = rcBarClientW.top;
  3771. rcGripHelper.bottom = rcBarClientW.bottom;
  3772. rcGripHelper.OffsetRect( 1, 0 );
  3773. rcGripHelper.left +=
  3774. (rcGripHelper.Width() - g_sizeGripDot.cx) / 2;
  3775. rcGripHelper.right =
  3776. rcGripHelper.left + g_sizeGripDot.cx;
  3777. rcGripHelper.DeflateRect( 0, g_sizeGripDot.cy + g_sizeGripDist.cy + g_sizeGripShadowOffset.cy );
  3778. rcGripHelper.DeflateRect( 0, 1 ); // + 2.27
  3779. rcGripHelper.OffsetRect( 0, -1 ); // + 2.27
  3780. int nDotCount = 
  3781. rcGripHelper.Height()
  3782. / (g_sizeGripDot.cy + g_sizeGripDist.cy + g_sizeGripShadowOffset.cy);
  3783. rcGripHelper.top +=
  3784. rcGripHelper.Height()
  3785. - (g_sizeGripDot.cy + g_sizeGripDist.cy + g_sizeGripShadowOffset.cy)
  3786. * nDotCount;
  3787. CRect rcDotFace( rcGripHelper );
  3788. rcDotFace.bottom = rcDotFace.top + g_sizeGripDot.cy;
  3789. CRect rcDotShadow( rcDotFace );
  3790. rcDotShadow.OffsetRect( g_sizeGripShadowOffset );
  3791. for( int nDot = 0; nDot < nDotCount; nDot++ )
  3792. {
  3793. dc.FillSolidRect( &rcDotShadow, clrDotShadow );
  3794. dc.FillSolidRect( &rcDotFace, clrDotFace );
  3795. rcDotFace.OffsetRect( 0, g_sizeGripDot.cy + g_sizeGripDist.cy + g_sizeGripShadowOffset.cy );
  3796. rcDotShadow.OffsetRect( 0, g_sizeGripDot.cy + g_sizeGripDist.cy + g_sizeGripShadowOffset.cy );
  3797. } // for( int nDot = 0; nDot < nDotCount; nDot++ )
  3798. } // if( _pgd.m_bHorz )
  3799. else
  3800. {
  3801. rcGripHelper.left = rcBarClientW.left;
  3802. rcGripHelper.right = rcBarClientW.right;
  3803. rcGripHelper.OffsetRect( 0, 1 );
  3804. rcGripHelper.top +=
  3805. (rcGripHelper.Height() - g_sizeGripDot.cy) / 2;
  3806. rcGripHelper.bottom =
  3807. rcGripHelper.top + g_sizeGripDot.cy;
  3808. rcGripHelper.DeflateRect( g_sizeGripDot.cx + g_sizeGripDist.cx + g_sizeGripShadowOffset.cx, 0 );
  3809. rcGripHelper.OffsetRect( -1, 0 ); // + 2.27
  3810. rcGripHelper.DeflateRect( 1, 0 ); // + 2.27
  3811. int nDotCount = 
  3812. rcGripHelper.Width()
  3813. / (g_sizeGripDot.cx + g_sizeGripDist.cx + g_sizeGripShadowOffset.cx);
  3814. rcGripHelper.left +=
  3815. rcGripHelper.Width()
  3816. - (g_sizeGripDot.cx + g_sizeGripDist.cx + g_sizeGripShadowOffset.cx)
  3817. * nDotCount;
  3818. CRect rcDotFace( rcGripHelper );
  3819. rcDotFace.right = rcDotFace.left + g_sizeGripDot.cx;
  3820. CRect rcDotShadow( rcDotFace );
  3821. rcDotShadow.OffsetRect( g_sizeGripShadowOffset );
  3822. for( int nDot = 0; nDot < nDotCount; nDot++ )
  3823. {
  3824. dc.FillSolidRect( &rcDotShadow, clrDotShadow );
  3825. dc.FillSolidRect( &rcDotFace, clrDotFace );
  3826. rcDotFace.OffsetRect( g_sizeGripDot.cx + g_sizeGripDist.cx + g_sizeGripShadowOffset.cx, 0 );
  3827. rcDotShadow.OffsetRect( g_sizeGripDot.cx + g_sizeGripDist.cx + g_sizeGripShadowOffset.cx, 0 );
  3828. } // for( int nDot = 0; nDot < nDotCount; nDot++ )
  3829. } // else from if( _pgd.m_bHorz )
  3830. }
  3831. void CExtPaintManagerNativeXP::PaintGripper(
  3832. CDC & dc,
  3833. CExtPaintManager::PAINTGRIPPERDATA & _pgd
  3834. )
  3835. {
  3836. ASSERT_VALID( this );
  3837. ASSERT( dc.GetSafeHdc() != NULL );
  3838. if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  3839. {
  3840. CExtPaintManager::PaintGripper(
  3841. dc,
  3842. _pgd
  3843. );
  3844. return;
  3845. } // if( ! g_PaintManager.m_UxTheme.IsControlsThemed() )
  3846. CWnd * pWnd =
  3847. DYNAMIC_DOWNCAST(
  3848. CWnd,
  3849. _pgd.m_pHelperSrc
  3850. );
  3851. ASSERT( pWnd != NULL );
  3852. ASSERT_VALID( pWnd );
  3853. if( (!_pgd.m_bSideBar)
  3854. && (!_pgd.m_bFloating) 
  3855. )
  3856. {
  3857. if( g_PaintManager.m_UxTheme.OpenThemeData( pWnd->GetSafeHwnd(), VSCLASS_REBAR ) != NULL )
  3858. {
  3859. INT nPartID = _pgd.m_bHorz ? RP_GRIPPER : RP_GRIPPERVERT;
  3860. CSize szPart(0,0);
  3861. VERIFY( 
  3862. g_PaintManager.m_UxTheme.GetThemePartSize(
  3863. dc.GetSafeHdc(), 
  3864. nPartID, 
  3865. 0, 
  3866. NULL, 
  3867. CExtUxTheme::__EXT_UX_TS_TRUE,
  3868. &szPart
  3869. ) == S_OK
  3870. );
  3871. CRect rcGripper( 
  3872. 0, 
  3873. 0, 
  3874. _pgd.m_bHorz ? szPart.cx : _pgd.m_rcGripper.Width(),
  3875. _pgd.m_bHorz ? _pgd.m_rcGripper.Height() : szPart.cy
  3876. );
  3877. rcGripper.OffsetRect(
  3878. _pgd.m_rcGripper.left + ( _pgd.m_rcGripper.Width() - rcGripper.Width() ) / 2,
  3879. _pgd.m_rcGripper.top + ( _pgd.m_rcGripper.Height() - rcGripper.Height() ) / 2
  3880. );
  3881. // if( _pgd.m_bFlashCaptionHighlightedState )
  3882. // {
  3883. // ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3884. // ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3885. // dc.FillSolidRect(
  3886. // rcGripper,
  3887. // _pgd.m_clrFlashCaptionBackground
  3888. // );
  3889. // } // if( _pgd.m_bFlashCaptionHighlightedState )
  3890. // else
  3891. {
  3892. //VERIFY( 
  3893. g_PaintManager.m_UxTheme.DrawBackground(
  3894. pWnd->GetSafeHwnd(),
  3895. dc.GetSafeHdc(), 
  3896. nPartID, 
  3897. 0, 
  3898. &rcGripper, 
  3899. &_pgd.m_rcGripper
  3900. //) == S_OK
  3901. );
  3902. } // else from if( _pgd.m_bFlashCaptionHighlightedState )
  3903. g_PaintManager.m_UxTheme.CloseThemeData();
  3904. }
  3905. }
  3906. else
  3907. {
  3908. INT nTextColorIndex = COLOR_HIGHLIGHTTEXT;
  3909. if( !_pgd.m_bFloating )
  3910. {
  3911. #if (defined COLOR_GRADIENTACTIVECAPTION && defined COLOR_GRADIENTACTIVECAPTION)
  3912. ASSERT( COLOR_GRADIENTACTIVECAPTION == 27 );
  3913. ASSERT( COLOR_GRADIENTINACTIVECAPTION == 28 );
  3914. #endif
  3915. if( _pgd.m_bFlashCaptionHighlightedState )
  3916. {
  3917. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3918. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3919. dc.FillSolidRect(
  3920. _pgd.m_rcGripper,
  3921. _pgd.m_clrFlashCaptionBackground
  3922. );
  3923. } // if( _pgd.m_bFlashCaptionHighlightedState )
  3924. else if( _pgd.m_bActive )
  3925. {
  3926. nTextColorIndex = COLOR_CAPTIONTEXT;
  3927. if( _pgd.m_bFlashCaptionHighlightedState )
  3928. {
  3929. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3930. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3931. dc.FillSolidRect(
  3932. _pgd.m_rcGripper,
  3933. _pgd.m_clrFlashCaptionBackground
  3934. );
  3935. } // if( _pgd.m_bFlashCaptionHighlightedState )
  3936. else if( !_pgd.m_bHelperNoFill )
  3937. {
  3938. if( stat_GetBPP() > 8 )
  3939. {
  3940. COLORREF clrLeft = ::GetSysColor( COLOR_ACTIVECAPTION );
  3941. COLORREF clrRight = ::GetSysColor( 27 );
  3942. if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3943. {
  3944. COLORREF clrTemp = clrLeft;
  3945. clrLeft = clrRight;
  3946. clrRight = clrTemp;
  3947. }
  3948. stat_PaintGradientRect(
  3949. dc,
  3950. _pgd.m_rcGripper,
  3951. clrLeft,
  3952. clrRight,
  3953. _pgd.m_bHorz
  3954. );
  3955. }
  3956. else
  3957. {
  3958. dc.FillSolidRect(
  3959. _pgd.m_rcGripper,
  3960. ::GetSysColor( COLOR_ACTIVECAPTION )
  3961. );
  3962. }
  3963. }
  3964. }
  3965. else
  3966. {
  3967. nTextColorIndex = COLOR_INACTIVECAPTIONTEXT;
  3968. if( !_pgd.m_bHelperNoFill )
  3969. {
  3970. if( stat_GetBPP() > 8 )
  3971. {
  3972. COLORREF clrLeft = ::GetSysColor( COLOR_INACTIVECAPTION );
  3973. COLORREF clrRight = ::GetSysColor( 28 );
  3974. if( (!_pgd.m_bHorz) && _pgd.m_bForceRTL )
  3975. {
  3976. COLORREF clrTemp = clrLeft;
  3977. clrLeft = clrRight;
  3978. clrRight = clrTemp;
  3979. }
  3980. stat_PaintGradientRect(
  3981. dc,
  3982. _pgd.m_rcGripper,
  3983. clrLeft,
  3984. clrRight,
  3985. _pgd.m_bHorz
  3986. );
  3987. }
  3988. else
  3989. {
  3990. dc.FillSolidRect(
  3991. _pgd.m_rcGripper,
  3992. ::GetSysColor( COLOR_INACTIVECAPTION )
  3993. );
  3994. }
  3995. }
  3996. }
  3997. } // if( !_pgd.m_bFloating )
  3998. else
  3999. {
  4000. if( _pgd.m_bFlashCaptionHighlightedState )
  4001. {
  4002. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  4003. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  4004. dc.FillSolidRect(
  4005. _pgd.m_rcGripper,
  4006. _pgd.m_clrFlashCaptionBackground
  4007. );
  4008. } // if( _pgd.m_bFlashCaptionHighlightedState )
  4009. }
  4010. int nTextLen = 0;
  4011. if( _pgd.m_sCaption != NULL
  4012. && ( nTextLen = int(_tcslen(_pgd.m_sCaption)) ) > 0
  4013. && (! _pgd.m_rcText.IsRectEmpty() )
  4014. && _pgd.m_rcText.right > _pgd.m_rcText.left
  4015. && _pgd.m_rcText.bottom > _pgd.m_rcText.top
  4016. )
  4017. {
  4018. COLORREF clrText =
  4019. _pgd.m_bFlashCaptionHighlightedState
  4020. ? _pgd.m_clrFlashCaptionText
  4021. : ::GetSysColor( nTextColorIndex )
  4022. ;
  4023. COLORREF clrOldText =
  4024. dc.SetTextColor(clrText);
  4025. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  4026. CFont * pCurrFont =
  4027. ( _pgd.m_bSideBar && (!_pgd.m_bFloating) )
  4028. ? (
  4029. (!_pgd.m_bHorz) ?
  4030. &m_FontNormalBC : &m_FontNormalVertXBC
  4031. )
  4032. : (
  4033. (!_pgd.m_bHorz) ?
  4034. &m_FontBoldBC : &m_FontBoldVertXBC
  4035. )
  4036. ;
  4037. CFont * pOldFont =
  4038. dc.SelectObject( pCurrFont );
  4039. ASSERT( pOldFont != NULL );
  4040. if( ! _pgd.m_bHorz )
  4041. // if text is horizontal
  4042. UINT nDtAlign = _pgd.m_bForceRTL ? DT_RIGHT : DT_LEFT;
  4043. bool bFloatingFixedBar = false;
  4044. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) ) )
  4045. {
  4046. CExtControlBar * pBar = 
  4047. ((CExtMiniDockFrameWnd *)_pgd.m_pHelperSrc)->GetControlBarExt();
  4048. if( pBar != NULL 
  4049. && pBar->IsFixedMode()
  4050. )
  4051. bFloatingFixedBar = true;
  4052. }
  4053. if( bFloatingFixedBar )
  4054. {
  4055. CExtSafeString sCaption( _pgd.m_sCaption );
  4056. INT nAvailableWidth = _pgd.m_rcText.Width();
  4057. for(;;) 
  4058. {
  4059. INT nWidth =
  4060. stat_CalcTextWidth( 
  4061. dc,
  4062. *pCurrFont,
  4063. sCaption
  4064. );
  4065. if( nAvailableWidth >= nWidth 
  4066. || sCaption.IsEmpty()
  4067. )
  4068. break;
  4069. sCaption.Delete( sCaption.GetLength() - 1 );
  4070. if( sCaption.GetLength() > 0 )
  4071. dc.DrawText(
  4072. sCaption,
  4073. sCaption.GetLength(),
  4074. (LPRECT)&_pgd.m_rcText,
  4075. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_NOCLIP
  4076. );
  4077. } // if( bFloatingFixedBar )
  4078. else
  4079. {
  4080. dc.DrawText(
  4081. _pgd.m_sCaption,
  4082. nTextLen,
  4083. (LPRECT)&_pgd.m_rcText,
  4084. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS
  4085. );
  4086. } // else if( bFloatingFixedBar )
  4087. } // if text is horizontal
  4088. else
  4089. { // if text is vertical
  4090. LOGFONT lf;
  4091. ::memset(&lf,0,sizeof(LOGFONT));
  4092. pCurrFont->GetLogFont(&lf);
  4093. int _cyHorzFont = abs(lf.lfHeight);
  4094. int _cyTextMargin =
  4095. (_pgd.m_rcText.Width() - _cyHorzFont)  / 2
  4096. ;
  4097. CRect rcString = 
  4098. CRect(
  4099. CPoint(
  4100. _pgd.m_rcText.left + _cyTextMargin - __ExtMfc_CXTEXTMARGIN,
  4101. _pgd.m_rcText.bottom - __ExtMfc_CYTEXTMARGIN
  4102. ),
  4103. _pgd.m_rcText.Size() //m_sizeHorz
  4104. );
  4105. rcString.DeflateRect(2,2);
  4106. CRect rcExclude;
  4107. rcExclude.SetRect(
  4108. _pgd.m_rcGripper.left,
  4109. _pgd.m_rcGripper.top,
  4110. _pgd.m_rcGripper.right,
  4111. _pgd.m_rcText.top
  4112. );
  4113. dc.ExcludeClipRect( &rcExclude );
  4114. rcString.OffsetRect( -2, -3 );
  4115. dc.DrawText(
  4116. _pgd.m_sCaption,
  4117. nTextLen,
  4118. rcString,
  4119. DT_SINGLELINE | DT_NOCLIP | DT_NOPREFIX // don't forget DT_NOCLIP
  4120. );
  4121. dc.SelectClipRgn(NULL);
  4122. } // if text is vertical
  4123. dc.SelectObject( pOldFont );
  4124. dc.SetBkMode(nOldBkMode);