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

界面编程

开发平台:

Visual C++

  1. HRESULT CExtUxTheme::GetThemeString(
  2. int iPartId, 
  3. int iStateId, 
  4. int iPropId, 
  5. OUT __EXT_UX_LPWSTR pszBuff, 
  6. int cchMaxBuffChars
  7. )
  8. {
  9. //ASSERT( m_hUxTheme != NULL );
  10. //ASSERT( m_pfnGetThemeString != NULL );
  11. if( m_pfnGetThemeString != NULL ) 
  12. return m_pfnGetThemeString( m_hUxTheme, iPartId, iStateId, iPropId, pszBuff, cchMaxBuffChars );
  13. return S_FALSE;
  14. }
  15. HRESULT CExtUxTheme::GetThemeBool(
  16. int iPartId, 
  17. int iStateId, 
  18. int iPropId, 
  19. OUT BOOL * pfVal
  20. )
  21. {
  22. //ASSERT( m_hUxTheme != NULL );
  23. //ASSERT( m_pfnGetThemeBool != NULL );
  24. if( m_pfnGetThemeBool != NULL ) 
  25. return m_pfnGetThemeBool( m_hUxTheme, iPartId, iStateId, iPropId, pfVal );
  26. return S_FALSE;
  27. }
  28. HRESULT CExtUxTheme::GetThemeInt(
  29. int iPartId, 
  30. int iStateId, 
  31. int iPropId, 
  32. OUT int * piVal
  33. )
  34. {
  35. //ASSERT( m_hUxTheme != NULL );
  36. //ASSERT( m_pfnGetThemeInt != NULL );
  37. if( m_pfnGetThemeInt != NULL ) 
  38. return m_pfnGetThemeInt( m_hUxTheme, iPartId, iStateId, iPropId, piVal );
  39. return S_FALSE;
  40. }
  41. HRESULT CExtUxTheme::GetThemeEnumValue(
  42. int iPartId, 
  43. int iStateId, 
  44. int iPropId, 
  45. OUT int * piVal
  46. )
  47. {
  48. //ASSERT( m_hUxTheme != NULL );
  49. //ASSERT( m_pfnGetThemeEnumValue != NULL );
  50. if( m_pfnGetThemeEnumValue != NULL ) 
  51. return m_pfnGetThemeEnumValue( m_hUxTheme, iPartId, iStateId, iPropId, piVal );
  52. return S_FALSE;
  53. }
  54. HRESULT CExtUxTheme::GetThemePosition(
  55. int iPartId, 
  56. int iStateId, 
  57. int iPropId, 
  58. OUT POINT * pPoint
  59. )
  60. {
  61. //ASSERT( m_hUxTheme != NULL );
  62. //ASSERT( m_pfnGetThemePosition != NULL );
  63. if( m_pfnGetThemePosition != NULL ) 
  64. return m_pfnGetThemePosition( m_hUxTheme, iPartId, iStateId, iPropId, pPoint );
  65. return S_FALSE;
  66. }
  67. HRESULT CExtUxTheme::GetThemeFont(
  68. OPTIONAL HDC hdc, 
  69. int iPartId, 
  70. int iStateId, 
  71. int iPropId, 
  72. OUT LOGFONT * pFont
  73. )
  74. {
  75. //ASSERT( m_hUxTheme != NULL );
  76. //ASSERT( m_pfnGetThemeFont != NULL );
  77. if( m_pfnGetThemeFont != NULL ) 
  78. return m_pfnGetThemeFont( m_hUxTheme, hdc, iPartId, iStateId, iPropId, pFont );
  79. return S_FALSE;
  80. }
  81. HRESULT CExtUxTheme::GetThemeRect(
  82. int iPartId, 
  83. int iStateId, 
  84. int iPropId, 
  85. OUT RECT * pRect
  86. )
  87. {
  88. //ASSERT( m_hUxTheme != NULL );
  89. //ASSERT( m_pfnGetThemeRect != NULL );
  90. if( m_pfnGetThemeRect != NULL ) 
  91. return m_pfnGetThemeRect( m_hUxTheme, iPartId, iStateId, iPropId, pRect );
  92. return S_FALSE;
  93. }
  94. HRESULT CExtUxTheme::GetThemeMargins(
  95. OPTIONAL HDC hdc, 
  96. int iPartId, 
  97. int iStateId, 
  98. int iPropId, 
  99. OPTIONAL RECT * prc, 
  100. OUT CExtUxTheme::__EXT_UX_MARGINS * pMargins
  101. )
  102. {
  103. //ASSERT( m_hUxTheme != NULL );
  104. //ASSERT( m_pfnGetThemeMargins != NULL );
  105. if( m_pfnGetThemeMargins != NULL ) 
  106. return m_pfnGetThemeMargins( m_hUxTheme, hdc, iPartId, iStateId, iPropId, prc, pMargins );
  107. return S_FALSE;
  108. }
  109. HRESULT CExtUxTheme::GetThemeIntList(
  110. int iPartId, 
  111. int iStateId, 
  112. int iPropId, 
  113. OUT CExtUxTheme::__EXT_UX_INTLIST * pIntList
  114. )
  115. {
  116. //ASSERT( m_hUxTheme != NULL );
  117. //ASSERT( m_pfnGetThemeIntList != NULL );
  118. if( m_pfnGetThemeIntList != NULL ) 
  119. return m_pfnGetThemeIntList( m_hUxTheme, iPartId, iStateId, iPropId, pIntList );
  120. return S_FALSE;
  121. }
  122. HRESULT CExtUxTheme::GetThemePropertyOrigin(
  123. int iPartId, 
  124. int iStateId, 
  125. int iPropId, 
  126. OUT enum __EXT_UX_PROPERTYORIGIN * pOrigin
  127. )
  128. {
  129. //ASSERT( m_hUxTheme != NULL );
  130. //ASSERT( m_pfnGetThemePropertyOrigin != NULL );
  131. if( m_pfnGetThemePropertyOrigin != NULL ) 
  132. return m_pfnGetThemePropertyOrigin( m_hUxTheme, iPartId, iStateId, iPropId, pOrigin );
  133. return S_FALSE;
  134. }
  135. HRESULT CExtUxTheme::SetWindowTheme(
  136. HWND hwnd, 
  137. __EXT_UX_LPCWSTR pszSubAppName, 
  138. __EXT_UX_LPCWSTR pszSubIdList
  139. )
  140. {
  141. //ASSERT( m_hUxTheme != NULL );
  142. //ASSERT( m_pfnSetWindowTheme != NULL );
  143. if( m_pfnSetWindowTheme != NULL ) 
  144. return m_pfnSetWindowTheme( hwnd, pszSubAppName, pszSubIdList );
  145. return S_FALSE;
  146. }
  147. HRESULT CExtUxTheme::GetThemeFilename(
  148. int iPartId, 
  149. int iStateId, 
  150. int iPropId, 
  151. OUT __EXT_UX_LPWSTR pszThemeFileName, 
  152. int cchMaxBuffChars
  153. )
  154. {
  155. //ASSERT( m_hUxTheme != NULL );
  156. //ASSERT( m_pfnGetThemeFilename != NULL );
  157. if( m_pfnGetThemeFilename != NULL ) 
  158. return m_pfnGetThemeFilename( m_hUxTheme, iPartId, iStateId, iPropId, pszThemeFileName, cchMaxBuffChars );
  159. return S_FALSE;
  160. }
  161. COLORREF CExtUxTheme::GetThemeSysColor( 
  162. BOOL bThemeSysColor,
  163. int iColorId 
  164. )
  165. {
  166. //ASSERT( m_hUxTheme != NULL );
  167. //ASSERT( m_pfnGetThemeSysColor != NULL );
  168. if( m_pfnGetThemeSysColor != NULL ) 
  169. return m_pfnGetThemeSysColor( bThemeSysColor ? m_hUxTheme : NULL, iColorId );
  170. return COLORREF( -1 );
  171. }
  172. HBRUSH CExtUxTheme::GetThemeSysColorBrush( 
  173. BOOL bThemeSysColor, 
  174. int iColorId 
  175. )
  176. {
  177. //ASSERT( m_hUxTheme != NULL );
  178. //ASSERT( m_pfnGetThemeSysColorBrush != NULL );
  179. if( m_pfnGetThemeSysColorBrush != NULL ) 
  180. return m_pfnGetThemeSysColorBrush( bThemeSysColor ? m_hUxTheme : NULL, iColorId );
  181. return NULL;
  182. }
  183. BOOL CExtUxTheme::GetThemeSysBool(
  184. BOOL bThemeSysColor,
  185. int iBoolId
  186. )
  187. {
  188. //ASSERT( m_hUxTheme != NULL );
  189. //ASSERT( m_pfnGetThemeSysBool != NULL );
  190. if( m_pfnGetThemeSysBool != NULL ) 
  191. return m_pfnGetThemeSysBool( bThemeSysColor ? m_hUxTheme : NULL, iBoolId );
  192. return FALSE;
  193. }
  194. int CExtUxTheme::GetThemeSysSize(
  195. BOOL bThemeSysColor,
  196. int iSizeId
  197. )
  198. {
  199. //ASSERT( m_hUxTheme != NULL );
  200. //ASSERT( m_pfnGetThemeSysSize != NULL );
  201. if( m_pfnGetThemeSysSize != NULL ) 
  202. return m_pfnGetThemeSysSize( bThemeSysColor ? m_hUxTheme : NULL, iSizeId );
  203. return 0;
  204. }
  205. HRESULT CExtUxTheme::GetThemeSysFont(
  206. BOOL bThemeSysColor,
  207. int iFontId, 
  208. OUT LOGFONT * plf
  209. )
  210. {
  211. //ASSERT( m_hUxTheme != NULL );
  212. //ASSERT( m_pfnGetThemeSysFont != NULL );
  213. if( m_pfnGetThemeSysFont != NULL ) 
  214. return m_pfnGetThemeSysFont( bThemeSysColor ? m_hUxTheme : NULL, iFontId, plf );
  215. return S_FALSE;
  216. }
  217. HRESULT CExtUxTheme::GetThemeSysString(
  218. int iStringId, 
  219. OUT __EXT_UX_LPWSTR pszStringBuff, 
  220. int cchMaxStringChars
  221. )
  222. {
  223. //ASSERT( m_hUxTheme != NULL );
  224. //ASSERT( m_pfnGetThemeSysString != NULL );
  225. if( m_pfnGetThemeSysString != NULL ) 
  226. return m_pfnGetThemeSysString( m_hUxTheme, iStringId, pszStringBuff, cchMaxStringChars );
  227. return S_FALSE;
  228. }
  229. HRESULT CExtUxTheme::GetThemeSysInt(
  230. int iIntId, 
  231. int * piValue
  232. )
  233. {
  234. //ASSERT( m_hUxTheme != NULL );
  235. //ASSERT( m_pfnGetThemeSysInt != NULL );
  236. if( m_pfnGetThemeSysInt != NULL ) 
  237. return m_pfnGetThemeSysInt( m_hUxTheme, iIntId, piValue );
  238. return S_FALSE;
  239. }
  240. BOOL CExtUxTheme::IsThemeActive()
  241. {
  242. //ASSERT( m_hUxTheme != NULL );
  243. //ASSERT( m_pfnIsThemeActive != NULL );
  244. if( m_pfnIsThemeActive != NULL ) 
  245. return m_pfnIsThemeActive();
  246. return FALSE;
  247. }
  248. BOOL CExtUxTheme::IsAppThemed()
  249. {
  250. if( m_hUxThemeDll == NULL )
  251. return FALSE;
  252. //ASSERT( m_hUxTheme != NULL );
  253. //ASSERT( m_pfnIsAppThemed != NULL );
  254. if( m_pfnIsAppThemed != NULL ) 
  255. {
  256. __try
  257. {
  258. return m_pfnIsAppThemed();
  259. }
  260. __except( EXCEPTION_EXECUTE_HANDLER )
  261. {
  262. }
  263. }
  264. return FALSE;
  265. }
  266. CExtUxTheme::__EXT_UX_HTHEME CExtUxTheme::GetWindowTheme( HWND hwnd )
  267. {
  268. //ASSERT( m_hUxTheme != NULL );
  269. //ASSERT( m_pfnGetWindowTheme != NULL );
  270. if( m_pfnGetWindowTheme != NULL ) 
  271. return m_pfnGetWindowTheme( hwnd );
  272. return NULL;
  273. }
  274. HRESULT CExtUxTheme::EnableThemeDialogTexture(
  275. HWND hwnd, 
  276. DWORD dwFlags
  277. )
  278. {
  279. //ASSERT( m_hUxTheme != NULL );
  280. //ASSERT( m_pfnEnableThemeDialogTexture != NULL );
  281. if( m_pfnEnableThemeDialogTexture != NULL ) 
  282. return m_pfnEnableThemeDialogTexture( hwnd, dwFlags );
  283. return S_FALSE;
  284. }
  285. BOOL CExtUxTheme::IsThemeDialogTextureEnabled( HWND hwnd )
  286. {
  287. //ASSERT( m_hUxTheme != NULL );
  288. //ASSERT( m_pfnIsThemeDialogTextureEnabled != NULL );
  289. if( m_pfnIsThemeDialogTextureEnabled != NULL ) 
  290. return m_pfnIsThemeDialogTextureEnabled( hwnd );
  291. return FALSE;
  292. }
  293. DWORD CExtUxTheme::GetThemeAppProperties()
  294. {
  295. //ASSERT( m_hUxTheme != NULL );
  296. //ASSERT( m_pfnGetThemeAppProperties != NULL );
  297. if( m_pfnGetThemeAppProperties != NULL ) 
  298. return m_pfnGetThemeAppProperties();
  299. return 0;
  300. }
  301. void CExtUxTheme::SetThemeAppProperties( DWORD dwFlags )
  302. {
  303. //ASSERT( m_hUxTheme != NULL );
  304. //ASSERT( m_pfnSetThemeAppProperties != NULL );
  305. if( m_pfnSetThemeAppProperties != NULL ) 
  306. m_pfnSetThemeAppProperties( dwFlags );
  307. }
  308. HRESULT CExtUxTheme::GetCurrentThemeName(
  309. OUT __EXT_UX_LPWSTR pszThemeFileName, 
  310. int cchMaxNameChars, 
  311. OUT OPTIONAL __EXT_UX_LPWSTR pszColorBuff, 
  312. int cchMaxColorChars,
  313. OUT OPTIONAL __EXT_UX_LPWSTR pszSizeBuff, 
  314. int cchMaxSizeChars
  315. )
  316. {
  317. //ASSERT( m_hUxTheme != NULL );
  318. //ASSERT( m_pfnGetCurrentThemeName != NULL );
  319. if( m_pfnGetCurrentThemeName != NULL ) 
  320. return m_pfnGetCurrentThemeName( pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars );
  321. return S_FALSE;
  322. }
  323. HRESULT CExtUxTheme::GetThemeDocumentationProperty(
  324. __EXT_UX_LPCWSTR pszThemeName,
  325. __EXT_UX_LPCWSTR pszPropertyName, 
  326. OUT __EXT_UX_LPWSTR pszValueBuff, 
  327. int cchMaxValChars
  328. )
  329. {
  330. //ASSERT( m_hUxTheme != NULL );
  331. //ASSERT( m_pfnGetThemeDocumentationProperty != NULL );
  332. if( m_pfnGetThemeDocumentationProperty != NULL ) 
  333. return m_pfnGetThemeDocumentationProperty( pszThemeName, pszPropertyName, pszValueBuff, cchMaxValChars );
  334. return S_FALSE;
  335. }
  336. HRESULT CExtUxTheme::DrawThemeParentBackground(
  337. HWND hwnd, 
  338. HDC hdc, 
  339. OPTIONAL RECT * prc
  340. )
  341. {
  342. //ASSERT( m_hUxTheme != NULL );
  343. //ASSERT( m_pfnDrawThemeParentBackground != NULL );
  344. if( m_pfnDrawThemeParentBackground != NULL ) 
  345. return m_pfnDrawThemeParentBackground( hwnd, hdc, prc );
  346. return S_FALSE;
  347. }
  348. HRESULT CExtUxTheme::EnableTheming( BOOL fEnable )
  349. {
  350. //ASSERT( m_hUxTheme != NULL );
  351. //ASSERT( m_pfnEnableTheming != NULL );
  352. if( m_pfnEnableTheming != NULL ) 
  353. return m_pfnEnableTheming( fEnable );
  354. return S_FALSE;
  355. }
  356. HRESULT CExtUxTheme::DrawThemeBackgroundEx(
  357. HDC hdc, 
  358. int iPartId, 
  359. int iStateId, 
  360. const RECT * pRect, 
  361. OPTIONAL const CExtUxTheme::__EXT_UX_DTBGOPTS * pOptions
  362. )
  363. {
  364. //ASSERT( m_hUxTheme != NULL );
  365. //ASSERT( m_pfnDrawThemeBackgroundEx != NULL );
  366. if( m_pfnDrawThemeBackgroundEx != NULL ) 
  367. return m_pfnDrawThemeBackgroundEx( m_hUxTheme, hdc, iPartId, iStateId, pRect, pOptions );
  368. return S_FALSE;
  369. }
  370. //////////////////////////////////////////////////////////////////////////
  371. // CExtDWM class
  372. //////////////////////////////////////////////////////////////////////////
  373. CExtDWM::CExtDWM()
  374. : m_hDWMDll( NULL )
  375. , m_bNeedToFreeDll( false )
  376. , m_nDwmMaxQueuedBuffers( 8 )
  377. , m_nDwmMaxMonitors( 16 )
  378. , m_nDwmMaxAdapters( 16 )
  379. , m_pfnDwmDefWindowProc( NULL )
  380. , m_pfnDwmEnableBlurBehindWindow( NULL )
  381. , m_pfnDwmEnableComposition( NULL )
  382. , m_pfnDwmEnableMMCSS( NULL )
  383. , m_pfnDwmExtendFrameIntoClientArea( NULL )
  384. , m_pfnDwmGetColorizationColor( NULL )
  385. , m_pfnDwmGetCompositionTimingInfo( NULL )
  386. , m_pfnDwmGetWindowAttribute( NULL )
  387. , m_pfnDwmIsCompositionEnabled( NULL )
  388. , m_pfnDwmModifyPreviousDxFrameDuration( NULL )
  389. , m_pfnDwmQueryThumbnailSourceSize( NULL )
  390. , m_pfnDwmRegisterThumbnail( NULL )
  391. , m_pfnDwmSetDxFrameDuration( NULL )
  392. , m_pfnDwmSetPresentParameters( NULL )
  393. , m_pfnDwmSetWindowAttribute( NULL )
  394. , m_pfnDwmUnregisterThumbnail( NULL )
  395. , m_pfnDwmUpdateThumbnailProperties( NULL )
  396. {
  397. struct
  398. {
  399. FARPROC * m_pFarProc;
  400. LPCSTR m_strProcName;
  401. } arrDWMApi[] =
  402. {
  403. { (FARPROC*)&m_pfnDwmDefWindowProc, "DwmDefWindowProc" },
  404. { (FARPROC*)&m_pfnDwmEnableBlurBehindWindow, "DwmEnableBlurBehindWindow" },
  405. { (FARPROC*)&m_pfnDwmEnableComposition, "DwmEnableComposition" },
  406. { (FARPROC*)&m_pfnDwmEnableMMCSS, "DwmEnableMMCSS" },
  407. { (FARPROC*)&m_pfnDwmExtendFrameIntoClientArea, "DwmExtendFrameIntoClientArea" },
  408. { (FARPROC*)&m_pfnDwmGetColorizationColor, "DwmGetColorizationColor" },
  409. { (FARPROC*)&m_pfnDwmGetCompositionTimingInfo, "DwmGetCompositionTimingInfo" },
  410. { (FARPROC*)&m_pfnDwmGetWindowAttribute, "DwmGetWindowAttribute" },
  411. { (FARPROC*)&m_pfnDwmIsCompositionEnabled, "DwmIsCompositionEnabled" },
  412. { (FARPROC*)&m_pfnDwmModifyPreviousDxFrameDuration, "DwmModifyPreviousDxFrameDuration" },
  413. { (FARPROC*)&m_pfnDwmQueryThumbnailSourceSize, "DwmQueryThumbnailSourceSize" },
  414. { (FARPROC*)&m_pfnDwmRegisterThumbnail, "DwmRegisterThumbnail" },
  415. { (FARPROC*)&m_pfnDwmSetDxFrameDuration, "DwmSetDxFrameDuration" },
  416. { (FARPROC*)&m_pfnDwmSetPresentParameters, "DwmSetPresentParameters" },
  417. { (FARPROC*)&m_pfnDwmSetWindowAttribute, "DwmSetWindowAttribute" },
  418. { (FARPROC*)&m_pfnDwmUnregisterThumbnail, "DwmUnregisterThumbnail" },
  419. { (FARPROC*)&m_pfnDwmUpdateThumbnailProperties, "DwmUpdateThumbnailProperties" },
  420. };
  421. if( m_hDWMDll == NULL )
  422. {
  423. m_hDWMDll =
  424. ::GetModuleHandle( _T("dwmapi.dll") );
  425. if( m_hDWMDll == NULL )
  426. {
  427. m_hDWMDll = ::LoadLibrary( _T("dwmapi.dll") );
  428. m_bNeedToFreeDll = true;
  429. }
  430. } // if( m_hDWMDll == NULL )
  431. if( m_hDWMDll != NULL )
  432. {
  433. INT nApiCount = sizeof(arrDWMApi)/sizeof(arrDWMApi[0]);
  434. for( INT nFunc = 0; nFunc < nApiCount; nFunc++ )
  435. {
  436. FARPROC pFarProc = NULL;
  437. pFarProc = 
  438. ::GetProcAddress(
  439. m_hDWMDll,
  440. arrDWMApi[nFunc].m_strProcName
  441. );
  442. *(arrDWMApi[nFunc].m_pFarProc) = pFarProc;
  443. }
  444. } // if( m_hDWMDll != NULL )
  445. }
  446. CExtDWM::~CExtDWM()
  447. {
  448. if( m_hDWMDll != NULL && m_bNeedToFreeDll ) 
  449. {
  450. ::FreeLibrary( m_hDWMDll );
  451. m_hDWMDll = NULL;
  452. }
  453. }
  454. BOOL CExtDWM::IsCompositionEnabled()
  455. {
  456. if( m_hDWMDll == NULL )
  457. return FALSE;
  458. BOOL bEnabled = FALSE;
  459. HRESULT hr = DwmIsCompositionEnabled( &bEnabled );
  460. if( SUCCEEDED(hr) )
  461. return bEnabled;
  462. return FALSE;
  463. }
  464. BOOL CExtDWM::DwmDefWindowProc(
  465. IN HWND hWnd,
  466. IN UINT msg,
  467. IN WPARAM wParam,
  468. IN LPARAM lParam,
  469. OUT LRESULT * plResult
  470. )
  471. {
  472. if( m_pfnDwmDefWindowProc != NULL ) 
  473. return m_pfnDwmDefWindowProc( hWnd, msg, wParam, lParam, plResult );
  474. return FALSE;
  475. }
  476. HRESULT CExtDWM::DwmEnableBlurBehindWindow(
  477. HWND hWnd, 
  478. const __EXT_DWM_BLURBEHIND * pBlurBehind
  479. )
  480. {
  481. if( m_pfnDwmEnableBlurBehindWindow != NULL ) 
  482. return m_pfnDwmEnableBlurBehindWindow( hWnd, pBlurBehind );
  483. return S_FALSE;
  484. }
  485. HRESULT CExtDWM::DwmEnableComposition(
  486. BOOL fEnable
  487. )
  488. {
  489. if( m_pfnDwmEnableComposition != NULL ) 
  490. return m_pfnDwmEnableComposition( fEnable );
  491. return S_FALSE;
  492. }
  493. HRESULT CExtDWM::DwmEnableMMCSS(
  494. BOOL fEnableMMCSS
  495. )
  496. {
  497. if( m_pfnDwmEnableMMCSS != NULL ) 
  498. return m_pfnDwmEnableMMCSS( fEnableMMCSS );
  499. return S_FALSE;
  500. }
  501. HRESULT CExtDWM::DwmExtendFrameIntoClientArea(
  502. HWND hWnd,
  503. const CExtUxTheme::__EXT_UX__MARGINS * pMarInset
  504. )
  505. {
  506. if( m_pfnDwmExtendFrameIntoClientArea != NULL ) 
  507. return m_pfnDwmExtendFrameIntoClientArea( hWnd, pMarInset );
  508. return S_FALSE;
  509. }
  510. HRESULT CExtDWM::DwmGetColorizationColor(
  511. DWORD * pcrColorization,
  512. BOOL * pfOpaqueBlend
  513. )
  514. {
  515. if( m_pfnDwmGetColorizationColor != NULL ) 
  516. return m_pfnDwmGetColorizationColor( pcrColorization, pfOpaqueBlend );
  517. return S_FALSE;
  518. }
  519. HRESULT CExtDWM::DwmGetCompositionTimingInfo(
  520. HWND hwnd,
  521. __EXT_DWM_TIMING_INFO * pTimingInfo
  522. )
  523. {
  524. if( m_pfnDwmGetCompositionTimingInfo != NULL ) 
  525. return m_pfnDwmGetCompositionTimingInfo( hwnd, pTimingInfo );
  526. return S_FALSE;
  527. }
  528. HRESULT CExtDWM::DwmGetWindowAttribute(
  529. HWND hwnd,
  530. DWORD dwAttribute,
  531. PVOID pvAttribute, 
  532. DWORD cbAttribute
  533. )
  534. {
  535. if( m_pfnDwmGetWindowAttribute != NULL ) 
  536. return m_pfnDwmGetWindowAttribute( hwnd, dwAttribute, pvAttribute, cbAttribute );
  537. return S_FALSE;
  538. }
  539. HRESULT CExtDWM::DwmIsCompositionEnabled(
  540. BOOL * pfEnabled
  541. )
  542. {
  543. if( m_pfnDwmIsCompositionEnabled != NULL ) 
  544. return m_pfnDwmIsCompositionEnabled( pfEnabled );
  545. return S_FALSE;
  546. }
  547. HRESULT CExtDWM::DwmModifyPreviousDxFrameDuration(
  548. HWND hwnd, 
  549. INT cRefreshes,
  550. BOOL fRelative
  551. )
  552. {
  553. if( m_pfnDwmModifyPreviousDxFrameDuration != NULL ) 
  554. return m_pfnDwmModifyPreviousDxFrameDuration( hwnd, cRefreshes, fRelative );
  555. return S_FALSE;
  556. }
  557. HRESULT CExtDWM::DwmQueryThumbnailSourceSize(
  558. __EXT_HTHUMBNAIL hThumbnail, 
  559. OUT PSIZE pSize
  560. )
  561. {
  562. if( m_pfnDwmQueryThumbnailSourceSize != NULL ) 
  563. return m_pfnDwmQueryThumbnailSourceSize( hThumbnail, pSize );
  564. return S_FALSE;
  565. }
  566. HRESULT CExtDWM::DwmRegisterThumbnail(
  567. HWND hwndDestination, 
  568. HWND hwndSource, 
  569. const SIZE * pMinimizedSize,
  570. __EXT_PHTHUMBNAIL phThumbnailId
  571. )
  572. {
  573. if( m_pfnDwmRegisterThumbnail != NULL ) 
  574. return m_pfnDwmRegisterThumbnail( hwndDestination, hwndSource, pMinimizedSize, phThumbnailId );
  575. return S_FALSE;
  576. }
  577. HRESULT CExtDWM::DwmSetDxFrameDuration(
  578. HWND hwnd, 
  579. INT cRefreshes
  580. )
  581. {
  582. if( m_pfnDwmSetDxFrameDuration != NULL ) 
  583. return m_pfnDwmSetDxFrameDuration( hwnd, cRefreshes );
  584. return S_FALSE;
  585. }
  586. HRESULT CExtDWM::DwmSetPresentParameters(
  587. HWND hwnd,
  588. __EXT_DWM_PRESENT_PARAMETERS * pPresentParams
  589. )
  590. {
  591. if( m_pfnDwmSetPresentParameters != NULL ) 
  592. return m_pfnDwmSetPresentParameters( hwnd, pPresentParams );
  593. return S_FALSE;
  594. }
  595. HRESULT CExtDWM::DwmSetWindowAttribute(
  596. HWND hwnd,
  597. DWORD dwAttribute,
  598. LPCVOID pvAttribute, 
  599. DWORD cbAttribute
  600. )
  601. {
  602. if( m_pfnDwmSetWindowAttribute != NULL ) 
  603. return m_pfnDwmSetWindowAttribute( hwnd, dwAttribute, pvAttribute, cbAttribute );
  604. return S_FALSE;
  605. }
  606. HRESULT CExtDWM::DwmUnregisterThumbnail(
  607. __EXT_HTHUMBNAIL hThumbnailId
  608. )
  609. {
  610. if( m_pfnDwmUnregisterThumbnail != NULL ) 
  611. return m_pfnDwmUnregisterThumbnail( hThumbnailId );
  612. return S_FALSE;
  613. }
  614. HRESULT CExtDWM::DwmUpdateThumbnailProperties(
  615. __EXT_HTHUMBNAIL hThumbnailId, 
  616. const __EXT_DWM_THUMBNAIL_PROPERTIES * ptnProperties
  617. )
  618. {
  619. if( m_pfnDwmUpdateThumbnailProperties != NULL ) 
  620. return m_pfnDwmUpdateThumbnailProperties( hThumbnailId, ptnProperties );
  621. return S_FALSE;
  622. }
  623. //////////////////////////////////////////////////////////////////////////
  624. // CExtPaintManagerOffice2003NoThemes
  625. //////////////////////////////////////////////////////////////////////////
  626. CExtPaintManagerOffice2003NoThemes::CExtPaintManagerOffice2003NoThemes()
  627. {
  628. }
  629. CExtPaintManagerOffice2003NoThemes::~CExtPaintManagerOffice2003NoThemes()
  630. {
  631. }
  632. bool CExtPaintManagerOffice2003NoThemes::OnQueryUseThemeColors() const
  633. {
  634. ASSERT_VALID( this );
  635. return false;
  636. }
  637. double CExtPaintManagerOffice2003NoThemes::GetIconAlphaAdjustPercent() const
  638. {
  639. ASSERT_VALID( this );
  640. return -0.70;
  641. }
  642. COLORREF CExtPaintManagerOffice2003NoThemes::GetIconAlphaColor() const
  643. {
  644. COLORREF clrAlpha = ( const_cast < CExtPaintManagerOffice2003NoThemes * > ( this ) ) -> GetColor( COLOR_3DFACE, (CObject*)this );
  645. return clrAlpha;
  646. }
  647. //////////////////////////////////////////////////////////////////////////
  648. // CExtPaintManagerOffice2007_Impl
  649. //////////////////////////////////////////////////////////////////////////
  650. COLORREF CExtPaintManagerOffice2007_Impl::GetIconAlphaColor() const
  651. {
  652. ASSERT_VALID( this );
  653. if( IsHighContrast() )
  654. return CExtPaintManagerXP::GetIconAlphaColor();
  655. return m_clrIconAlphaColor;
  656. }
  657. double CExtPaintManagerOffice2007_Impl::GetIconAlphaAdjustPercent() const
  658. {
  659. ASSERT_VALID( this );
  660. if( IsHighContrast() )
  661. return CExtPaintManagerXP::GetIconAlphaAdjustPercent();
  662. return m_lfIconAlphaAdjustPercent;
  663. }
  664. CExtPaintManagerOffice2007_Impl::CExtPaintManagerOffice2007_Impl()
  665. : m_bThemedMenuItemsEverywhere( false )
  666. , m_clrFillHint( RGB(0,0,0) )
  667. , m_clrAccentHint( RGB(255,255,255) )
  668. , m_clrDockingFrameDark( RGB(0,0,0) )
  669. , m_clrFloatingToolbarGripperSolid( COLORREF(-1L) )
  670. , m_clrDockingFrameCaptionTextActive( RGB(0,0,0) )
  671. , m_clrDockingFrameCaptionTextInactive( RGB(255,255,255) )
  672. , m_clrDockingFrameCaptionTextFloatingFixed( RGB(255,255,255) )
  673. , m_clrDockingCaptionShapeFixedPushed( RGB(0,0,0) )
  674. , m_clrDockingCaptionShapeResizablePushed( RGB(0,0,0) )
  675. , m_clrDockingCaptionShapeFixedHover( RGB(0,0,0) )
  676. , m_clrDockingCaptionShapeResizableHover( RGB(0,0,0) )
  677. , m_clrDockingCaptionShapeFixedNormal( RGB(0,0,0) )
  678. , m_clrDockingCaptionShapeResizableNormal( RGB(0,0,0) )
  679. #ifdef __FREIWALD_ORIGINAL__
  680. #else
  681. // the following items remain unitialized in the original code:
  682. , m_clrDockingCaptionShapeFixedDisabled(RGB(160, 160, 160))
  683. , m_clrDockingCaptionShapeResizableDisabled(RGB(160, 160, 160))
  684. #endif
  685. , m_clrTransparentNcFrameActive( RGB(255,0,255) )
  686. , m_clrTransparentNcFrameInactive( RGB(255,0,255) )
  687. , m_rcNcFrameBordersActive( 0, 0, 0, 0 )
  688. , m_rcNcFrameBordersInactive( 0, 0, 0, 0 )
  689. , m_nCaptionHeightActive( 0 )
  690. , m_nCaptionHeightInactive( 0 )
  691. , m_bUseNcFrameBmpForDockerBkgnd( false )
  692. , m_clrNcFrameTextActive( COLORREF(-1L) )
  693. , m_clrNcFrameTextInactive( COLORREF(-1L) )
  694. , m_rcNcButtonBkPadding( 3, 3, 3, 3 )
  695. , m_sizeNcButtonShapeInArr( 17, 16 )
  696. , m_nNcBtnIdxDisabled( 3 )
  697. , m_nNcBtnIdxNormalActive( 0 )
  698. , m_nNcBtnIdxNormalInactive( 4 )
  699. , m_nNcBtnIdxHover( 1 )
  700. , m_nNcBtnIdxPressed( 2 )
  701. #if (!defined __EXT_MFC_NO_STATUSBAR)
  702. , m_rcStatusBkPadding( 0, 0, 0, 0 )
  703. , m_rcStatusSeparatorPadding( 0, 0, 0, 0 )
  704. , m_clrStatusPaneTextColorDisabled( RGB(128,128,128) )
  705. , m_clrStatusPaneTextColorNormal( RGB(0,0,0) )
  706. #endif // (!defined __EXT_MFC_NO_STATUSBAR)
  707. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  708. , m_nIdxTabShapeDisabled( -1 )
  709. , m_nIdxTabShapeNormal( -1 )
  710. , m_nIdxTabShapeHover( -1 )
  711. , m_nIdxTabShapePressed( -1 )
  712. , m_nIdxTabShapeSelected( -1 )
  713. , m_nIdxTabShapeSelectedHover( -1 )
  714. , m_clrTabTextNormal( RGB(0,0,0) )
  715. , m_clrTabTextSelected( RGB(0,0,0) )
  716. , m_clrTabTextNormalDWM( COLORREF(-1L) )
  717. , m_clrTabTextSelectedDWM( COLORREF(-1L) )
  718. #endif // (!defined __EXT_MFC_NO_TAB_CTRL)
  719. , m_clrMenuItemLeftAreaMarginL( COLORREF(-1L) )
  720. , m_clrMenuItemLeftAreaMarginR( COLORREF(-1L) )
  721. , m_nMenuGlyphItemHeightSmall( 22 )
  722. , m_nMenuGlyphItemHeightLarge( 44 )
  723. , m_rcMenuItemPaddingLargeLeft(  3, 2, 3, 2 )
  724. , m_rcMenuItemPaddingLargeRight( 1, 2, 3, 2 )
  725. , m_rcMenuItemPaddingSmallLeft(  3, 2, 3, 2 )
  726. , m_rcMenuItemPaddingSmallRight( 1, 2, 3, 2 )
  727. , m_clrDCA1( COLORREF(-1) )
  728. , m_clrDCA2( COLORREF(-1) )
  729. , m_clrDCA3( COLORREF(-1) )
  730. , m_bDocumentClientAreaBkgndR2( false )
  731. , m_clrDCA_Solid( COLORREF(-1L) )
  732. , m_sizeComboBoxDropDown( 15, 19 )
  733. , m_rcPaddingComboBoxDropDown( 3, 3, 3, 3 )
  734. , m_lfIconAlphaAdjustPercent( -0.50 )
  735. , m_clrIconAlphaColor( COLORREF(-1L) )
  736. //  , m_nTbbLightWeightSimpleGlyphHeightH( 22 )
  737. //  , m_nTbbLightWeightSimpleGlyphHeightV( 22 )
  738. //  , m_nTbbLightWeightSDDLeftGlyphHeightH( 22 )
  739. //  , m_nTbbLightWeightSDDLeftGlyphHeightV( 22 )
  740. //  , m_nTbbLightWeightSDDRightGlyphHeightH( 22 )
  741. //  , m_nTbbLightWeightSDDRightGlyphHeightV( 9 )
  742. //  , m_rcTbbLightWeightSimplePaddingH( 3, 3, 3, 3 )
  743. //  , m_rcTbbLightWeightSimplePaddingV( 3, 3, 3, 3 )
  744. //  , m_rcTbbLightWeightSDDLeftPaddingH( 3, 3, 3, 3 )
  745. //  , m_rcTbbLightWeightSDDLeftPaddingV( 3, 3, 3, 3 )
  746. //  , m_rcTbbLightWeightSDDRightPaddingH( 3, 3, 3, 3 )
  747. //  , m_rcTbbLightWeightSDDRightPaddingV( 3, 3, 3, 3 )
  748. , m_nPushBtnSimpleGlyphHeightH( 22 )
  749. , m_nPushBtnSimpleGlyphHeightV( 22 )
  750. , m_nPushBtnSDDLeftGlyphHeightH( 22 )
  751. , m_nPushBtnSDDLeftGlyphHeightV( 22 )
  752. , m_nPushBtnSDDRightGlyphHeightH( 22 )
  753. , m_nPushBtnSDDRightGlyphHeightV( 9 )
  754. , m_rcPushBtnSimplePaddingH( 3, 3, 3, 3 )
  755. , m_rcPushBtnSimplePaddingV( 3, 3, 3, 3 )
  756. , m_rcPushBtnSDDLeftPaddingH( 3, 3, 3, 3 )
  757. , m_rcPushBtnSDDLeftPaddingV( 3, 3, 3, 3 )
  758. , m_rcPushBtnSDDRightPaddingH( 3, 3, 3, 3 )
  759. , m_rcPushBtnSDDRightPaddingV( 3, 3, 3, 3 )
  760. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  761. , m_rcRibbonTabAreaBlurPadding( 0, 0, 0, 0 )
  762. , m_clrRibbonTabClientAreaActive( COLORREF(-1L) )
  763. , m_clrRibbonTabClientAreaInactive( COLORREF(-1L) )
  764. , m_nQatbAdditionalSpaceAtRight( 0 )
  765. , m_nQatbAdditionalSpaceAtRightDWM( 0 )
  766. , m_clrContractedMargin1( COLORREF(-1L) )
  767. , m_clrContractedMargin2( COLORREF(-1L) )
  768. , m_nContractedMarginHeight( 0 )
  769. , m_rcRibbonPageOuterContentPadding( 4, 3, 3, 4 )
  770. , m_nRibbonGroupIconBkVertOffset( 0 )
  771. , m_nRibbonCaptionPartHeight( 0 )
  772. , m_nRibbonGroupCaptionAreaHeightExpanded( 0 )
  773. , m_nRibbonGroupCaptionAreaHeightCollapsed( 0 )
  774. , m_rcRibbonPageBkPadding( 0, 0, 0, 0 )
  775. , m_rcRibbonGroupPaddingBkExpanded( 0, 0, 0, 0 )
  776. , m_rcRibbonGroupPaddingBkCollapsed( 0, 0, 0, 0 )
  777. , m_bRibbonGroupCaptionAtTop( false )
  778. , m_bRibbonGroupCaptionAreaHasPadding( false )
  779. , m_rcRibbonSeparatorPaddingH( 0, 0, 0, 0 )
  780. , m_rcRibbonSeparatorPaddingV( 0, 0, 0, 0 )
  781. , m_nRibbonSeparatorDrawModeH( 0 )
  782. , m_nRibbonSeparatorDrawModeV( 0 )
  783. , m_clrRibbonGroupCaptionTextExpanded( RGB( 255, 255, 255 ) )
  784. , m_clrRibbonGroupCaptionTextShadowExpanded( COLORREF(-1L) )
  785. , m_clrRibbonGroupCaptionTextCollapsed( RGB(0,0,0) )
  786. , m_clrRibbonButtonNormal( RGB(0,0,0) )
  787. , m_clrRibbonButtonDisabled( RGB(0,0,0) )
  788. , m_sizeRibbonGroupCaptionTextOffset( 0, 0 )
  789. , m_nRibbonGroupCaptionTextDF( DT_SINGLELINE|DT_LEFT|DT_VCENTER|DT_END_ELLIPSIS )
  790. , m_nRibbonGroupCaptionTextShadowDF( DT_SINGLELINE|DT_LEFT|DT_VCENTER|DT_END_ELLIPSIS )
  791. , m_nRibbonQuickAccessBarButtonsAlignment( -1 )
  792. , m_rcPaddingRibbonQuickAccessBarBkAtTheBottom( 0, 0, 0, 0 )
  793. , m_nRibbonTabIntersectionHeight( 0 )
  794. , m_rcRibbonNcCornerLeftCP( 0, 0, 0, 0 )
  795. , m_rcRibbonNcCornerRightCP( 0, 0, 0, 0 )
  796. , m_nRibbonFileButtonHeight( 45 )
  797. , m_clrRibbon_EmbeddedCaptionTextLeft( RGB(80,80,80) )
  798. , m_clrRibbon_EmbeddedCaptionTextRight( RGB(128,128,128) )
  799. , m_nRibbonEmbeddedCaptionTextAlignmentFlags( DT_SINGLELINE|DT_CENTER|DT_VCENTER )
  800. , m_bRibbonFileButtonItegrationSupported( true )
  801. , m_rcRibbonPaddingQACEB( 2, 2, 2, 2 )
  802. , m_nRibbonHeightOfQACEB( 18 )
  803. , m_nIdxRibbonQACEB_Normal( 0 )
  804. , m_nIdxRibbonQACEB_Hover( 1 )
  805. , m_nIdxRibbonQACEB_Pressed( 2 )
  806. , m_nIdxRibbonQACEB_Selected( 0 )
  807. , m_nRibbonHeightOfOneDLB( -1 )
  808. , m_nDlbIdxDisabled( -1 )
  809. , m_nDlbIdxNormal( -1 )
  810. , m_nDlbIdxHover( -1 )
  811. , m_nDlbIdxPressed( -1 )
  812. , rcRibbonContentPaddingDLB( 0, 0, 0, 0 )
  813. , m_clrRibbonGalleryInplaceBorderNormal( COLORREF( -1L ) )
  814. , m_clrRibbonGalleryInplaceBorderHover( COLORREF( -1L ) )
  815. , m_clrRibbonGalleryInplaceBkgndNormal( COLORREF( -1L ) )
  816. , m_clrRibbonGalleryInplaceBkgndHover( COLORREF( -1L ) )
  817. , m_rcRibbonGalleryScrollFill( COLORREF( -1L ) )
  818. , m_rcRibbonGalleryScrollButtonPadding( 0, 0, 0, 0 )
  819. , m_nHeightRibbonGalleryScrollButton( -1 )
  820. , m_nIndexRibbonGalleryScrollButtonDisabled( -1 )
  821. , m_nIndexRibbonGalleryScrollButtonNormal( -1 )
  822. , m_nIndexRibbonGalleryScrollButtonHover( -1 )
  823. , m_nIndexRibbonGalleryScrollButtonPressed( -1 )
  824. , m_sizeAboveTheRibbonShiftQACEB( 0, 0 )
  825. , m_nRibbonFileButtonMenuIntersectionHeight( 0 )
  826. , m_clrRibbonComboBackGroundNormal( COLORREF(-1L) )
  827. , m_clrRibbonComboBackGroundDisabled( COLORREF(-1L) )
  828. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  829. , m_sizeRibbonComboBoxDropDown( 15, 20 )
  830. , m_rcRibbonPaddingComboBoxDropDown( 1, 1, 1, 1 )
  831. , m_clrRibbonModeMenuTextNormal( COLORREF( -1L ) )
  832. , m_rcRibbonModeMenuBorderPadding( 3, 3, 3, 3 )
  833. , m_rcRibbonModeMenuMetrics( 1, 1, 1, 1 )
  834. , m_rcPaddingRibbonMenuResizingMarginHV( 0, 0, 0, 0 )
  835. , m_rcPaddingRibbonMenuResizingMarginV( 0, 0, 0, 0 )
  836. // tool buttons 2007
  837. , m_rcPaddingOfButtonTS( 3, 3, 3, 3 )
  838. , m_rcPaddingOfButtonSS( 3, 3, 3, 3 )
  839. , m_rcPaddingOfButtonLSM( 3, 3, 3, 3 )
  840. //, m_rcPaddingOfButtonLSB( 3, 3, 3, 3 )
  841. , m_rcPaddingOfButtonLSXM( 3, 3, 3, 3 )
  842. , m_rcPaddingOfButtonLSXB( 3, 3, 3, 3 )
  843. , m_rcPaddingOfToolButtonSeparator( 0, 3, 0, 3 )
  844. , m_rcPaddingOfLargeButtonSeparator( 2, 0, 2, 0 )
  845. , m_nHeightOfButtonTS( 22 )
  846. , m_nHeightOfButtonSS( 22 )
  847. , m_nHeightOfButtonLSM( 56 )
  848. //, m_nHeightOfButtonLSB( 26 )
  849. , m_nHeightOfButtonLSXM( 39 )
  850. , m_nHeightOfButtonLSXB( 27 )
  851. , m_rcAdvTipPaddingBorder( 3, 3, 3, 3 )
  852. , m_rcAdvTipPaddingGradient( 1, 1, 1, 1 )
  853. , m_clrAdvTipGradientTop( RGB(255,255,255) )
  854. , m_clrAdvTipGradientBottom( RGB(204,219,240) )
  855. , m_clrAdvTipText( RGB(64,64,64) )
  856. , m_bAdvTipOnePxExcludeMode( true )
  857. , m_clrMenuCaptionText( RGB(0,0,0) )
  858. , m_rcMenuCaptionBmpPadding( 0, 0, 0, 0 )
  859. , m_rcPaddingRibbonFileMenuBigBorder( 0, 0, 0, 0 )
  860. , m_rcPaddingRibbonFileMenuOptionsButton( 0, 0, 0, 0 )
  861. // , m_clrZsLineLightEnabled( RGB(0,0,0) )
  862. // , m_clrZsLineLightDisabled( RGB(0,0,0) )
  863. // , m_clrZsLineDarkEnabled( RGB(0,0,0) )
  864. // , m_clrZsLineDarkDisabled( RGB(0,0,0) )
  865. , m_rcProgressBarPartH( 0, 0, 92, 8 )
  866. , m_rcProgressBarPartV( 0, 92, 8, 182 )
  867. , m_rcProgressBackgroundPartH( 92, 0, 182, 8 )
  868. , m_rcProgressBackgroundPartV( 0, 0, 8, 92 )
  869. , m_rcProgressBarPaddingH( 1, 1, 10, 1 )
  870. , m_rcProgressBarPaddingV( 1, 10, 1, 1 )
  871. , m_rcProgressBackgroundPaddingH( 0, 0, 0, 0 )
  872. , m_rcProgressBackgroundPaddingV( 0, 0, 0, 0 )
  873. , m_rcProgressBorderPaddingH( 2, 2, 2, 2 )
  874. , m_rcProgressBorderPaddingV( 2, 2, 2, 2 )
  875. {
  876. m_bUseTahomaFont = false;
  877. #if (!defined __EXT_MFC_NO_PAGE_NAVIGATOR )
  878. m_bPnPaneCaptFontBold = true;
  879. m_strPnPaneCaptCustomFontFaceName = _T("Arial");
  880. // simple/gradient version of page navigator
  881. m_arrClrPnCaptNormal[0]  = RGB(248,248,249);
  882. m_arrClrPnCaptNormal[1]  = RGB(223,226,229);
  883. m_arrClrPnCaptNormal[2]  = RGB(199,203,209);
  884. m_arrClrPnCaptNormal[3]  = RGB(220,223,226);
  885. m_arrClrPnCaptActive[0]  = RGB(255,217,170);
  886. m_arrClrPnCaptActive[1]  = RGB(255,188,111);
  887. m_arrClrPnCaptActive[2]  = RGB(255,171, 63);
  888. m_arrClrPnCaptActive[3]  = RGB(254,225,123);
  889. m_arrClrPnCaptHover[0]   = RGB(255,254,228);
  890. m_arrClrPnCaptHover[1]   = RGB(255,233,168);
  891. m_arrClrPnCaptHover[2]   = RGB(255,215,103);
  892. m_arrClrPnCaptHover[3]   = RGB(255,230,159);
  893. m_arrClrPnCaptPressed[0] = RGB(255,189,105);
  894. m_arrClrPnCaptPressed[1] = RGB(255,173, 67);
  895. m_arrClrPnCaptPressed[2] = RGB(251,140, 60);
  896. m_arrClrPnCaptPressed[3] = RGB(255,187,103);
  897. m_arrClrPnSplitter[0]    = RGB(255,255,255);
  898. m_arrClrPnSplitter[1]    = RGB(196,200,206);
  899. m_clrPnSplitterDots  = RGB(124,124,124);
  900. m_clrPnCaptText  = RGB(0,0,0); 
  901. m_arrClrPnItemText[0]    = RGB(0,0,0);
  902. m_arrClrPnItemText[1]    = RGB(55,60,67);
  903. m_clrPnConfigButton  = RGB(49,52,49); 
  904. // bitmap based version of page navigator
  905. INT nPnIndex, nPnCount = INT(ePn_Count);
  906. for( nPnIndex = 0; nPnIndex < nPnCount; nPnIndex ++ )
  907. {
  908. m_arrClrPnItemTextBmpVer[nPnIndex] = m_arrClrPnPaneTextBmpVer[nPnIndex] = COLORREF(-1L);
  909. m_arrRcPnItemPaddingExpanded[nPnIndex].SetRect( 0, 0, 0, 0 );
  910. m_arrRcPnItemPaddingCollapsed[nPnIndex].SetRect( 0, 0, 0, 0 );
  911. m_arrRcPnPanePadding[nPnIndex].SetRect( 0, 0, 0, 0 );
  912. }
  913. #endif // (!defined __EXT_MFC_NO_PAGE_NAVIGATOR )
  914. // tool buttons 2007
  915. INT nInitIndex, nInitCount;
  916. nInitCount = sizeof(m_arrIndicesButtonTS)/sizeof(m_arrIndicesButtonTS[0]);
  917. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  918. m_arrIndicesButtonTS[nInitIndex] = -1;
  919. nInitCount = sizeof(m_arrIndicesButtonSS_Left)/sizeof(m_arrIndicesButtonSS_Left[0]);
  920. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  921. m_arrIndicesButtonSS_Left[nInitIndex] = -1;
  922. nInitCount = sizeof(m_arrIndicesButtonSS_Right)/sizeof(m_arrIndicesButtonSS_Right[0]);
  923. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  924. m_arrIndicesButtonSS_Right[nInitIndex] = -1;
  925. nInitCount = sizeof(m_arrIndicesButtonLSM)/sizeof(m_arrIndicesButtonLSM[0]);
  926. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  927. m_arrIndicesButtonLSM[nInitIndex] = -1;
  928. // nInitCount = sizeof(m_arrIndicesButtonLSB)/sizeof(m_arrIndicesButtonLSB[0]);
  929. // for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  930. // m_arrIndicesButtonLSB[nInitIndex] = -1;
  931. nInitCount = sizeof(m_arrIndicesButtonLSXM)/sizeof(m_arrIndicesButtonLSXM[0]);
  932. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  933. m_arrIndicesButtonLSXM[nInitIndex] = -1;
  934. nInitCount = sizeof(m_arrIndicesButtonLSXB)/sizeof(m_arrIndicesButtonLSXB[0]);
  935. for( nInitIndex = 0; nInitIndex < nInitCount; nInitIndex++ )
  936. m_arrIndicesButtonLSXB[nInitIndex] = -1;
  937. VERIFY(
  938. m_bmpAdvTipBorder.LoadBMP_Resource(
  939. MAKEINTRESOURCE( IDB_EXT_2007_ADV_TIP_BORDER )
  940. )
  941. );
  942. m_bmpAdvTipBorder.Make32();
  943. m_bmpAdvTipBorder.AlphaColor( RGB(255,0,255), RGB(0,0,0), 0 );
  944. m_bmpAdvTipBorder.PreMultiplyRGBChannels();
  945. m_bmpAdvTipBorder.PreMultipliedRGBChannelsSet( true );
  946. VERIFY(
  947. m_bmpProgressMainH.LoadBMP_Resource(
  948. MAKEINTRESOURCE( IDB_EXT_2007_PROGRESS_MAIN )
  949. )
  950. );
  951. VERIFY(
  952. m_bmpProgressMainV.CreateRotated9xStack(
  953. m_bmpProgressMainH,
  954. 270,
  955. 1,
  956. m_bmpProgressMainH.GetSize().cx,
  957. m_bmpProgressMainH.GetSize().cy,
  958. true,
  959. true
  960. )
  961. );
  962. VERIFY(
  963. m_bmpProgressBorderH.LoadBMP_Resource(
  964. MAKEINTRESOURCE( IDB_EXT_2007_PROGRESS_BORDER )
  965. )
  966. );
  967. VERIFY(
  968. m_bmpProgressBorderV.CreateRotated9xStack(
  969. m_bmpProgressBorderH,
  970. 270,
  971. 1,
  972. m_bmpProgressBorderH.GetSize().cx,
  973. m_bmpProgressBorderH.GetSize().cy,
  974. true,
  975. true
  976. )
  977. );
  978. }
  979. CExtPaintManagerOffice2007_Impl::~CExtPaintManagerOffice2007_Impl()
  980. {
  981. }
  982. void CExtPaintManagerOffice2007_Impl::PaintComboFrame(
  983. CDC & dc,
  984. CExtPaintManager::PAINTCOMBOFRAMEDATA & _pcfd
  985. )
  986. {
  987. ASSERT_VALID( this );
  988. ASSERT( dc.GetSafeHdc() != NULL );
  989. if( IsHighContrast() )
  990. {
  991. CExtPaintManagerXP::PaintComboFrame(
  992. dc,
  993. _pcfd
  994. );
  995. return;
  996. }
  997. if( _pcfd.m_pHelperSrc != NULL
  998. && _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPopupMenuWnd) )
  999. && ( ((CExtPopupMenuWnd*)_pcfd.m_pHelperSrc)->TrackFlagsGet() & TPMX_RIBBON_MODE ) == 0
  1000. )
  1001. {
  1002. CExtPaintManagerOffice2003::PaintComboFrame( dc, _pcfd );
  1003. return;
  1004. }
  1005. CExtComboBoxBase * pWndCombo = NULL;
  1006. if( _pcfd.m_pHelperSrc != NULL 
  1007. && _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtComboBoxBase ) )
  1008. )
  1009. {
  1010. pWndCombo = STATIC_DOWNCAST( CExtComboBoxBase, _pcfd.m_pHelperSrc );
  1011. ASSERT_VALID( pWndCombo );
  1012. }
  1013. if( m_bmpArrComboBoxDropDown.IsEmpty()
  1014. || _pcfd.m_pHelperSrc == NULL
  1015. || _pcfd.m_clrForceNABorder != COLORREF(-1L)
  1016. || _pcfd.m_clrForceNAContent != COLORREF(-1L)
  1017. || _pcfd.m_clrForceActiveOuterBorder != COLORREF(-1L)
  1018. || (! ( _pcfd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CComboBox))
  1019. || _pcfd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtBarButton))
  1020. || _pcfd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtPopupMenuWnd))
  1021. )
  1022. )
  1023. || (! GetCb2DbTransparentMode(_pcfd.m_pHelperSrc) )
  1024. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  1025. )
  1026. {
  1027. CExtPaintManagerOffice2003::PaintComboFrame( dc, _pcfd );
  1028. if( (!_pcfd.m_bEnabled) && pWndCombo != NULL )
  1029. {
  1030. ASSERT_VALID( pWndCombo );
  1031. CRect rcClip( _pcfd.m_rcClient );
  1032. rcClip.DeflateRect(1,1);
  1033. dc.ExcludeClipRect( &rcClip );
  1034. CExtPaintManagerOffice2003::PaintDockerBkgnd( true, dc, pWndCombo );
  1035. dc.SelectClipRgn( NULL );
  1036. }
  1037. return;
  1038. }
  1039. bool bPopupMenuComboFieldMode = false;
  1040. if( _pcfd.m_pHelperSrc != NULL
  1041. && _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPopupMenuWnd) )
  1042. )
  1043. bPopupMenuComboFieldMode = true;
  1044. INT nDD = GetDropDownButtonWidth( _pcfd.m_pHelperSrc, _pcfd.m_lParam );
  1045. CRect rcClient( _pcfd.m_rcClient );
  1046. CRect rcEraser( rcClient );
  1047. if( ! bPopupMenuComboFieldMode )
  1048. rcEraser.DeflateRect(1,1);
  1049. CRect rcHoverFrame( rcEraser );
  1050. CRect rcDDButton( rcEraser );
  1051. if( _pcfd.m_bRightText )
  1052. rcDDButton.right = rcDDButton.left + nDD;
  1053. else
  1054. rcDDButton.left = rcDDButton.right - nDD;
  1055. if( bPopupMenuComboFieldMode )
  1056. {
  1057. rcDDButton.DeflateRect( 1, 1 );
  1058. if( _pcfd.m_bRightText )
  1059. rcDDButton.right -= 2;
  1060. else
  1061. rcDDButton.left += 2;
  1062. }
  1063. CRect rcClientItem( rcEraser );
  1064. rcClientItem.DeflateRect( 1, 1, 3, 1 );
  1065. if( _pcfd.m_bRightText )
  1066. rcClientItem.left += rcDDButton.Width();
  1067. else
  1068. rcClientItem.right -= rcDDButton.Width();
  1069. if( bPopupMenuComboFieldMode )
  1070. rcClientItem.InflateRect(1,1);
  1071. CRgn rgnClip, rgnClientItem;
  1072. if( (! bPopupMenuComboFieldMode )
  1073. && rgnClip.CreateRectRgnIndirect(&rcClient)
  1074. && rgnClientItem.CreateRectRgnIndirect(&rcClientItem)
  1075. && rgnClip.CombineRgn( &rgnClip, &rgnClientItem,  RGN_DIFF ) != ERROR
  1076. )
  1077. dc.SelectClipRgn( &rgnClip );
  1078. if( pWndCombo != NULL )
  1079. {
  1080. ASSERT_VALID( pWndCombo );
  1081. if( ! CExtPaintManagerOffice2003::PaintDockerBkgnd( true, dc, pWndCombo ) )
  1082. {
  1083. if( rgnClip.GetSafeHandle() != NULL )
  1084. dc.SelectClipRgn( NULL );
  1085. CExtPaintManagerXP::PaintComboFrame( dc, _pcfd );
  1086. return;
  1087. }
  1088. } // if( pWndCombo != NULL )
  1089. COLORREF clrWindow = COLORREF(-1L);
  1090. if( pWndCombo != NULL )
  1091. clrWindow = pWndCombo->GetBkColor();
  1092. if( clrWindow == COLORREF(-1L) )
  1093. {
  1094. COLORREF clrSysBk = GetColor( _pcfd.m_bEnabled ? COLOR_WINDOW : COLOR_3DFACE, _pcfd.m_pHelperSrc,  _pcfd.m_lParam  );
  1095. clrWindow = clrSysBk;
  1096. }
  1097. if( ! bPopupMenuComboFieldMode )
  1098. {
  1099. dc.Draw3dRect( rcEraser, clrWindow, clrWindow );
  1100. if( _pcfd.m_bRightText )
  1101. rcEraser.left += nDD;
  1102. else
  1103. rcEraser.right -= nDD;
  1104. INT nLeftDX = _pcfd.m_bRightText ? 1 : 0;
  1105. INT nRightDX = _pcfd.m_bRightText ? 0 : 1;
  1106. rcEraser.DeflateRect( _pcfd.m_bRightText ? -1 : 0, 1, _pcfd.m_bRightText ? 0 : -1, 1 );
  1107.   dc.Draw3dRect( rcEraser, clrWindow, clrWindow );
  1108.  
  1109.   rcEraser.DeflateRect( 1, 0, 1, 0 );
  1110.   dc.Draw3dRect( rcEraser, clrWindow, clrWindow );
  1111. rcEraser.DeflateRect( nLeftDX, 0, nRightDX, 0 );
  1112. dc.Draw3dRect( rcEraser, clrWindow, clrWindow );
  1113. rcEraser.DeflateRect( nLeftDX, 0, nRightDX, 0 );
  1114. dc.Draw3dRect( rcEraser, clrWindow, clrWindow );
  1115. }
  1116. // normal=0, hover=1, pressed=2, disabled=3
  1117. int nIdx = 3;
  1118. if( _pcfd.m_bEnabled )
  1119. {
  1120. if( _pcfd.m_bPushed )
  1121. nIdx = 2;
  1122. else if( _pcfd.m_bHover )
  1123. nIdx = 1;
  1124. else
  1125. nIdx = 0;
  1126. } // if( _pcfd.m_bEnabled )
  1127. CRect rcSrc( 0, 0, m_sizeComboBoxDropDown.cx, m_sizeComboBoxDropDown.cy );
  1128. rcSrc.OffsetRect( 0, m_sizeComboBoxDropDown.cy * nIdx );
  1129. m_bmpArrComboBoxDropDown.AlphaBlendSkinParts(
  1130. dc.m_hDC,
  1131. rcDDButton,
  1132. rcSrc,
  1133. m_rcPaddingComboBoxDropDown,
  1134. CExtBitmap::__EDM_STRETCH,
  1135. true
  1136. );
  1137. COLORREF clrBorder = m_arrClrComboBoxBorder[nIdx];
  1138. dc.Draw3dRect( rcHoverFrame, clrBorder, clrBorder );
  1139. if( (! bPopupMenuComboFieldMode )
  1140. && rgnClip.GetSafeHandle() != NULL
  1141. )
  1142. dc.SelectClipRgn( NULL );
  1143. }
  1144. void CExtPaintManagerOffice2007_Impl::PaintControlFrame(
  1145. CDC & dc,
  1146. CExtPaintManager::PAINTCONTROLFRAMEDATA & _pcfd
  1147. )
  1148. {
  1149. ASSERT_VALID( this );
  1150. ASSERT( dc.GetSafeHdc() != NULL );
  1151. if( IsHighContrast() )
  1152. {
  1153. CExtPaintManagerXP::PaintControlFrame( dc, _pcfd );
  1154. return;
  1155. }
  1156. if( _pcfd.m_pHelperSrc != NULL
  1157. && _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtPopupMenuWnd) )
  1158. && ( ((CExtPopupMenuWnd*)_pcfd.m_pHelperSrc)->TrackFlagsGet() & TPMX_RIBBON_MODE ) == 0
  1159. )
  1160. {
  1161. CExtPaintManagerOffice2003::PaintControlFrame( dc, _pcfd );
  1162. return;
  1163. }
  1164. COLORREF clrForceInner = COLORREF( -1L );
  1165. COLORREF clrForceOuter = COLORREF( -1L );
  1166. if( _pcfd.m_pHelperSrc != NULL )
  1167. {
  1168. #ifndef __EXT_MFC_NO_DURATIONWND
  1169. if( _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtDurationWnd ) ) )
  1170. {
  1171. CExtDurationWnd * pWnd =
  1172. DYNAMIC_DOWNCAST( CExtDurationWnd, _pcfd.m_pHelperSrc );
  1173. if( pWnd != NULL )
  1174. {
  1175. ASSERT_VALID( pWnd );
  1176. clrForceInner = pWnd->GetBkColor();
  1177. }
  1178. }
  1179. #endif // __EXT_MFC_NO_DURATIONWND
  1180. if( _pcfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtEdit ) ) )
  1181. {
  1182. CExtEdit * pWnd = DYNAMIC_DOWNCAST( CExtEdit, _pcfd.m_pHelperSrc );
  1183. if( pWnd != NULL )
  1184. {
  1185. ASSERT_VALID( pWnd );
  1186. clrForceInner = pWnd->GetBkColor();
  1187. CWnd * pWndParent = pWnd->GetParent();
  1188. if( pWndParent != NULL )
  1189. {
  1190. ASSERT_VALID( pWndParent );
  1191. if( pWndParent->IsKindOf( RUNTIME_CLASS( CExtResizableDialog ) ) )
  1192. {
  1193. CExtResizableDialog * pDlg =
  1194. DYNAMIC_DOWNCAST( CExtResizableDialog, pWndParent );
  1195. if( pDlg != NULL )
  1196. clrForceOuter = pDlg->GetBkColor();
  1197. }
  1198. else if( pWndParent->IsKindOf( RUNTIME_CLASS( CDialog ) ) )
  1199. {
  1200. clrForceOuter = ::GetSysColor( COLOR_3DFACE );
  1201. }
  1202. }
  1203. }
  1204. }
  1205. } // if( _pcfd.m_pHelperSrc != NULL )
  1206. COLORREF clrInner =
  1207. ( clrForceInner != COLORREF( -1L ) ) 
  1208. ? clrForceInner 
  1209. : GetColor( 
  1210. ( ! _pcfd.m_bEnabled ) 
  1211. ? COLOR_3DFACE 
  1212. : COLOR_WINDOW, 
  1213. _pcfd.m_pHelperSrc, 
  1214. _pcfd.m_lParam 
  1215. );
  1216. COLORREF clrIn = GetColor( COLOR_WINDOW, _pcfd.m_pHelperSrc, _pcfd.m_lParam );
  1217. COLORREF clrOut = clrForceOuter;
  1218. if( _pcfd.m_bEnabled )
  1219. {
  1220. clrIn = m_arrClrComboBoxBorder[1];
  1221. if( _pcfd.m_bHover && _pcfd.m_bFocus )
  1222. clrOut = m_arrClrComboBoxBorder[1];
  1223. }
  1224. CRect rcItem( _pcfd.m_rcClient );
  1225. if( clrOut != COLORREF(-1L) )
  1226. dc.Draw3dRect( rcItem, clrOut, clrOut );
  1227. rcItem.DeflateRect(1,1);
  1228. dc.Draw3dRect( rcItem, clrIn, clrIn );
  1229. rcItem.DeflateRect(1,1);
  1230. dc.Draw3dRect( rcItem, clrInner, clrInner );
  1231. if( clrOut == COLORREF(-1L) )
  1232. {
  1233. CRect rcClip( _pcfd.m_rcClient );
  1234. rcClip.DeflateRect(1,1);
  1235. CWnd * pWnd = DYNAMIC_DOWNCAST( CWnd, _pcfd.m_pHelperSrc );
  1236. if( pWnd != NULL )
  1237. {
  1238. ASSERT_VALID( pWnd );
  1239. dc.ExcludeClipRect( &rcClip );
  1240. CExtPaintManagerOffice2003::PaintDockerBkgnd( true, dc, pWnd );
  1241. dc.SelectClipRgn( NULL );
  1242. }
  1243. }
  1244. }
  1245. void CExtPaintManagerOffice2007_Impl::PaintToolbarTextField(
  1246. CDC & dc,
  1247. CExtPaintManager::PAINTTOOLBARTEXTFIELDDATA & _ptbtfd
  1248. )
  1249. {
  1250. ASSERT_VALID( this );
  1251. ASSERT( dc.GetSafeHdc() != NULL );
  1252. if( IsHighContrast() )
  1253. {
  1254. CExtPaintManagerXP::PaintToolbarTextField( dc, _ptbtfd );
  1255. return;
  1256. }
  1257. COLORREF clrDkBorder = GetColor( XPCLR_HILIGHT_BORDER, _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam );
  1258. COLORREF clrForceBk = COLORREF(-1L);
  1259. CRect rcTextFieldOuter( _ptbtfd.m_rcTextField );
  1260. bool bRibbonMode = false;
  1261. CExtBarButton * pTBB = NULL;
  1262. if( _ptbtfd.m_pHelperSrc != NULL )
  1263. {
  1264. ASSERT_VALID( _ptbtfd.m_pHelperSrc );
  1265. pTBB = DYNAMIC_DOWNCAST( CExtBarButton, _ptbtfd.m_pHelperSrc );
  1266. if( pTBB != NULL )
  1267. {
  1268. ASSERT_VALID( pTBB );
  1269. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  1270. CExtToolControlBar * pBar = pTBB->GetBar();
  1271. if( pBar != NULL )
  1272. {
  1273. ASSERT_VALID( pBar );
  1274. if( pBar->IsKindOf( RUNTIME_CLASS(CExtRibbonPage) ) )
  1275. {
  1276. bRibbonMode = true;
  1277. rcTextFieldOuter.OffsetRect( 0, -1 );
  1278. rcTextFieldOuter.InflateRect( 3, 1, 2, 4 );
  1279. #ifndef __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1280. if( pTBB != NULL
  1281. && CExtBarTextFieldButton::g_pBtnEditing != pTBB 
  1282. )
  1283. {
  1284. if(  _ptbtfd.m_bEnabled  )
  1285. {
  1286. if( ! ( _ptbtfd.m_bPushed || _ptbtfd.m_bHover ) ) 
  1287. clrForceBk = m_clrRibbonComboBackGroundNormal;
  1288. }
  1289. else
  1290. clrForceBk = m_clrRibbonComboBackGroundDisabled;
  1291. }
  1292. #endif // __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1293. }
  1294. }
  1295. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  1296. }
  1297. }
  1298. if( (!bRibbonMode) && ( _ptbtfd.m_bHover || _ptbtfd.m_bPushed || (!_ptbtfd.m_bEnabled) ) )
  1299. rcTextFieldOuter.InflateRect( 1, 1 );
  1300. if( _ptbtfd.m_bComboField )
  1301. {
  1302. if( bRibbonMode )
  1303. {
  1304. int nIdx = -1; // 4; +288
  1305. int nIdxBorder = 3;
  1306. if( _ptbtfd.m_bEnabled )
  1307. {
  1308. if( _ptbtfd.m_bPushed )
  1309. {
  1310. nIdx = 3;
  1311. nIdxBorder = 2;
  1312. } // if( _ptbtfd.m_bPushed )
  1313. else if( _ptbtfd.m_bHover )
  1314. {
  1315. nIdx = 2;
  1316. nIdxBorder = 1;
  1317. #ifndef __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1318. if( pTBB != NULL
  1319. && CExtBarTextFieldButton::g_pBtnEditing != pTBB
  1320. && ( ! pTBB->GetBar()->m_bLastDropDownHT )
  1321. )
  1322. {
  1323. nIdx = 1;
  1324. nIdxBorder = 2;
  1325. }
  1326. #endif // __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1327. } // else if( _ptbtfd.m_bHover )
  1328. else
  1329. {
  1330. nIdx = 0;
  1331. nIdxBorder = 0;
  1332. if( pTBB != NULL )
  1333. {
  1334. bool bForceHoverMode = false;
  1335. CExtToolControlBar * pBar = pTBB->GetBar();
  1336. if( pBar != NULL )
  1337. {
  1338. ASSERT_VALID( pBar );
  1339. if( pBar->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) ) )
  1340. {
  1341. INT nFTI = ((CExtMenuControlBar*)pBar)->_FlatTrackingIndexGet();
  1342. if( nFTI >= 0
  1343. && nFTI == pBar->_GetIndexOf( pTBB )
  1344. )
  1345. bForceHoverMode = true;
  1346. } // if( pBar->IsKindOf( RUNTIME_CLASS(CExtMenuControlBar) ) )
  1347. } // if( pBar != NULL )
  1348. #ifndef __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1349. if( ( ! bForceHoverMode ) && CExtBarTextFieldButton::g_pBtnEditing == pTBB )
  1350. bForceHoverMode = true;
  1351. #endif // __EXT_MFC_NO_BUILTIN_TEXTFIELD
  1352. if( bForceHoverMode )
  1353. {
  1354. nIdx = 2;
  1355. nIdxBorder = 1;
  1356. } // if( bForceHoverMode )
  1357. } // if( pTBB != NULL )
  1358. } // else from else if( _ptbtfd.m_bHover )
  1359. } // if( _ptbtfd.m_bEnabled )
  1360. // paint combo or date field
  1361. INT nDD = GetDropDownButtonWidth( _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam );
  1362. rcTextFieldOuter.right += nDD;
  1363. dc.FillSolidRect(
  1364. &rcTextFieldOuter,
  1365. ( clrForceBk != COLORREF(-1L) ) ? clrForceBk : ( ::GetSysColor( _ptbtfd.m_bEnabled ? COLOR_WINDOW : COLOR_3DFACE ) )
  1366. );
  1367. COLORREF clrBorder = m_arrClrComboBoxBorder[ nIdxBorder ];
  1368. dc.Draw3dRect( rcTextFieldOuter, clrBorder, clrBorder );
  1369. CRect rcBtn( rcTextFieldOuter );
  1370. rcBtn.left = rcBtn.right - nDD;
  1371. if( nIdx >= 0 )
  1372. {
  1373. CRect rcSrc( 0, 0, m_sizeRibbonComboBoxDropDown.cx, m_sizeRibbonComboBoxDropDown.cy );
  1374. rcSrc.OffsetRect( 0, m_sizeRibbonComboBoxDropDown.cy * nIdx );
  1375. m_bmpArrRibbonComboBoxDropDown.AlphaBlendSkinParts(
  1376. dc.m_hDC,
  1377. rcBtn,
  1378. rcSrc,
  1379. m_rcRibbonPaddingComboBoxDropDown,
  1380. CExtBitmap::__EDM_STRETCH,
  1381. true
  1382. );
  1383. } // if( nIdx >= 0 )
  1384. // paint arrow down
  1385. CSize szBmpDDA = m_bmpRibbonDDA.GetSize();
  1386. CRect rcSrcDDA( 0, 0, szBmpDDA.cx, szBmpDDA.cy );
  1387. CRect rcDstDDA( rcBtn.left, rcBtn.top, rcBtn.left + szBmpDDA.cx, rcBtn.top + szBmpDDA.cy );
  1388. rcDstDDA.OffsetRect( ( rcBtn.Width() - szBmpDDA.cx ) / 2, ( rcBtn.Height() - szBmpDDA.cy ) / 2 );
  1389. m_bmpRibbonDDA.AlphaBlendSkinParts(
  1390. dc.m_hDC,
  1391. rcDstDDA,
  1392. rcSrcDDA,
  1393. CRect( 0, 0, 0, 0 ),
  1394. CExtBitmap::__EDM_STRETCH,
  1395. true,
  1396. true,
  1397. _ptbtfd.m_bEnabled ? BYTE(255) : BYTE(128)
  1398. );
  1399. rcTextFieldOuter.right -= nDD;
  1400. }
  1401. else
  1402. {
  1403. // paint combo or date field
  1404. INT nDD = CExtPaintManagerOffice2003::GetDropDownButtonWidth( _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam );
  1405. rcTextFieldOuter.right += nDD;
  1406. CRect rcBtn( rcTextFieldOuter );
  1407. rcBtn.left = rcBtn.right - nDD;
  1408. if( (!(_ptbtfd.m_bHover || _ptbtfd.m_bPushed))
  1409. && _ptbtfd.m_bEnabled 
  1410. {
  1411. rcBtn.DeflateRect( 3, 1, 1, 1 );
  1412. dc.ExcludeClipRect( &rcBtn );
  1413. }
  1414. dc.FillSolidRect( &rcTextFieldOuter, ::GetSysColor( _ptbtfd.m_bEnabled ? COLOR_WINDOW : COLOR_3DFACE ) );
  1415. dc.SelectClipRgn( NULL );
  1416. if( _ptbtfd.m_bHover && _ptbtfd.m_bEnabled )
  1417. {
  1418. PAINTPUSHBUTTONDATA _ppbd(
  1419. _ptbtfd.m_pHelperSrc,
  1420. true,
  1421. rcBtn,
  1422. _T(""),
  1423. NULL,
  1424. true,
  1425. _ptbtfd.m_bHover,
  1426. _ptbtfd.m_bPushed,
  1427. false,
  1428. _ptbtfd.m_bEnabled,
  1429. true,
  1430. false,
  1431. false,
  1432. 0
  1433. );
  1434. CExtPaintManagerOffice2003::PaintPushButton( dc, _ppbd );
  1435. dc.Draw3dRect( &rcTextFieldOuter, clrDkBorder, clrDkBorder );
  1436. }
  1437. else
  1438. {
  1439. if( ! _ptbtfd.m_bEnabled )
  1440. {
  1441. COLORREF clrBorder = GetColor( XPCLR_TEXT_FIELD_BORDER_DISABLED, _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam );
  1442. dc.Draw3dRect( &rcTextFieldOuter, clrBorder, clrBorder );
  1443. }
  1444. }
  1445. // paint arrow down
  1446. rcBtn.top++;
  1447. if( !_ptbtfd.m_bEnabled )
  1448. rcBtn.left++;
  1449. glyph_t* pGlyph = g_DockingCaptionGlyphs[ __DCBT_ARROW_SMALL_DOWN ];
  1450. ASSERT( pGlyph != NULL );
  1451. COLORREF ColorValues[2] =
  1452. {
  1453. RGB(0,0,0),
  1454. _ptbtfd.m_bEnabled 
  1455. ? GetColor( _ptbtfd.m_bPushed ? COLOR_3DDKSHADOW : COLOR_WINDOWTEXT, _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam )
  1456. : ::GetSysColor( COLOR_GRAYTEXT )
  1457. };
  1458. PaintGlyphCentered( dc, rcBtn, *pGlyph, ColorValues );
  1459. rcTextFieldOuter.right -= nDD;
  1460. }
  1461. } // if( _ptbtfd.m_bComboField )
  1462. else
  1463. {
  1464. // paint text field
  1465. dc.FillSolidRect(
  1466. &rcTextFieldOuter,
  1467. ( clrForceBk != COLORREF(-1L) )
  1468. ? clrForceBk
  1469. : ( ::GetSysColor( _ptbtfd.m_bEnabled ? COLOR_WINDOW : COLOR_3DFACE ) )
  1470. );
  1471. if( _ptbtfd.m_bEnabled )
  1472. {
  1473. if( _ptbtfd.m_bHover || _ptbtfd.m_bPushed )
  1474. dc.Draw3dRect( &rcTextFieldOuter, clrDkBorder, clrDkBorder );
  1475. }
  1476. else
  1477. {
  1478. COLORREF clrBorder = GetColor( XPCLR_TEXT_FIELD_BORDER_DISABLED, _ptbtfd.m_pHelperSrc, _ptbtfd.m_lParam );
  1479. dc.Draw3dRect( &rcTextFieldOuter, clrBorder, clrBorder );
  1480. }
  1481. } // else from if( _ptbtfd.m_bComboField )
  1482. if( ! _ptbtfd.m_sText.IsEmpty() )
  1483. {
  1484. COLORREF clrTextOld = dc.SetTextColor( ::GetSysColor( _ptbtfd.m_bEnabled ? COLOR_WINDOWTEXT : COLOR_GRAYTEXT ) );
  1485. CFont * pFontOld = dc.SelectObject( &m_FontNormal );
  1486. int nBkModeOld = dc.SetBkMode( TRANSPARENT );
  1487. CRect rcText( _ptbtfd.m_rcTextField );
  1488. rcText.left += 5;
  1489. rcText.top += 2;
  1490. bool bRTL = ( (g_ResourceManager->OnQueryLangLayout()&LAYOUT_RTL) != 0 ) ? true : false;
  1491. DWORD dwDtAlignFlags = bRTL ? (DT_RTLREADING|DT_RIGHT) : 0;
  1492. dc.DrawText( _ptbtfd.m_sText, _ptbtfd.m_sText.GetLength(), &rcText, _ptbtfd.m_nDrawTextFlags|dwDtAlignFlags );
  1493. dc.SetBkMode( nBkModeOld );
  1494. dc.SelectObject( pFontOld );
  1495. dc.SetTextColor( clrTextOld );
  1496. } // if( ! _ptbtfd.m_sText.IsEmpty() )
  1497. }
  1498. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  1499. bool CExtPaintManagerOffice2007_Impl::QueryTabWndHoverChangingRedraw(
  1500. const CExtTabWnd * pWndTab,
  1501. LPARAM lParam // = 0L
  1502. )
  1503. {
  1504. ASSERT_VALID( this );
  1505. ASSERT_VALID( pWndTab );
  1506. if( IsHighContrast() )
  1507. return 
  1508. CExtPaintManagerXP::QueryTabWndHoverChangingRedraw( 
  1509. pWndTab, 
  1510. lParam 
  1511. );
  1512. return true;
  1513. }
  1514. void CExtPaintManagerOffice2007_Impl::PaintTabbedTabClientArea(
  1515. CDC & dc,
  1516. CRect & rcClient,
  1517. CRect & rcTabItemsArea,
  1518. CRect & rcTabNearBorderArea,
  1519. DWORD dwOrientation,
  1520. bool bGroupedMode,
  1521. CObject * pHelperSrc,
  1522. LPARAM lParam // = 0L
  1523. )
  1524. {
  1525. ASSERT_VALID( this);
  1526. ASSERT( dc.GetSafeHdc() != NULL );
  1527. if( IsHighContrast() )
  1528. {
  1529. CExtPaintManagerXP::PaintTabbedTabClientArea(
  1530. dc,
  1531. rcClient,
  1532. rcTabItemsArea,
  1533. rcTabNearBorderArea,
  1534. dwOrientation,
  1535. bGroupedMode,
  1536. pHelperSrc,
  1537. lParam
  1538. );
  1539. return;
  1540. }
  1541. if( pHelperSrc == NULL
  1542. || (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  1543. )
  1544. CExtPaintManager::PaintTabbedTabClientArea(
  1545. dc,
  1546. rcClient,
  1547. rcTabItemsArea,
  1548. rcTabNearBorderArea,
  1549. dwOrientation,
  1550. bGroupedMode,
  1551. pHelperSrc,
  1552. lParam
  1553. );
  1554. CExtPaintManagerOffice2003::PaintDockerBkgnd(
  1555. true,
  1556. dc,
  1557. (CWnd*)pHelperSrc
  1558. );
  1559. }
  1560. void CExtPaintManagerOffice2007_Impl::PaintTabClientArea(
  1561. CDC & dc,
  1562. CRect & rcClient,
  1563. CRect & rcTabItemsArea,
  1564. CRect & rcTabNearBorderArea,
  1565. DWORD dwOrientation,
  1566. bool bGroupedMode,
  1567. CObject * pHelperSrc,
  1568. LPARAM lParam // = 0L
  1569. )
  1570. {
  1571. ASSERT_VALID( this);
  1572. ASSERT( dc.GetSafeHdc() != NULL );
  1573. if( IsHighContrast() )
  1574. {
  1575. CExtPaintManagerXP::PaintTabClientArea(
  1576. dc,
  1577. rcClient,
  1578. rcTabItemsArea,
  1579. rcTabNearBorderArea,
  1580. dwOrientation,
  1581. bGroupedMode,
  1582. pHelperSrc,
  1583. lParam
  1584. );
  1585. return;
  1586. }
  1587. if( pHelperSrc == NULL
  1588. || (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  1589. )
  1590. CExtPaintManager::PaintTabbedTabClientArea(
  1591. dc,
  1592. rcClient,
  1593. rcTabItemsArea,
  1594. rcTabNearBorderArea,
  1595. dwOrientation,
  1596. bGroupedMode,
  1597. pHelperSrc,
  1598. lParam
  1599. );
  1600. CExtPaintManagerOffice2003::PaintDockerBkgnd(
  1601. true,
  1602. dc,
  1603. (CWnd*)pHelperSrc
  1604. );
  1605. //DWORD dwOrientation = ((CExtTabWnd*)pHelperSrc)->OrientationGet();
  1606. e_TabShapeOrientationIndex_t eTSOI = __ETSOI_TOP;
  1607. CRect rcPaint( 0, 0, 0, 0 );
  1608.   if( bGroupedMode )
  1609.   return;
  1610. //  if( bGroupedMode )
  1611. //  {
  1612. //  switch( dwOrientation )
  1613. //  {
  1614. //  case __ETWS_ORIENT_TOP:
  1615. //  dwOrientation = __ETWS_ORIENT_BOTTOM;
  1616. //  break;
  1617. //  case __ETWS_ORIENT_BOTTOM:
  1618. //  dwOrientation = __ETWS_ORIENT_TOP;
  1619. //  break;
  1620. //  case __ETWS_ORIENT_LEFT:
  1621. //  dwOrientation = __ETWS_ORIENT_RIGHT;
  1622. //  break;
  1623. //  case __ETWS_ORIENT_RIGHT:
  1624. //  dwOrientation = __ETWS_ORIENT_LEFT;
  1625. //  break;
  1626. //  }
  1627. //  }
  1628.   switch( dwOrientation )
  1629. {
  1630. case __ETWS_ORIENT_TOP:
  1631. eTSOI = __ETSOI_TOP;
  1632. rcPaint.SetRect(
  1633. rcClient.left,
  1634. rcTabItemsArea.bottom - m_arrTabAreaMargins[eTSOI],
  1635. rcClient.right,
  1636. rcClient.bottom
  1637. );
  1638. break;
  1639. case __ETWS_ORIENT_BOTTOM:
  1640. eTSOI = __ETSOI_BOTTOM;
  1641. rcPaint.SetRect(
  1642. rcClient.left,
  1643. rcClient.top,
  1644. rcClient.right,
  1645. rcTabItemsArea.top + m_arrTabAreaMargins[eTSOI]
  1646. );
  1647. break;
  1648. case __ETWS_ORIENT_LEFT:
  1649. eTSOI = __ETSOI_LEFT;
  1650. rcPaint.SetRect(
  1651. rcTabItemsArea.right - m_arrTabAreaMargins[eTSOI],
  1652. rcClient.top,
  1653. rcClient.right,
  1654. rcClient.bottom
  1655. );
  1656. break;
  1657. case __ETWS_ORIENT_RIGHT:
  1658. eTSOI = __ETSOI_RIGHT;
  1659. rcPaint.SetRect(
  1660. rcClient.left,
  1661. rcClient.top,
  1662. rcTabItemsArea.left + m_arrTabAreaMargins[eTSOI],
  1663. rcClient.bottom
  1664. );
  1665. break;
  1666. }
  1667. const CExtBitmap & bmp = m_arrBmpTabArea[ eTSOI ];
  1668. if( bmp.IsEmpty() )
  1669. return;
  1670. CSize _sizeBmp = bmp.GetSize();
  1671. switch( eTSOI )
  1672. {
  1673. case __ETSOI_TOP:
  1674. rcPaint.bottom = rcPaint.top + _sizeBmp.cy;
  1675. break;
  1676. case __ETSOI_BOTTOM:
  1677. rcPaint.top = rcPaint.bottom - _sizeBmp.cy;
  1678. break;
  1679. case __ETSOI_LEFT:
  1680. rcPaint.right = rcPaint.left + _sizeBmp.cx;
  1681. break;
  1682. case __ETSOI_RIGHT:
  1683. rcPaint.left = rcPaint.right - _sizeBmp.cx;
  1684. break;
  1685. }
  1686. bmp.AlphaBlendSkinParts(
  1687. dc.m_hDC,
  1688. rcPaint,
  1689. m_arrRectTabAreaPadding[eTSOI],
  1690. CExtBitmap::__EDM_STRETCH,
  1691. true,
  1692. true
  1693. );
  1694. }
  1695. void CExtPaintManagerOffice2007_Impl::PaintTabItem(
  1696. CDC & dc,
  1697. CRect & rcTabItemsArea,
  1698. bool bTopLeft,
  1699. bool bHorz,
  1700. bool bSelected,
  1701. bool bCenteredText,
  1702. bool bGroupedMode,
  1703. bool bInGroupActive,
  1704. bool bInvertedVerticalMode,
  1705. const CRect & rcEntireItem,
  1706. CSize sizeTextMeasured,
  1707. CFont * pFont,
  1708. __EXT_MFC_SAFE_LPCTSTR sText,
  1709. CExtCmdIcon * pIcon,
  1710. CObject * pHelperSrc,
  1711. LPARAM lParam, // = 0L
  1712. COLORREF clrForceText, // = COLORREF(-1L)
  1713. COLORREF clrForceTabBk, // = COLORREF(-1L)
  1714. COLORREF clrForceTabBorderLT, // = COLORREF(-1L)
  1715. COLORREF clrForceTabBorderRB, // = COLORREF(-1L)
  1716. COLORREF clrForceTabSeparator, // = COLORREF(-1L)
  1717. bool bDwmMode // = false
  1718. )
  1719. {
  1720. ASSERT_VALID( this );
  1721. ASSERT( dc.GetSafeHdc() != NULL );
  1722. if( IsHighContrast() )
  1723. {
  1724. CExtPaintManagerXP::PaintTabItem(
  1725. dc,
  1726. rcTabItemsArea,
  1727. bTopLeft,
  1728. bHorz,
  1729. bSelected,
  1730. bCenteredText,
  1731. bGroupedMode,
  1732. bInGroupActive,
  1733. bInvertedVerticalMode,
  1734. rcEntireItem,
  1735. sizeTextMeasured,
  1736. pFont,
  1737. sText,
  1738. pIcon,
  1739. pHelperSrc,
  1740. lParam,
  1741. clrForceText,
  1742. clrForceTabBk,
  1743. clrForceTabBorderLT,
  1744. clrForceTabBorderRB,
  1745. clrForceTabSeparator,
  1746. bDwmMode
  1747. );
  1748. return;
  1749. }
  1750. // if( pHelperSrc == NULL
  1751. // || ( (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  1752. // && (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtBarButton ) ) )
  1753. // )
  1754. // || IsHighContrast()
  1755. // )
  1756. // {
  1757. // CExtPaintManager::PaintTabItem(
  1758. // dc,
  1759. // rcTabItemsArea,
  1760. // bTopLeft,
  1761. // bHorz,
  1762. // bSelected,
  1763. // bCenteredText,
  1764. // bGroupedMode,
  1765. // bInGroupActive,
  1766. // bInvertedVerticalMode,
  1767. // rcEntireItem,
  1768. // sizeTextMeasured,
  1769. // pFont,
  1770. // sText,
  1771. // pIcon,
  1772. // pHelperSrc,
  1773. // lParam,
  1774. // clrForceText,
  1775. // clrForceTabBk,
  1776. // clrForceTabBorderLT,
  1777. // clrForceTabBorderRB,
  1778. // clrForceTabSeparator,
  1779. // bDwmMode
  1780. // );
  1781. // return;
  1782. // }
  1783. CExtCmdIcon * pIconTabItemCloseButton = NULL;
  1784. CExtCmdIcon::e_paint_type_t ePaintStateITICB =
  1785. (CExtCmdIcon::e_paint_type_t) CExtCmdIcon::__PAINT_INVISIBLE;
  1786. CRect rcTabItemCloseButton( 0, 0, 0, 0 );
  1787. CExtBarButton * pTBB = NULL;
  1788. CExtTabWnd * pTabs = NULL;
  1789. CExtTabWnd::TAB_ITEM_INFO * pTII = NULL;
  1790. bool bNoPrefix = false;
  1791. if( pHelperSrc != NULL )
  1792. {
  1793. pTabs = DYNAMIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  1794. if( pTabs != NULL )
  1795. {
  1796. ASSERT_VALID( pTabs );
  1797. pTII = pTabs->ItemGet( LONG( lParam ) );
  1798. ASSERT( pTII != NULL );
  1799. ASSERT_VALID( pTII );
  1800. pIconTabItemCloseButton =
  1801. pTabs->OnTabWndQueryItemCloseButtonShape( pTII );
  1802. if( pIconTabItemCloseButton != NULL )
  1803. {
  1804. rcTabItemCloseButton = pTII->CloseButtonRectGet();
  1805. ePaintStateITICB = (CExtCmdIcon::e_paint_type_t)
  1806. pTabs->OnTabWndQueryItemCloseButtonPaintState( pTII );
  1807. } // if( pIconTabItemCloseButton != NULL )
  1808. bNoPrefix = ( ( pTabs->GetTabWndStyleEx() & __ETWS_EX_NO_PREFIX ) != 0 ) ? true : false;
  1809. } // if( pTabs != NULL )
  1810. else
  1811. {
  1812. pTBB = DYNAMIC_DOWNCAST( CExtBarButton, pHelperSrc );
  1813. #ifdef _DEBUG
  1814. if( pTBB != NULL )
  1815. {
  1816. ASSERT_VALID( pTBB );
  1817. } // if( pTBB != NULL )
  1818. #endif // _DEBUG
  1819. } // else from if( pTabs != NULL )
  1820. } // if( pHelperSrc != NULL )
  1821. LPCTSTR _sText = LPCTSTR(sText);
  1822. bool bDrawIcon = (
  1823. pIcon != NULL 
  1824. && (! pIcon->IsEmpty() ) 
  1825. && ( pTabs == NULL || (pTabs->GetTabWndStyle()&__ETWS_HIDE_ICONS) == 0  ) 
  1826. );
  1827. if( bGroupedMode )
  1828. bSelected = false;
  1829. bool bEnabled = true;
  1830. if( pTII != NULL )
  1831. bEnabled = pTII->EnabledGet();
  1832. else if( pTBB != NULL )
  1833. bEnabled = pTBB->IsEnabled();
  1834. bool bHover = false, bPressed = false;
  1835. INT nIdxTabShape = m_nIdxTabShapeDisabled; // for disabled state
  1836. if( pTabs != NULL && pTabs->ItemGet( LONG(lParam) )->EnabledGet() )
  1837. {
  1838. bHover = ( pTabs->GetHoverTrackingItem() == lParam ) ? true : false;
  1839. bPressed = ( pTabs->GetPushedTrackingItem() == lParam ) ? true : false;
  1840. } // if( pTabs != NULL && pTabs->ItemGet( LONG(lParam) )->EnabledGet() )
  1841. else if( pTBB != NULL )
  1842. {
  1843. bHover = pTBB->IsHover();
  1844. bPressed = pTBB->IsPressed();
  1845. } // else if( pTBB != NULL )
  1846. bool bDetectedDynTPC = false;
  1847. bDetectedDynTPC;
  1848. #if (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  1849. if( pTII != NULL )
  1850. {
  1851. CObject * pObject = pTII->EventProviderGet();
  1852. if( pObject != NULL )
  1853. {
  1854. CExtDynamicControlBar * pBar = DYNAMIC_DOWNCAST( CExtDynamicControlBar, pObject );
  1855. if( pBar != NULL )
  1856. {
  1857. bool bFlashCaptionHighlightedState = false;
  1858. if( pBar->FlashCaptionIsInProgress( &bFlashCaptionHighlightedState ) )
  1859. {
  1860. if( bFlashCaptionHighlightedState )
  1861. {
  1862. clrForceText = pBar->m_clrFlashCaptionText;
  1863. clrForceTabBk = pBar->m_clrFlashCaptionBackground;
  1864. bSelected = true;
  1865. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1866. bDetectedDynTPC = true;
  1867. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1868. }
  1869. }
  1870. }
  1871. }
  1872. }
  1873. #endif// (!defined __EXT_MFC_NO_DYNAMIC_BAR_SITE)
  1874. COLORREF clrText = COLORREF(-1L);
  1875. if( bDwmMode )
  1876. clrText = bSelected ? m_clrTabTextSelectedDWM : m_clrTabTextNormalDWM;
  1877. if( clrText == COLORREF(-1L) )
  1878. clrText = QueryObjectTextColor( dc, bEnabled, false, bHover, bPressed, pHelperSrc, lParam );
  1879. if( clrText == COLORREF(-1L) )
  1880. clrText = bEnabled ? m_clrTabTextNormal : GetColor( CLR_TEXT_DISABLED, pHelperSrc, lParam );
  1881. nIdxTabShape = m_nIdxTabShapeNormal;
  1882. if( bSelected )
  1883. {
  1884. if( bEnabled && ( (! bDwmMode ) || clrText == COLORREF(-1L) ) )
  1885. clrText = m_clrTabTextSelected;
  1886. nIdxTabShape = m_nIdxTabShapeSelected;
  1887. if( bHover && (!bPressed) )
  1888. nIdxTabShape = m_nIdxTabShapeSelectedHover;
  1889. }
  1890. else
  1891. {
  1892. if( bPressed )
  1893. nIdxTabShape = m_nIdxTabShapePressed;
  1894. else if( bHover )
  1895. nIdxTabShape = m_nIdxTabShapeHover;
  1896. }
  1897. e_TabShapeOrientationIndex_t eTSOI = __ETSOI_TOP;
  1898. if( bTopLeft )
  1899. {
  1900. if( bHorz )
  1901. eTSOI = __ETSOI_TOP;
  1902. else
  1903. eTSOI = __ETSOI_LEFT;
  1904. }
  1905. else
  1906. {
  1907. if( bHorz )
  1908. eTSOI = __ETSOI_BOTTOM;
  1909. else
  1910. eTSOI = __ETSOI_RIGHT;
  1911. }
  1912. if( bGroupedMode )
  1913. {
  1914. switch( eTSOI )
  1915. {
  1916. case __ETSOI_TOP:
  1917. eTSOI = __ETSOI_BOTTOM;
  1918. break;
  1919. case __ETSOI_BOTTOM:
  1920. eTSOI = __ETSOI_TOP;
  1921. break;
  1922. case __ETSOI_LEFT:
  1923. eTSOI = __ETSOI_RIGHT;
  1924. break;
  1925. case __ETSOI_RIGHT:
  1926. eTSOI = __ETSOI_LEFT;
  1927. break;
  1928. }
  1929. }
  1930. COLORREF clrColorizeTabShape = COLORREF(-1L);
  1931. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1932. if( pHelperSrc != NULL
  1933. && clrForceTabBk != COLORREF(-1L)
  1934. && ( bDetectedDynTPC
  1935. || pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtDynTabWnd ) )
  1936. || pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtDynAutoHideArea ) )
  1937. )
  1938. )
  1939. {
  1940. if( clrForceText != COLORREF(-1L) )
  1941. clrText = clrForceText;
  1942. clrColorizeTabShape = clrForceTabBk;
  1943. }
  1944. #endif // (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  1945. #if (!defined __EXT_MFC_NO_TABMDI_CTRL)
  1946. if( pHelperSrc != NULL
  1947. && clrForceTabBk != COLORREF(-1L)
  1948. && pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) )
  1949. && ((CExtTabWnd*)pHelperSrc)->_IsMdiTabCtrl()
  1950. )
  1951. {
  1952. if( clrForceText != COLORREF(-1L) )
  1953. clrText = clrForceText;
  1954. clrColorizeTabShape = clrForceTabBk;
  1955. }
  1956. #endif // (!defined __EXT_MFC_NO_TABMDI_CTRL)
  1957. if( nIdxTabShape >= 0 )
  1958. {
  1959. bool bSelTrackingMode = false;
  1960. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  1961. if( pTBB != NULL
  1962. && pTBB->IsKindOf( RUNTIME_CLASS( CExtRibbonButtonTabPage ) )
  1963. && ((CExtRibbonButtonTabPage*)pTBB)->IsSelectedRibbonPage()
  1964. )
  1965. {
  1966. CExtToolControlBar * pToolBar = pTBB->GetBar();
  1967. if( pToolBar != NULL )
  1968. {
  1969. CExtMenuControlBar * pMenuBar = DYNAMIC_DOWNCAST( CExtMenuControlBar, pToolBar );
  1970. if( pMenuBar != NULL
  1971. && pMenuBar->IsMenuBarTracking()
  1972. )
  1973. {
  1974. int nFlatTrackingIndex = pMenuBar->_FlatTrackingIndexGet();
  1975. if( nFlatTrackingIndex >= 0 )
  1976. {
  1977. int nIndexOfTBB = pMenuBar->_GetIndexOf( pTBB );
  1978. if( nFlatTrackingIndex == nIndexOfTBB )
  1979. {
  1980. if(! m_arrBmpTabShapeSelArea[0].IsEmpty() )
  1981. bSelTrackingMode = true;
  1982. else
  1983. nIdxTabShape = m_nIdxTabShapeHover;
  1984. }
  1985. }
  1986. }
  1987. }
  1988. }
  1989. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  1990. const CExtBitmap & _bmpTabShape =
  1991. bSelTrackingMode
  1992. ? m_arrBmpTabShapeSelArea[ int(eTSOI) ]
  1993. : m_arrBmpTabShapeNormal[ int(eTSOI) ]
  1994. ;
  1995. if( ! _bmpTabShape.IsEmpty() )
  1996. {
  1997. DWORD dwDcLayout = dc.GetLayout();
  1998. if( bDwmMode )
  1999. dc.SetLayout( LAYOUT_LTR );
  2000. CRect rcPadding = m_arrRectTabShapePadding[ int(eTSOI) ];
  2001. CRect rcSrc( 0, 0, m_arrSizeTabShape[int(eTSOI)].cx, m_arrSizeTabShape[int(eTSOI)].cy );
  2002. rcSrc.OffsetRect(
  2003. 0,
  2004. m_arrSizeTabShape[int(eTSOI)].cy * nIdxTabShape
  2005. );
  2006. CRect rcPaintTabShape = rcEntireItem;
  2007. switch( eTSOI )
  2008. {
  2009. case __ETSOI_TOP:
  2010. case __ETSOI_BOTTOM:
  2011. rcPaintTabShape.right --;
  2012. break;
  2013. case __ETSOI_LEFT:
  2014. case __ETSOI_RIGHT:
  2015. rcPaintTabShape.bottom --;
  2016. break;
  2017. }
  2018. if( clrColorizeTabShape != COLORREF(-1L) )
  2019. {
  2020. CExtBitmap _bmpTabShape2 = _bmpTabShape;
  2021. _bmpTabShape2.Make32();
  2022. _bmpTabShape2.AdjustHLS( COLORREF(-1L), COLORREF(-1L), 0.0, -0.5, -1.0 );
  2023. _bmpTabShape2.MakeMono( clrColorizeTabShape );
  2024. _bmpTabShape2.AlphaBlendSkinParts(
  2025. dc.m_hDC,
  2026. rcPaintTabShape,
  2027. rcSrc,
  2028. rcPadding,
  2029. CExtBitmap::__EDM_STRETCH,
  2030. true,
  2031. true
  2032. );
  2033. }
  2034. else
  2035. _bmpTabShape.AlphaBlendSkinParts(
  2036. dc.m_hDC,
  2037. rcPaintTabShape,
  2038. rcSrc,
  2039. rcPadding,
  2040. CExtBitmap::__EDM_STRETCH,
  2041. true,
  2042. true
  2043. );
  2044. dc.SetLayout( dwDcLayout );
  2045. }
  2046. }
  2047. CRect rcEntireItemX = rcEntireItem;
  2048. rcEntireItemX.DeflateRect( 3, 3 );
  2049. CExtPaintManager::stat_PaintTabItemImpl(
  2050. dc,
  2051. rcTabItemsArea,
  2052. bTopLeft,
  2053. bHorz,
  2054. bSelected,
  2055. bEnabled,
  2056. bCenteredText,
  2057. bGroupedMode,
  2058. bInGroupActive,
  2059. bInvertedVerticalMode,
  2060. bDrawIcon,
  2061. rcEntireItemX,
  2062. sizeTextMeasured,
  2063. pFont,
  2064. _sText,
  2065. bNoPrefix,
  2066. pIcon,
  2067. // bTopLeft
  2068. // ? ( bSelected ? RGB(255,255,255) : RGB(0,0,0) )
  2069. // : ( bSelected ? RGB(0,0,0) : RGB(255,255,255) )
  2070. pIconTabItemCloseButton,
  2071. INT(ePaintStateITICB),
  2072. rcTabItemCloseButton,
  2073. clrText,
  2074. COLORREF(-1L), // clrTabBk,
  2075. COLORREF(-1L), // clrTabBorderLT,
  2076. COLORREF(-1L), // clrTabBorderRB,
  2077. COLORREF(-1L),  // clrTabSeparator
  2078. ( pTBB != NULL ) ? false : true,
  2079. pHelperSrc,
  2080. bDwmMode
  2081. );
  2082. const CExtBitmap & _bmpTabSeparator = m_arrBmpTabSeparator[ int(eTSOI) ];
  2083. if( ! _bmpTabSeparator.IsEmpty() )
  2084. {
  2085. CRect rcPaintSeparator = rcEntireItem;
  2086. CRect rcPadding = m_arrRectTabSeparatorPadding[ int(eTSOI) ];
  2087. CRect rcSrc( 0, 0, m_arrSizeTabSeparator[int(eTSOI)].cx, m_arrSizeTabSeparator[int(eTSOI)].cy );
  2088. e_paint_manager_name_t ePMN = OnQueryPaintManagerName();
  2089. switch( eTSOI )
  2090. {
  2091. case __ETSOI_TOP:
  2092. rcPaintSeparator.left = rcPaintSeparator.right - m_arrSizeTabSeparator[int(eTSOI)].cx;
  2093. rcPaintSeparator.bottom --;
  2094. if( ePMN == Office2007_R2_Obsidian )
  2095. rcPaintSeparator.bottom -= 2;
  2096. break;
  2097. case __ETSOI_BOTTOM:
  2098. rcPaintSeparator.left = rcPaintSeparator.right - m_arrSizeTabSeparator[int(eTSOI)].cx;
  2099. rcPaintSeparator.top ++;
  2100. break;
  2101. case __ETSOI_LEFT:
  2102. rcPaintSeparator.top = rcPaintSeparator.bottom - m_arrSizeTabSeparator[int(eTSOI)].cy;
  2103. rcPaintSeparator.right --;
  2104. break;
  2105. case __ETSOI_RIGHT:
  2106. rcPaintSeparator.top = rcPaintSeparator.bottom - m_arrSizeTabSeparator[int(eTSOI)].cy;
  2107. // rcPaintSeparator.top ++;
  2108. rcPaintSeparator.left ++;
  2109. break;
  2110. }
  2111. BYTE nSCA = BYTE(0x0FF);
  2112. #if (!defined __EXT_MFC_NO_RIBBON_BAR)
  2113. if( pTBB != NULL )
  2114. {
  2115. CExtRibbonButtonTabPage * pRibbonButtonTabPage =
  2116. DYNAMIC_DOWNCAST( CExtRibbonButtonTabPage, pTBB );
  2117. if( pRibbonButtonTabPage != NULL )
  2118. nSCA = pRibbonButtonTabPage->Get2007SeparatorAlpha();
  2119. } // if( pTBB != NULL )
  2120. #endif // (!defined __EXT_MFC_NO_RIBBON_BAR)
  2121. DWORD dwDcLayout = dc.GetLayout();
  2122. if( bDwmMode )
  2123. dc.SetLayout( LAYOUT_LTR );
  2124. _bmpTabSeparator.AlphaBlendSkinParts(
  2125. dc.m_hDC,
  2126. rcPaintSeparator,
  2127. rcSrc,
  2128. rcPadding,
  2129. CExtBitmap::__EDM_STRETCH,
  2130. true,
  2131. true,
  2132. nSCA
  2133. );
  2134. dc.SetLayout( dwDcLayout );
  2135. } // if( ! _bmpTabSeparator.IsEmpty() )
  2136. }
  2137. void CExtPaintManagerOffice2007_Impl::PaintTabButton(
  2138. CDC & dc,
  2139. CRect & rcButton,
  2140. LONG nHitTest,
  2141. bool bTopLeft,
  2142. bool bHorz,
  2143. bool bEnabled,
  2144. bool bHover,
  2145. bool bPushed,
  2146. bool bGroupedMode,
  2147. CObject * pHelperSrc,
  2148. LPARAM lParam, // = 0L
  2149. bool bFlat // = false
  2150. )
  2151. {
  2152. ASSERT_VALID( this );
  2153. ASSERT( dc.GetSafeHdc() != NULL );
  2154. if( IsHighContrast() )
  2155. {
  2156. CExtPaintManagerXP::PaintTabButton(
  2157. dc,
  2158. rcButton,
  2159. nHitTest,
  2160. bTopLeft,
  2161. bHorz,
  2162. bEnabled,
  2163. bHover,
  2164. bPushed,
  2165. bGroupedMode,
  2166. pHelperSrc,
  2167. lParam,
  2168. bFlat
  2169. );
  2170. return;
  2171. }
  2172. //  bTopLeft;
  2173. //  bHorz;
  2174. //  lParam;
  2175. //  if( pHelperSrc == NULL
  2176. //  || (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  2177. //  )
  2178. //  {
  2179. CExtPaintManager::PaintTabButton(
  2180. dc,
  2181. rcButton,
  2182. nHitTest,
  2183. bTopLeft,
  2184. bHorz,
  2185. bEnabled,
  2186. bHover,
  2187. bPushed,
  2188. bGroupedMode,
  2189. pHelperSrc,
  2190. lParam,
  2191. bFlat
  2192. );
  2193. //  return;
  2194. //  }
  2195. // LPCTSTR strButtonType = _T("Close");
  2196. //  switch( nHitTest )
  2197. //  {
  2198. //  case __ETWH_BUTTON_LEFTUP:
  2199. //  strButtonType = _T("Up");
  2200. //  break;
  2201. //  case __ETWH_BUTTON_RIGHTDOWN:
  2202. //  strButtonType = _T("Down");
  2203. //  break;
  2204. //  case __ETWH_BUTTON_HELP:
  2205. //  strButtonType = _T("Help");
  2206. //  break;
  2207. //  case __ETWH_BUTTON_CLOSE:
  2208. //  strButtonType = _T("Close");
  2209. //  break;
  2210. //  case __ETWH_BUTTON_TAB_LIST:
  2211. //  strButtonType = _T("TabList");
  2212. //  break;
  2213. //  case __ETWH_BUTTON_SCROLL_HOME:
  2214. //  strButtonType = _T("Home");
  2215. //  break;
  2216. //  case __ETWH_BUTTON_SCROLL_END:
  2217. //  strButtonType = _T("End");
  2218. //  break;
  2219. //  default:
  2220. //  CExtPaintManager::PaintTabButton(
  2221. //  dc,
  2222. //  rcButton,
  2223. //  nHitTest,
  2224. //  bTopLeft,
  2225. //  bHorz,
  2226. //  bEnabled,
  2227. //  bHover,
  2228. //  bPushed,
  2229. //  bGroupedMode,
  2230. //  pHelperSrc,
  2231. //  lParam,
  2232. // bFlat
  2233. //  );
  2234. //  return;
  2235. //  } // switch( nHitTest )
  2236. // CExtTabWnd * pWndTab = STATIC_DOWNCAST( CExtTabWnd, pHelperSrc );
  2237. // 
  2238. // LPCTSTR strGroupped = _T("Simple"); // bGroupedMode ? _T("Groupped") : _T("Simple");
  2239. // 
  2240. // LPCTSTR strState =
  2241. //  bEnabled
  2242. //  ? ( bPushed
  2243. //  ? _T("Pressed")
  2244. //  : bHover ? _T("Hover") : _T("Normal")
  2245. //  )
  2246. //  : _T("Disabled")
  2247. //  ;
  2248. // //LPCTSTR strSkinnedTabControlType = GetSkinnedTabControlType( pWndTab );
  2249. // LPCTSTR strSkinnedTabControlOrientation = GetSkinnedTabControlOrientation( pWndTab );
  2250. // CExtSkinGlyph & tabItem = 
  2251. //  m_Skin[_T("TabButton")][strGroupped][strButtonType][strState]
  2252. //  [strSkinnedTabControlOrientation] //[strSkinnedTabControlType]
  2253. //  .Glyph( _T("Area") );
  2254. //  tabItem.Draw( dc.m_hDC, rcButton );
  2255. }
  2256. void CExtPaintManagerOffice2007_Impl::PaintTabNcAreaRect(
  2257. CDC & dc,
  2258. const RECT & rc,
  2259. CObject * pHelperSrc,
  2260. LPARAM lParam // = 0L
  2261. )
  2262. {
  2263. ASSERT_VALID( this );
  2264. ASSERT( dc.GetSafeHdc() != NULL );
  2265. if( IsHighContrast() )
  2266. {
  2267. CExtPaintManagerXP::PaintTabNcAreaRect(
  2268. dc,
  2269. rc,
  2270. pHelperSrc,
  2271. lParam
  2272. );
  2273. return;
  2274. }
  2275. if( pHelperSrc == NULL
  2276. || (! pHelperSrc->IsKindOf( RUNTIME_CLASS( CExtTabWnd ) ) )
  2277. || ((CExtTabWnd*)pHelperSrc)->_IsCustomLayoutTabWnd()
  2278. )
  2279. {
  2280. CExtPaintManager::PaintTabNcAreaRect(
  2281. dc,
  2282. rc,
  2283. pHelperSrc,
  2284. lParam
  2285. );
  2286. return;
  2287. }
  2288. // CExtPaintManagerOffice2003::PaintDockerBkgnd( false, dc, (CWnd*)pHelperSrc, lParam );
  2289. dc.FillSolidRect( &rc, GetColor( _2003CLR_GRADIENT_DARK, NULL ) );
  2290. }
  2291. void CExtPaintManagerOffice2007_Impl::TabWnd_MeasureItemAreaMargins(
  2292. CExtTabWnd * pTabWnd,
  2293. LONG & nSpaceBefore,
  2294. LONG & nSpaceAfter,
  2295. LONG & nSpaceOver
  2296. )
  2297. {
  2298. ASSERT_VALID( this );
  2299. ASSERT( pTabWnd != NULL && ::IsWindow(pTabWnd->m_hWnd) );
  2300. ASSERT_VALID( pTabWnd );
  2301. if( IsHighContrast() )
  2302. {
  2303. CExtPaintManagerXP::TabWnd_MeasureItemAreaMargins(
  2304. pTabWnd,
  2305. nSpaceBefore,
  2306. nSpaceAfter,
  2307. nSpaceOver
  2308. );
  2309. return;
  2310. }
  2311. CExtPaintManager::TabWnd_MeasureItemAreaMargins(
  2312. pTabWnd,
  2313. nSpaceBefore,
  2314. nSpaceAfter,
  2315. nSpaceOver
  2316. );
  2317. }
  2318. void CExtPaintManagerOffice2007_Impl::TabWnd_UpdateItemMeasure(
  2319. CExtTabWnd * pTabWnd,
  2320. CExtTabWnd::TAB_ITEM_INFO * pTii,
  2321. CDC & dcMeasure,
  2322. CSize & sizePreCalc
  2323. )
  2324. {
  2325. ASSERT_VALID( this );
  2326. ASSERT_VALID( pTii );
  2327. ASSERT( dcMeasure.GetSafeHdc() != NULL );
  2328. ASSERT( pTii->GetTabWnd() == pTabWnd );
  2329. if( IsHighContrast() )
  2330. {
  2331. CExtPaintManagerXP::TabWnd_UpdateItemMeasure(
  2332. pTabWnd,
  2333. pTii,
  2334. dcMeasure,
  2335. sizePreCalc
  2336. );
  2337. return;
  2338. }
  2339. CExtPaintManager::TabWnd_UpdateItemMeasure(
  2340. pTabWnd,
  2341. pTii,
  2342. dcMeasure,
  2343. sizePreCalc
  2344. );
  2345. sizePreCalc.cx += 6;
  2346. sizePreCalc.cy += 6;
  2347. }
  2348. void CExtPaintManagerOffice2007_Impl::TabWnd_AdjustItemCloseButtonRect(
  2349. CRect & rcCloseButton,
  2350. CExtTabWnd * pTabWnd
  2351. )
  2352. {
  2353. ASSERT_VALID( this );
  2354. pTabWnd;
  2355. rcCloseButton;
  2356. //rcCloseButton.OffsetRect( -3, 0 );
  2357. }
  2358. bool CExtPaintManagerOffice2007_R1::TabWnd_GetParentSizingMargin(
  2359. INT & nMargin,
  2360. DWORD dwOrientation,
  2361. CExtTabWnd * pTabWnd
  2362. ) const
  2363. {
  2364. ASSERT_VALID( this );
  2365. ASSERT_VALID( pTabWnd );
  2366. if( IsHighContrast() )
  2367. return 
  2368. CExtPaintManagerXP::TabWnd_GetParentSizingMargin(
  2369. nMargin,
  2370. dwOrientation,
  2371. pTabWnd
  2372. );
  2373. if( pTabWnd->_IsCustomLayoutTabWnd() )
  2374. return
  2375. CExtPaintManagerOffice2007_Impl::TabWnd_GetParentSizingMargin(
  2376. nMargin,
  2377. dwOrientation,
  2378. pTabWnd
  2379. );
  2380. nMargin = 0;
  2381. return true;
  2382. }
  2383. void CExtPaintManagerOffice2007_Impl::GetThemeAccentTabColors(
  2384. COLORREF * pClrSetectedTabItemText,
  2385. COLORREF * pClrSetectedTabItemFace, // = NULL
  2386. COLORREF * pClrSetectedTabItemBorderLight, // = NULL
  2387. COLORREF * pClrSetectedTabItemBorderDark, // = NULL
  2388. CObject * pHelperSrc, // = NULL
  2389. LPARAM lParam // = 0L
  2390. )
  2391. {
  2392. ASSERT_VALID( this );
  2393. if( IsHighContrast() )
  2394. {
  2395. CExtPaintManagerXP::GetThemeAccentTabColors(
  2396. pClrSetectedTabItemText,
  2397. pClrSetectedTabItemFace,
  2398. pClrSetectedTabItemBorderLight,
  2399. pClrSetectedTabItemBorderDark,
  2400. pHelperSrc,
  2401. lParam
  2402. );
  2403. return;
  2404. }
  2405. CExtPaintManager::GetThemeAccentTabColors(
  2406. pClrSetectedTabItemText,
  2407. pClrSetectedTabItemFace,
  2408. pClrSetectedTabItemBorderLight,
  2409. pClrSetectedTabItemBorderDark,
  2410. pHelperSrc,
  2411. lParam
  2412. );
  2413. }
  2414. #endif // (!defined __EXT_MFC_NO_TAB_CTRL)
  2415. #if (!defined __EXT_MFC_NO_STATUSBAR)
  2416. bool CExtPaintManagerOffice2007_Impl::StatusBar_EraseBackground(
  2417. CDC & dc,
  2418. const RECT & rcClient,
  2419. const CExtStatusControlBar * pStatusBar,
  2420. LPARAM lParam // = 0
  2421. ) const
  2422. {
  2423. ASSERT_VALID( this );
  2424. ASSERT_VALID( pStatusBar );
  2425. if( IsHighContrast() )
  2426. return 
  2427. CExtPaintManagerXP::StatusBar_EraseBackground(
  2428. dc,
  2429. rcClient,
  2430. pStatusBar,
  2431. lParam
  2432. );
  2433. if( m_bmpStatusBkLight.IsEmpty()
  2434. || m_bmpStatusBkDark.IsEmpty()
  2435. )
  2436. return false;
  2437. bool bLastIsDark = true;
  2438. INT nPaneIdx, nPaneCount = pStatusBar->GetPaneCount();
  2439. if( nPaneCount > 0 )
  2440. {
  2441. CExtStatusControlBar::e_StatusPaneBackgroundAccent_t eSPBA =
  2442. pStatusBar->OnQueryPaneBackgroundAccent( nPaneCount - 1 );
  2443. if( eSPBA == CExtStatusControlBar::__ESPBA_LIGHT )
  2444. bLastIsDark = false;
  2445. } // if( nPaneCount > 0 )
  2446. if( bLastIsDark )
  2447. m_bmpStatusBkDark.DrawSkinParts(
  2448. dc.m_hDC,
  2449. rcClient,
  2450. m_rcStatusBkPadding,
  2451. CExtBitmap::__EDM_STRETCH
  2452. );
  2453. else
  2454. m_bmpStatusBkLight.DrawSkinParts(
  2455. dc.m_hDC,
  2456. rcClient,
  2457. m_rcStatusBkPadding,
  2458. CExtBitmap::__EDM_STRETCH
  2459. );
  2460. for( nPaneIdx = 0; nPaneIdx < nPaneCount; nPaneIdx++ )
  2461. {
  2462. CExtStatusControlBar::e_StatusPaneBackgroundAccent_t eSPBA =
  2463. pStatusBar->OnQueryPaneBackgroundAccent( nPaneIdx );
  2464. if( bLastIsDark )
  2465. {
  2466. if( eSPBA == CExtStatusControlBar::__ESPBA_LIGHT )
  2467. {
  2468. CRect rcPane;
  2469. pStatusBar->GetItemRect( nPaneIdx, &rcPane );
  2470. rcPane.top = rcClient.top;
  2471. rcPane.bottom = rcClient.bottom;
  2472. if( rcPane.IsRectEmpty() || (! dc.RectVisible( &rcPane ) ) )
  2473. continue;
  2474. m_bmpStatusBkLight.DrawSkinParts(
  2475. dc.m_hDC,
  2476. rcPane,
  2477. m_rcStatusBkPadding,
  2478. CExtBitmap::__EDM_STRETCH
  2479. );
  2480. continue;
  2481. } // if( eSPBA == CExtStatusControlBar::__ESPBA_LIGHT )
  2482. } // if( bLastIsDark )
  2483. else
  2484. {
  2485. if( eSPBA == CExtStatusControlBar::__ESPBA_DARK )
  2486. {
  2487. CRect rcPane;
  2488. pStatusBar->GetItemRect( nPaneIdx, &rcPane );
  2489. rcPane.top = rcClient.top;
  2490. rcPane.bottom = rcClient.bottom;
  2491. if( rcPane.IsRectEmpty() || (! dc.RectVisible( &rcPane ) ) )
  2492. continue;
  2493. m_bmpStatusBkDark.DrawSkinParts(
  2494. dc.m_hDC,
  2495. rcPane,
  2496. m_rcStatusBkPadding,
  2497. CExtBitmap::__EDM_STRETCH
  2498. );
  2499. continue;
  2500. } // if( eSPBA == CExtStatusControlBar::__ESPBA_DARK )
  2501. } // else from if( bLastIsDark )
  2502. } // for( nPaneIdx = 0; nPaneIdx < nPaneCount; nPaneIdx++ )
  2503. return true;
  2504. }
  2505. bool CExtPaintManagerOffice2007_Impl::StatusBar_PaintSeparator(
  2506. CDC & dc,
  2507. int nPaneIdxAfterSep,
  2508. const RECT & rcPaneBefore,
  2509. const RECT & rcPaneAfter,
  2510. const CExtStatusControlBar * pStatusBar,
  2511. LPARAM lParam // = 0
  2512. ) const
  2513. {
  2514. ASSERT_VALID( this );
  2515. ASSERT( dc.GetSafeHdc() != NULL );
  2516. ASSERT_VALID( pStatusBar );
  2517. if( IsHighContrast() )
  2518. return 
  2519. CExtPaintManagerXP::StatusBar_PaintSeparator(
  2520. dc,
  2521. nPaneIdxAfterSep,
  2522. rcPaneBefore,
  2523. rcPaneAfter,
  2524. pStatusBar,
  2525. lParam
  2526. );
  2527. if( m_bmpStatusSeparator.IsEmpty() )
  2528. return false;
  2529. CRect rcClient;
  2530. pStatusBar->GetClientRect( &rcClient );
  2531. int iWidth = 0;
  2532. UINT nIndex = 0, nPaneStyle = 0;
  2533. pStatusBar->GetPaneInfo( nPaneIdxAfterSep, nIndex, nPaneStyle, iWidth );
  2534. CRect rcSeparator(
  2535. rcPaneBefore.right,
  2536. rcClient.top,
  2537. rcPaneAfter.left,
  2538. rcClient.bottom
  2539. );
  2540. //bool bDisabled = ( ( nPaneStyle & SBPS_DISABLED ) != 0 ) ? true : false;
  2541. CSize _size = m_bmpStatusSeparator.GetSize();
  2542. int nWidth = rcSeparator.Width();
  2543. if( nWidth != _size.cx )
  2544. {
  2545. rcSeparator.left += ( nWidth - _size.cx ) / 2;
  2546. rcSeparator.right = rcSeparator.left + _size.cx;
  2547. }
  2548. m_bmpStatusSeparator.AlphaBlendSkinParts(
  2549. dc.m_hDC,
  2550. rcSeparator,
  2551. m_rcStatusBkPadding,
  2552. CExtBitmap::__EDM_STRETCH
  2553. );
  2554. return true;
  2555. }
  2556. bool CExtPaintManagerOffice2007_Impl::StatusBar_PaintPane(
  2557. CDC & dc,
  2558. int nPaneIdx,
  2559. const RECT & rcPane,
  2560. DWORD dwPaneStyle,
  2561. HICON hIcon,
  2562. __EXT_MFC_SAFE_LPCTSTR sPaneText,
  2563. UINT nDrawTextFlags,
  2564. COLORREF clrText,
  2565. const CExtStatusControlBar * pStatusBar,
  2566. LPARAM lParam // = 0
  2567. ) const
  2568. {
  2569. ASSERT_VALID( this );
  2570. ASSERT( dc.GetSafeHdc() != NULL );
  2571. ASSERT_VALID( pStatusBar );
  2572. if( IsHighContrast() )
  2573. return 
  2574. CExtPaintManagerXP::StatusBar_PaintPane(
  2575. dc,
  2576. nPaneIdx,
  2577. rcPane,
  2578. dwPaneStyle,
  2579. hIcon,
  2580. sPaneText,
  2581. nDrawTextFlags,
  2582. clrText,
  2583. pStatusBar,
  2584. lParam
  2585. );
  2586. bool bDisabled = ( ( dwPaneStyle & SBPS_DISABLED ) != 0 ) ? true : false;
  2587. CRect rectPane( rcPane );
  2588. rectPane.DeflateRect( 1, 1 );
  2589. CRect rcText( rectPane );
  2590. if( hIcon != NULL )
  2591. {
  2592. CExtCmdIcon _icon;
  2593. _icon.AssignFromHICON( hIcon, true );
  2594. CSize sizeIcon = _icon.GetSize();
  2595. rcText.left += sizeIcon.cx + 1;
  2596. _icon.Paint(
  2597. const_cast < CExtPaintManagerOffice2007_Impl * > ( this ),
  2598. dc,
  2599. rectPane.left,
  2600. rectPane.top + ( rectPane.Height() - sizeIcon.cy ) / 2,
  2601. -1,
  2602. -1
  2603. );
  2604. } // if( hIcon != NULL )
  2605. int nPaneTextLen = (sPaneText == NULL) ? int(0) : int(_tcslen(sPaneText));
  2606. if( ( !bDisabled )
  2607. ||  ( bDisabled && ( !pStatusBar->m_bHideTextOnDisabledPanes ) )
  2608. && nPaneTextLen > 0
  2609. )
  2610. { // if text painting is allowed
  2611. if( rcText.right > rcText.left )
  2612. {
  2613. COLORREF clrStatusPaneTextColor =
  2614. ( clrText != COLORREF(-1L) )
  2615. ? clrText
  2616. : bDisabled
  2617. ? m_clrStatusPaneTextColorDisabled
  2618. : m_clrStatusPaneTextColorNormal;
  2619. if( clrStatusPaneTextColor != COLORREF(-1L) )
  2620. {
  2621. COLORREF clrTextRestore = dc.SetTextColor( clrStatusPaneTextColor );
  2622. dc.DrawText(
  2623. LPCTSTR(sPaneText),
  2624. nPaneTextLen,
  2625. &rcText,
  2626. nDrawTextFlags
  2627. );
  2628. if( clrTextRestore != COLORREF(-1L) )
  2629. dc.SetTextColor( clrTextRestore );
  2630. } // if( clrStatusPaneTextColor != COLORREF(-1L) )
  2631. } // if( rcText.right > rcText.left )
  2632. } // if text painting is allowed
  2633. return true;
  2634. }
  2635. bool CExtPaintManagerOffice2007_Impl::StatusBar_QuerySkinSupport(
  2636. const CExtStatusControlBar * pStatusBar,
  2637. LPARAM lParam // = 0
  2638. ) const
  2639. {
  2640. ASSERT_VALID( this );
  2641. ASSERT_VALID( pStatusBar );
  2642. if( IsHighContrast() )
  2643. return 
  2644. CExtPaintManagerXP::StatusBar_QuerySkinSupport(
  2645. pStatusBar,
  2646. lParam
  2647. );
  2648. return true;
  2649. }
  2650. #endif // (!defined __EXT_MFC_NO_STATUSBAR)
  2651. bool CExtPaintManagerOffice2007_Impl::NcFrame_IsSupported(
  2652. const CWnd * pWnd,
  2653. LPARAM lParam // = 0L
  2654. ) const
  2655. {
  2656. ASSERT_VALID( this );
  2657. lParam;
  2658. if( pWnd == NULL )
  2659. return false;
  2660. //ASSERT_VALID( pWnd );
  2661. if( pWnd->GetSafeHwnd() == NULL )
  2662. return false;
  2663. if( IsHighContrast() )
  2664. return 
  2665. CExtPaintManagerXP::NcFrame_IsSupported(
  2666. pWnd,
  2667. lParam
  2668. );
  2669. //DWORD dwStyle = pWnd->GetStyle();
  2670. // if( (dwStyle&WS_CHILD) != 0 )
  2671. // return false;
  2672. return true;
  2673. }
  2674. HRGN CExtPaintManagerOffice2007_Impl::NcFrame_GenerateSkinFrameRGN(
  2675. const RECT & rcWnd,
  2676. const CWnd * pWnd,
  2677. LPARAM lParam // = 0L
  2678. ) const
  2679. {
  2680. ASSERT_VALID( this );
  2681. ASSERT_VALID( pWnd );
  2682. if( IsHighContrast() )
  2683. return 
  2684. CExtPaintManagerXP::NcFrame_GenerateSkinFrameRGN(
  2685. rcWnd,
  2686. pWnd,
  2687. lParam
  2688. );
  2689. if( pWnd->GetSafeHwnd() != NULL
  2690. && (pWnd->GetStyle()&WS_CHILD) == 0
  2691. && pWnd->IsZoomed()
  2692. )
  2693. return ( (HRGN)NULL );
  2694. CRect rcThemePadding = m_rcNcFrameBordersActive;
  2695. rcThemePadding.top += m_nCaptionHeightActive;
  2696. bool bRTL = false; //( (pWnd->GetExStyle()&WS_EX_LAYOUTRTL) != 0 ) ? true : false;
  2697. HRGN hRgn =
  2698. m_bmpNcFrameActive.GenerateSkinFrameAlphaRGN(
  2699. bRTL,
  2700. rcWnd,
  2701. rcThemePadding
  2702. );
  2703. return hRgn;
  2704. }
  2705. void CExtPaintManagerOffice2007_Impl::NcFrame_GetMetrics(
  2706. RECT & rcNcBorders,
  2707. RECT & rcThemePadding,
  2708. const CWnd * pWnd,
  2709. LPARAM lParam // = 0L
  2710. ) const
  2711. {
  2712. ASSERT_VALID( this );
  2713. ASSERT( NcFrame_IsSupported( pWnd ) );
  2714. if( IsHighContrast() )
  2715. {
  2716. CExtPaintManagerXP::NcFrame_GetMetrics(
  2717. rcNcBorders,
  2718. rcThemePadding,
  2719. pWnd,
  2720. lParam
  2721. );
  2722. return;
  2723. }
  2724. if( pWnd->GetSafeHwnd() != NULL
  2725. && (pWnd->GetStyle()&WS_CHILD) == 0
  2726. && pWnd->IsZoomed()
  2727. )
  2728. {
  2729. ::SetRect( &rcNcBorders, 0, 0, 0, 0 );
  2730. ::SetRect( &rcThemePadding, 0, 0, 0, 0 );
  2731. }
  2732. else
  2733. {
  2734. rcNcBorders = m_rcNcFrameBordersActive;
  2735. rcThemePadding = m_rcNcFrameBordersActive;
  2736. }
  2737. INT nCaptionHeightActive = m_nCaptionHeightActive;
  2738. nCaptionHeightActive = UiScalingDo( nCaptionHeightActive, __EUIST_Y );
  2739. rcThemePadding.top += nCaptionHeightActive;
  2740. //DWORD dwStyleEx = pWnd->GetExStyle();
  2741. //bool bRTL = ( (dwStyleEx&WS_EX_LAYOUTRTL) != 0 ) ? true : false;
  2742. // if( bRTL )
  2743. // {
  2744. // __EXT_MFC_SwapLeftRight( &rcNcBorders );
  2745. // __EXT_MFC_SwapLeftRight( &rcThemePadding );
  2746. // }
  2747. }
  2748. CRect CExtPaintManagerOffice2007_Impl::NcFrame_GetHtRect(
  2749. UINT nHT,
  2750. bool bScreenMapping,
  2751. bool bLayoutBordersH,
  2752. bool bLayoutBordersV,
  2753. const CExtCmdIcon * pIcon,
  2754. const CWnd * pWnd,
  2755. LPMINMAXINFO pMinMaxInfo, // = NULL
  2756. LPARAM lParam // = 0L
  2757. ) const
  2758. {
  2759. ASSERT_VALID( this );
  2760. ASSERT( NcFrame_IsSupported( pWnd ) );
  2761. if( IsHighContrast() )
  2762. return 
  2763. CExtPaintManagerXP::NcFrame_GetHtRect(
  2764. nHT,
  2765. bScreenMapping,
  2766. bLayoutBordersH,
  2767. bLayoutBordersV,
  2768. pIcon,
  2769. pWnd,
  2770. pMinMaxInfo,
  2771. lParam
  2772. );
  2773. CRect rcNcBorders, rcThemePadding;
  2774. NcFrame_GetMetrics(
  2775. rcNcBorders,
  2776. rcThemePadding,
  2777. pWnd,
  2778. lParam
  2779. );
  2780. CRect rcWnd;
  2781. pWnd->GetWindowRect( &rcWnd );
  2782. if( ! bScreenMapping )
  2783. rcWnd.OffsetRect( -rcWnd.TopLeft() );
  2784. bool bMaximizedMode = false;
  2785. if( ( ! g_PaintManager.m_DWM.IsCompositionEnabled() )
  2786. && (pWnd->GetStyle()&WS_CHILD) == 0
  2787. && pWnd->IsZoomed()
  2788. )
  2789. bMaximizedMode = true;
  2790. //  rcWnd.InflateRect(
  2791. //  rcNcBorders.left,
  2792. //  rcNcBorders.top,
  2793. //  rcNcBorders.right,
  2794. //  rcNcBorders.bottom
  2795. //  );
  2796. bool bZoomed = pWnd->IsZoomed()? true : false;
  2797. bool bSupportsResizingH = bLayoutBordersH;
  2798. bool bSupportsResizingV = bLayoutBordersV;
  2799. DWORD dwWndStyle = pWnd->GetStyle();
  2800. if( (dwWndStyle&WS_THICKFRAME) != 0
  2801. && ( (! bSupportsResizingH )
  2802. || (! bSupportsResizingV )
  2803. )
  2804. )
  2805. {
  2806. bool bHaveMinMaxInfo = false;
  2807. MINMAXINFO _mmi;
  2808. if( pMinMaxInfo != NULL )
  2809. {
  2810. bHaveMinMaxInfo = true;
  2811. __EXT_MFC_MEMCPY( 
  2812. &_mmi,
  2813. sizeof(MINMAXINFO),
  2814. pMinMaxInfo, 
  2815. sizeof(MINMAXINFO) 
  2816. );
  2817. } // if( pMinMaxInfo != NULL )
  2818. else
  2819. {
  2820. ::memset( &_mmi, 0, sizeof(MINMAXINFO) );
  2821. monitor_parms_t _mp;
  2822. stat_GetMonitorParms( _mp, (CWnd*)pWnd );
  2823. _mmi.ptMaxPosition.x = _mp.m_rcWorkArea.left;
  2824. _mmi.ptMaxPosition.y = _mp.m_rcWorkArea.top;
  2825. _mmi.ptMaxTrackSize.x = _mp.m_rcWorkArea.Width(); // ::GetSystemMetrics( SM_CXMAXTRACK );
  2826. _mmi.ptMaxTrackSize.y = _mp.m_rcWorkArea.Height(); // ::GetSystemMetrics( SM_CYMAXTRACK );
  2827. _mmi.ptMinTrackSize.x = ::GetSystemMetrics( SM_CXMINTRACK );
  2828. _mmi.ptMinTrackSize.y = ::GetSystemMetrics( SM_CYMINTRACK );
  2829. _mmi.ptMaxSize.x = _mmi.ptMaxTrackSize.x;
  2830. _mmi.ptMaxSize.y = _mmi.ptMaxTrackSize.y;
  2831. if( ((CWnd*)pWnd)->SendMessage( WM_GETMINMAXINFO, 0, LPARAM(&_mmi) ) == 0 )
  2832. bHaveMinMaxInfo = true;
  2833. } // else from if( pMinMaxInfo != NULL )
  2834. if( bHaveMinMaxInfo )
  2835. {
  2836. if( _mmi.ptMinTrackSize.x < _mmi.ptMaxTrackSize.x )
  2837. bSupportsResizingH = true;
  2838. if( _mmi.ptMinTrackSize.y < _mmi.ptMaxTrackSize.y )
  2839. bSupportsResizingV = true;
  2840. } // if( bHaveMinMaxInfo )
  2841. } // if( (dwWndStyle&WS_THICKFRAME) != 0 ...
  2842. CRect rcPart( 0, 0, 0, 0 );
  2843. bool bRtlEnabledHT = false;
  2844. switch( nHT )
  2845. {
  2846. case HTSYSMENU:
  2847. {
  2848. if( (dwWndStyle&WS_SYSMENU) == 0 )
  2849. break;
  2850. int nIconAreaWidth = 0;
  2851. if( pIcon != NULL && (! pIcon->IsEmpty() ) )
  2852. nIconAreaWidth = UiScalingDo( pIcon->GetSize().cx + 2, __EUIST_Y );
  2853. bRtlEnabledHT = true;
  2854. rcPart.SetRect(
  2855. rcWnd.left + (bZoomed ? 0 : ( bSupportsResizingH ? rcNcBorders.left : 0 ) ),
  2856. rcWnd.top + (bZoomed ? 0 : ( bSupportsResizingV ? rcNcBorders.top : 0 ) ),
  2857. rcWnd.left + (bZoomed ? 0 : ( bSupportsResizingH ? rcNcBorders.left : 0 ) )
  2858. + nIconAreaWidth,
  2859. rcWnd.top + (bZoomed ? 0 : ( bSupportsResizingV ? rcNcBorders.top : 0 ) )
  2860. + rcThemePadding.top
  2861. );
  2862. if( bMaximizedMode )
  2863. rcPart.OffsetRect( 0, -m_rcNcFrameBordersActive.top );
  2864. }
  2865. break;
  2866. case HTCAPTION:
  2867. // if( (dwWndStyle&WS_CAPTION) == 0 )
  2868. // break;
  2869. rcPart.SetRect(
  2870. rcWnd.left + (bZoomed ? 0 : ( bSupportsResizingH ? rcNcBorders.left : 0 ) ),
  2871. rcWnd.top + (bZoomed ? 0 : ( bSupportsResizingV ? rcNcBorders.top : 0 ) ),
  2872. rcWnd.right - (bZoomed ? 0 : ( bSupportsResizingH ? rcNcBorders.right : 0 ) ),
  2873. rcWnd.top + rcThemePadding.top
  2874. );
  2875. if( bMaximizedMode )
  2876. rcPart.OffsetRect( 0, -m_rcNcFrameBordersActive.top );
  2877. break;
  2878. case HTTOP:
  2879. if( bZoomed || (! bSupportsResizingV ) )
  2880. break;
  2881. rcPart.SetRect(
  2882. rcWnd.left + ( bSupportsResizingH ? rcNcBorders.left : 0 ),
  2883. rcWnd.top,
  2884. rcWnd.right - ( bSupportsResizingH ? rcNcBorders.right : 0 ),
  2885. rcWnd.top + rcNcBorders.top
  2886. );
  2887. break;
  2888. case HTBOTTOM:
  2889. if( bZoomed || (! bSupportsResizingV ) )
  2890. break;
  2891. rcPart.SetRect(
  2892. rcWnd.left + ( bSupportsResizingH ? rcNcBorders.left : 0 ),
  2893. rcWnd.bottom - rcNcBorders.bottom,
  2894. rcWnd.right - ( bSupportsResizingH ? rcNcBorders.right : 0 ),
  2895. rcWnd.bottom
  2896. );
  2897. break;
  2898. case HTLEFT:
  2899. if( bZoomed || (! bSupportsResizingH ) )
  2900. break;
  2901. rcPart.SetRect(
  2902. rcWnd.left,
  2903. rcWnd.top + ( bSupportsResizingV ? rcNcBorders.top : 0 ),
  2904. rcWnd.left + rcNcBorders.left,
  2905. rcWnd.bottom - ( bSupportsResizingV ? rcNcBorders.bottom : 0 )
  2906. );
  2907. break;
  2908. case HTRIGHT:
  2909. if( bZoomed || (! bSupportsResizingH ) )
  2910. break;
  2911. rcPart.SetRect(
  2912. rcWnd.right - rcNcBorders.right,
  2913. rcWnd.top + ( bSupportsResizingV ? rcNcBorders.top : 0 ),
  2914. rcWnd.right,
  2915. rcWnd.bottom - ( bSupportsResizingV ? rcNcBorders.bottom : 0 )
  2916. );
  2917. break;
  2918. case HTTOPLEFT:
  2919. if( bZoomed || (! bSupportsResizingH ) || (! bSupportsResizingV ) )
  2920. break;
  2921. rcPart.SetRect(
  2922. rcWnd.left,
  2923. rcWnd.top,
  2924. rcWnd.left + rcNcBorders.left,
  2925. rcWnd.top + rcNcBorders.top
  2926. );
  2927. break;
  2928. case HTTOPRIGHT:
  2929. if( bZoomed || (! bSupportsResizingH ) || (! bSupportsResizingV ) )
  2930. break;
  2931. rcPart.SetRect(
  2932. rcWnd.right - rcNcBorders.right,
  2933. rcWnd.top,
  2934. rcWnd.right,
  2935. rcWnd.top + rcNcBorders.top
  2936. );
  2937. break;
  2938. case HTBOTTOMLEFT:
  2939. if( bZoomed || (! bSupportsResizingH ) || (! bSupportsResizingV ) )
  2940. break;
  2941. rcPart.SetRect(
  2942. rcWnd.left,
  2943. rcWnd.bottom - rcNcBorders.bottom,
  2944. rcWnd.left + rcNcBorders.left,
  2945. rcWnd.bottom
  2946. );
  2947. break;
  2948. case HTBOTTOMRIGHT:
  2949. if( bZoomed || (! bSupportsResizingH ) || (! bSupportsResizingV ) )
  2950. break;
  2951. rcPart.SetRect(
  2952. rcWnd.right - rcNcBorders.right,
  2953. rcWnd.bottom - rcNcBorders.bottom,
  2954. rcWnd.right,
  2955. rcWnd.bottom
  2956. );
  2957. break;
  2958. } // switch( nHT )
  2959. if( bRtlEnabledHT && ( ! rcPart.IsRectEmpty() ) )
  2960. {
  2961. bool bRTL = ( (pWnd->GetExStyle()&WS_EX_LAYOUTRTL) != 0 ) ? true : false;
  2962. if( bRTL )
  2963. {
  2964. CRect rcWnd;
  2965. pWnd->GetWindowRect( &rcWnd );
  2966. rcWnd.OffsetRect( -rcWnd.TopLeft() );
  2967. ::SetRect(
  2968. &rcPart,
  2969. rcWnd.right - 1 - rcPart.right,
  2970. rcPart.top,
  2971. rcWnd.right - 1 - rcPart.left,
  2972. rcPart.bottom
  2973. );
  2974. } // if( bRTL )
  2975. } // if( bRtlEnabledHT && ( ! rcPart.IsRectEmpty() ) )
  2976. return rcPart;
  2977. }
  2978. void CExtPaintManagerOffice2007_Impl::NcFrame_Paint(
  2979. CDC & dc,
  2980. const CExtCmdIcon * pIcon,
  2981. __EXT_MFC_SAFE_LPCTSTR strCaption,
  2982. UINT nDrawTextAlignFlags,
  2983. const RECT & rcFrame,
  2984. const RECT & rcClient,
  2985. const RECT & rcIcon,
  2986. const RECT & rcText,
  2987. const RECT & rcHelp,
  2988. const RECT & rcMinimize,
  2989. const RECT & rcMaximizeRestore,
  2990. const RECT & rcClose,
  2991. bool bFrameActive,
  2992. bool bFrameEnabled,
  2993. bool bFrameMaximized,
  2994. CExtPaintManager::e_nc_button_state_t eStateButtonHelp,
  2995. CExtPaintManager::e_nc_button_state_t eStateButtonMinimize,
  2996. CExtPaintManager::e_nc_button_state_t eStateButtonMaximizeRestore,
  2997. CExtPaintManager::e_nc_button_state_t eStateButtonClose,
  2998. const CWnd * pWnd,
  2999. LPARAM lParam // = 0L
  3000. ) const
  3001. {
  3002. ASSERT_VALID( this );
  3003. ASSERT( dc.GetSafeHdc() != NULL );
  3004. if( IsHighContrast() )
  3005. {
  3006. CExtPaintManagerXP::NcFrame_Paint(
  3007. dc, pIcon, strCaption, nDrawTextAlignFlags, rcFrame, rcClient, rcIcon, rcText,
  3008. rcHelp, rcMinimize, rcMaximizeRestore, rcClose, bFrameActive, bFrameEnabled, bFrameMaximized,
  3009. eStateButtonHelp, eStateButtonMinimize, eStateButtonMaximizeRestore, eStateButtonClose,
  3010. pWnd, lParam
  3011. );
  3012. return;
  3013. }
  3014. int nOldStretchBltMode = ::GetStretchBltMode( dc.m_hDC );
  3015. ::SetStretchBltMode( dc.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
  3016. const CExtBitmap & _bmpNcFrame = bFrameActive ? m_bmpNcFrameActive : m_bmpNcFrameInactive;
  3017. const CRect & rcPadding = bFrameActive ? m_rcNcFrameBordersActive : m_rcNcFrameBordersInactive;
  3018. const INT nCaptionHeightSrc = bFrameActive ? m_nCaptionHeightActive : m_nCaptionHeightInactive;
  3019. const INT nCaptionHeightDst = UiScalingDo( nCaptionHeightSrc, __EUIST_Y );
  3020. CRect _rcFrame = rcFrame;
  3021. CRect _rcText = rcText;
  3022. bool bZoomed = pWnd->IsZoomed()? true : false;
  3023. if( bZoomed && ( ! g_PaintManager.m_DWM.IsCompositionEnabled() ) )
  3024. {
  3025. _rcText.top += rcPadding.top;
  3026. _rcText.bottom += rcPadding.top;
  3027. _rcFrame.top -= rcPadding.top;
  3028. _rcFrame.left -= rcPadding.left;
  3029. _rcFrame.right += rcPadding.right;
  3030. }
  3031. _bmpNcFrame.DrawNcFrame( dc.m_hDC, _rcFrame, rcPadding, nCaptionHeightDst, nCaptionHeightSrc );
  3032. if( pIcon != NULL
  3033. && (! pIcon->IsEmpty() )
  3034. && ( ! ::IsRectEmpty( &rcIcon ) )
  3035. && dc.RectVisible( &rcIcon )
  3036. )
  3037. {
  3038. CSize _sizeIconArea( rcIcon.right - rcIcon.left, rcIcon.bottom - rcIcon.top );
  3039. CSize _sizeIconSurface = pIcon->GetSize();
  3040. bool bDrawDefaultIconSize = true;
  3041. if( _sizeIconSurface != _sizeIconArea )
  3042. {
  3043. CExtCmdIcon _icon;
  3044. _icon = *pIcon;
  3045. if( ! _icon.IsEmpty() )
  3046. {
  3047. _icon.Scale( _sizeIconArea );
  3048. if( ! _icon.IsEmpty() )
  3049. {
  3050. bDrawDefaultIconSize = false;
  3051. _icon.Paint(
  3052. const_cast < CExtPaintManagerOffice2007_Impl * > ( this ),
  3053. dc.m_hDC,
  3054. rcIcon.left,
  3055. rcIcon.top,
  3056. _sizeIconArea.cx,
  3057. _sizeIconArea.cy
  3058. );
  3059. } // if( ! _icon.IsEmpty() )
  3060. } // if( ! _icon.IsEmpty() )
  3061. } // if( _sizeIconSurface != _sizeIconArea )
  3062. if( bDrawDefaultIconSize )
  3063. pIcon->Paint(
  3064. const_cast < CExtPaintManagerOffice2007_Impl * > ( this ),
  3065. dc.m_hDC,
  3066. rcIcon.left,
  3067. rcIcon.top,
  3068. -1,
  3069. -1
  3070. );
  3071. }
  3072. COLORREF colorFrameText = bFrameActive ? m_clrNcFrameTextActive : m_clrNcFrameTextInactive;
  3073. if( colorFrameText != COLORREF(-1L) )
  3074. {
  3075. int nLenCaption = int( ( strCaption == NULL ) ? 0 : _tcslen( strCaption ) );
  3076. if( nLenCaption > 0
  3077. && ( ! ::IsRectEmpty( &_rcText ) )
  3078. && dc.RectVisible( &rcText )
  3079. )
  3080. {
  3081. UINT _nDrawTextAlignFlags = nDrawTextAlignFlags;
  3082. if( pWnd->GetSafeHwnd() != NULL
  3083. && (pWnd->GetExStyle()&WS_EX_LAYOUT_RTL) != 0
  3084. && (nDrawTextAlignFlags&DT_CENTER) == 0
  3085. )
  3086. {
  3087. _nDrawTextAlignFlags &= ~(DT_LEFT|DT_CENTER|DT_RIGHT);
  3088. if( (nDrawTextAlignFlags&DT_RIGHT) != 0 )
  3089. _nDrawTextAlignFlags |= DT_LEFT;
  3090. else
  3091. _nDrawTextAlignFlags |= DT_RIGHT;
  3092. _nDrawTextAlignFlags |= DT_RTLREADING;
  3093. }
  3094. COLORREF clrOldText = dc.SetTextColor( colorFrameText );
  3095. CFont * pOldFont = dc.SelectObject( (CFont*)&m_FontCaption );
  3096. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3097. dc.DrawText(
  3098. strCaption,
  3099. nLenCaption,
  3100. (LPRECT)&_rcText,
  3101. _nDrawTextAlignFlags|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX
  3102. );
  3103. dc.SetBkMode( nOldBkMode );
  3104. dc.SelectObject( pOldFont );
  3105. dc.SetTextColor( clrOldText );
  3106. }
  3107. } // if( colorFrameText != COLORREF(-1L) )
  3108. static const RECT rcZeroPadding = { 0, 0, 0, 0 };
  3109. if( ( ! ::IsRectEmpty( &rcHelp ) )
  3110. && dc.RectVisible( &rcHelp )
  3111. )
  3112. {
  3113. //LPCTSTR strGlyph = stat_NcFrameButton_NameFromState( eStateButtonHelp );
  3114. //const CExtSkinGlyph & glyph = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Help")][strFrameActive].Glyph(strGlyph);
  3115. //glyph.Draw( dc.m_hDC, rcHelp );
  3116. INT nIndexInArray = bFrameActive ? m_nNcBtnIdxNormalActive : m_nNcBtnIdxNormalInactive;
  3117. if( eStateButtonHelp == __ENCBS_HOVER )
  3118. {
  3119. m_bmpNcButtonBkHover.AlphaBlendSkinParts( dc.m_hDC, rcHelp, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3120. nIndexInArray = m_nNcBtnIdxHover;
  3121. }
  3122. else if( eStateButtonHelp == __ENCBS_PRESSED )
  3123. {
  3124. m_bmpNcButtonBkPressed.AlphaBlendSkinParts( dc.m_hDC, rcHelp, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3125. nIndexInArray = m_nNcBtnIdxPressed;
  3126. }
  3127. else if( eStateButtonHelp == __ENCBS_DISABLED )
  3128. nIndexInArray = m_nNcBtnIdxDisabled;
  3129. CRect rcSrc( 0, 0, m_sizeNcButtonShapeInArr.cx, m_sizeNcButtonShapeInArr.cy );
  3130. rcSrc.OffsetRect( 0, m_sizeNcButtonShapeInArr.cy * nIndexInArray );
  3131. m_bmpArrNcButtonsHelp.AlphaBlendSkinParts(
  3132. dc.m_hDC,
  3133. rcHelp,
  3134. rcSrc,
  3135. rcZeroPadding,
  3136. ( g_PaintManager.m_nLPZ == 96 ) ? ( CExtBitmap::__EDM_CENTER ) : ( CExtBitmap::__EDM_STRETCH ),
  3137. true,
  3138. true
  3139. );
  3140. }
  3141. if( ( ! ::IsRectEmpty( &rcMinimize ) )
  3142. && dc.RectVisible( &rcMinimize )
  3143. )
  3144. {
  3145. //LPCTSTR strGlyph = stat_NcFrameButton_NameFromState( eStateButtonMinimize );
  3146. //const CExtSkinGlyph & glyph = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Minimize")][strFrameActive].Glyph(strGlyph);
  3147. //glyph.Draw( dc.m_hDC, rcMinimize );
  3148. INT nIndexInArray = bFrameActive ? m_nNcBtnIdxNormalActive : m_nNcBtnIdxNormalInactive;
  3149. if( eStateButtonMinimize == __ENCBS_HOVER )
  3150. {
  3151. m_bmpNcButtonBkHover.AlphaBlendSkinParts( dc.m_hDC, rcMinimize, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3152. nIndexInArray = m_nNcBtnIdxHover;
  3153. }
  3154. else if( eStateButtonMinimize == __ENCBS_PRESSED )
  3155. {
  3156. m_bmpNcButtonBkPressed.AlphaBlendSkinParts( dc.m_hDC, rcMinimize, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3157. nIndexInArray = m_nNcBtnIdxPressed;
  3158. }
  3159. else if( eStateButtonMinimize == __ENCBS_DISABLED )
  3160. nIndexInArray = m_nNcBtnIdxDisabled;
  3161. CRect rcSrc( 0, 0, m_sizeNcButtonShapeInArr.cx, m_sizeNcButtonShapeInArr.cy );
  3162. rcSrc.OffsetRect( 0, m_sizeNcButtonShapeInArr.cy * nIndexInArray );
  3163. const CExtBitmap & _bmpMin = ( pWnd != NULL && pWnd->IsIconic() ) ? m_bmpArrNcButtonsRestore : m_bmpArrNcButtonsMinimize;
  3164. _bmpMin.AlphaBlendSkinParts(
  3165. dc.m_hDC,
  3166. rcMinimize,
  3167. rcSrc,
  3168. rcZeroPadding,
  3169. ( g_PaintManager.m_nLPZ == 96 ) ? ( CExtBitmap::__EDM_CENTER ) : ( CExtBitmap::__EDM_STRETCH ),
  3170. true,
  3171. true
  3172. );
  3173. }
  3174. if( ( ! ::IsRectEmpty( &rcMaximizeRestore ) )
  3175. && dc.RectVisible( &rcMaximizeRestore )
  3176. )
  3177. {
  3178. //LPCTSTR strGlyph = stat_NcFrameButton_NameFromState( eStateButtonMaximizeRestore );
  3179. //const CExtSkinGlyph & glyph = m_Skin[_T("Button")][_T("FrameNcButton")][ bFrameMaximized ? _T("Restore") : _T("Maximize") ][strFrameActive].Glyph(strGlyph);
  3180. //glyph.Draw( dc.m_hDC, rcMaximizeRestore );
  3181. INT nIndexInArray = bFrameActive ? m_nNcBtnIdxNormalActive : m_nNcBtnIdxNormalInactive;
  3182. if( eStateButtonMaximizeRestore == __ENCBS_HOVER )
  3183. {
  3184. m_bmpNcButtonBkHover.AlphaBlendSkinParts( dc.m_hDC, rcMaximizeRestore, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3185. nIndexInArray = m_nNcBtnIdxHover;
  3186. }
  3187. else if( eStateButtonMaximizeRestore == __ENCBS_PRESSED )
  3188. {
  3189. m_bmpNcButtonBkPressed.AlphaBlendSkinParts( dc.m_hDC, rcMaximizeRestore, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3190. nIndexInArray = m_nNcBtnIdxPressed;
  3191. }
  3192. else if( eStateButtonMaximizeRestore == __ENCBS_DISABLED )
  3193. nIndexInArray = m_nNcBtnIdxDisabled;
  3194. CRect rcSrc( 0, 0, m_sizeNcButtonShapeInArr.cx, m_sizeNcButtonShapeInArr.cy );
  3195. rcSrc.OffsetRect( 0, m_sizeNcButtonShapeInArr.cy * nIndexInArray );
  3196. if( bFrameMaximized )
  3197. m_bmpArrNcButtonsRestore.AlphaBlendSkinParts(
  3198. dc.m_hDC,
  3199. rcMaximizeRestore,
  3200. rcSrc,
  3201. rcZeroPadding,
  3202. ( g_PaintManager.m_nLPZ == 96 ) ? ( CExtBitmap::__EDM_CENTER ) : ( CExtBitmap::__EDM_STRETCH ),
  3203. true,
  3204. true
  3205. );
  3206. else
  3207. m_bmpArrNcButtonsMaximize.AlphaBlendSkinParts(
  3208. dc.m_hDC,
  3209. rcMaximizeRestore,
  3210. rcSrc,
  3211. rcZeroPadding,
  3212. ( g_PaintManager.m_nLPZ == 96 ) ? ( CExtBitmap::__EDM_CENTER ) : ( CExtBitmap::__EDM_STRETCH ),
  3213. true,
  3214. true
  3215. );
  3216. }
  3217. if( ( ! ::IsRectEmpty( &rcClose ) )
  3218. && dc.RectVisible( &rcClose )
  3219. )
  3220. {
  3221. //LPCTSTR strGlyph = stat_NcFrameButton_NameFromState( eStateButtonClose );
  3222. //const CExtSkinGlyph & glyph = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Close")][strFrameActive].Glyph(strGlyph);
  3223. //glyph.Draw( dc.m_hDC, rcClose );
  3224. INT nIndexInArray = bFrameActive ? m_nNcBtnIdxNormalActive : m_nNcBtnIdxNormalInactive;
  3225. if( eStateButtonClose == __ENCBS_HOVER )
  3226. {
  3227. const CExtBitmap * pBmp = &m_bmpNcButtonBkHover;
  3228. if( ! m_bmpNcButtonBkHoverX.IsEmpty() )
  3229. pBmp = &m_bmpNcButtonBkHoverX;
  3230. pBmp->AlphaBlendSkinParts( dc.m_hDC, rcClose, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3231. nIndexInArray = m_nNcBtnIdxHover;
  3232. }
  3233. else if( eStateButtonClose == __ENCBS_PRESSED )
  3234. {
  3235. const CExtBitmap * pBmp = &m_bmpNcButtonBkPressed;
  3236. if( ! m_bmpNcButtonBkPressedX.IsEmpty() )
  3237. pBmp = &m_bmpNcButtonBkPressedX;
  3238. pBmp->AlphaBlendSkinParts( dc.m_hDC, rcClose, m_rcNcButtonBkPadding, CExtBitmap::__EDM_STRETCH );
  3239. nIndexInArray = m_nNcBtnIdxPressed;
  3240. }
  3241. else if( eStateButtonClose == __ENCBS_DISABLED )
  3242. nIndexInArray = m_nNcBtnIdxDisabled;
  3243. CRect rcSrc( 0, 0, m_sizeNcButtonShapeInArr.cx, m_sizeNcButtonShapeInArr.cy );
  3244. rcSrc.OffsetRect( 0, m_sizeNcButtonShapeInArr.cy * nIndexInArray );
  3245. m_bmpArrNcButtonsClose.AlphaBlendSkinParts(
  3246. dc.m_hDC,
  3247. rcClose,
  3248. rcSrc,
  3249. rcZeroPadding,
  3250. ( g_PaintManager.m_nLPZ == 96 ) ? ( CExtBitmap::__EDM_CENTER ) : ( CExtBitmap::__EDM_STRETCH ),
  3251. true,
  3252. true
  3253. );
  3254. }
  3255. ::SetStretchBltMode( dc.m_hDC, nOldStretchBltMode );
  3256. }
  3257. #define __EXT_MFC_SKINNED_CAPTION_TEXT_GAP 4
  3258. void CExtPaintManagerOffice2007_Impl::NcFrame_GetRects(
  3259. CExtCmdIcon * pIcon,
  3260. __EXT_MFC_SAFE_LPCTSTR strCaption,
  3261. UINT nDrawTextAlignFlags,
  3262. RECT & rcIcon,
  3263. RECT & rcText,
  3264. RECT & rcHelp,
  3265. RECT & rcMinimize,
  3266. RECT & rcMaximizeRestore,
  3267. RECT & rcClose,
  3268. const CWnd * pWnd,
  3269. LPMINMAXINFO pMinMaxInfo, // = NULL
  3270. LPARAM lParam // = 0L
  3271. ) const
  3272. {
  3273. ASSERT_VALID( this );
  3274. if( IsHighContrast() )
  3275. {
  3276. CExtPaintManagerXP::NcFrame_GetRects(
  3277. pIcon,
  3278. strCaption,
  3279. nDrawTextAlignFlags,
  3280. rcIcon,
  3281. rcText,
  3282. rcHelp,
  3283. rcMinimize,
  3284. rcMaximizeRestore,
  3285. rcClose,
  3286. pWnd,
  3287. pMinMaxInfo,
  3288. lParam
  3289. );
  3290. return;
  3291. }
  3292. ::SetRectEmpty( &rcIcon );
  3293. ::SetRectEmpty( &rcText );
  3294. ::SetRectEmpty( &rcHelp );
  3295. ::SetRectEmpty( &rcMinimize );
  3296. ::SetRectEmpty( &rcMaximizeRestore );
  3297. ::SetRectEmpty( &rcClose );
  3298. ASSERT( NcFrame_IsSupported( pWnd ) );
  3299. DWORD dwWndStyle = pWnd->GetStyle();
  3300. // if( (dwWndStyle&WS_CAPTION) == 0 )
  3301. // return;
  3302. DWORD dwWndStyleEx = pWnd->GetExStyle();
  3303. CRect rcNcBorders, rcThemePadding;
  3304. NcFrame_GetMetrics(
  3305. rcNcBorders,
  3306. rcThemePadding,
  3307. pWnd,
  3308. lParam
  3309. );
  3310. CRect rcCaption =
  3311. NcFrame_GetHtRect(
  3312. HTCAPTION,
  3313. false,
  3314. true,
  3315. true,
  3316. pIcon,
  3317. pWnd,
  3318. pMinMaxInfo
  3319. );
  3320. CRect rc = rcCaption;
  3321. ::CopyRect( &rcText, &rcCaption );
  3322. bool bZoomed = pWnd->IsZoomed()? true : false;
  3323. static const POINT g_ptZoomedButtonOffset = { -2, 5 };
  3324. static const POINT g_ptZoomedIconAndTextOffset = { 4, 3 };
  3325. if( (dwWndStyle&WS_SYSMENU) != 0 )
  3326. {
  3327. //LPCTSTR strFrameActive = _T("Active");
  3328. //const CExtSkinGlyph & glyphClose = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Close")][strFrameActive].Glyph(_T("Normal"));
  3329. CSize _sizeScClose(m_nCaptionHeightActive-2,m_nCaptionHeightActive-3); // = glyphClose.GetSize();
  3330. _sizeScClose.cx = UiScalingDo( _sizeScClose.cx, __EUIST_Y );
  3331. _sizeScClose.cy = UiScalingDo( _sizeScClose.cy, __EUIST_Y );
  3332. CRect _rcOffsetScClose(0,0,0,0); // = glyphClose.GetOffset();
  3333. rc.right -= bZoomed ? rcThemePadding.right : 1;
  3334. rc.right -= _rcOffsetScClose.right;
  3335. rc.left = rc.right - _sizeScClose.cx;
  3336. rc.top = rcCaption.top + _rcOffsetScClose.top + ( bZoomed ? _rcOffsetScClose.bottom : 0 );
  3337. rc.bottom = rc.top + _sizeScClose.cy;
  3338. if( bZoomed )
  3339. rc.OffsetRect( g_ptZoomedButtonOffset );
  3340. ::CopyRect( &rcClose, &rc );
  3341. rc.OffsetRect( -_sizeScClose.cx, 0 );
  3342. rcText.right = rcCaption.right - __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3343. if( (dwWndStyle&WS_MAXIMIZEBOX) != 0 )
  3344. {
  3345. //const CExtSkinGlyph & glyphMaximize = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Maximize")][strFrameActive].Glyph(_T("Normal"));
  3346. CSize _sizeScMaximize(m_nCaptionHeightActive-2,m_nCaptionHeightActive-3); // = glyphMaximize.GetSize();
  3347. _sizeScMaximize.cx = UiScalingDo( _sizeScMaximize.cx, __EUIST_Y );
  3348. _sizeScMaximize.cy = UiScalingDo( _sizeScMaximize.cy, __EUIST_Y );
  3349. CRect _rcOffsetScMaximize(0,0,0,0); // = glyphMaximize.GetOffset();
  3350. rc.right -= _rcOffsetScMaximize.right;
  3351. rc.top = rcCaption.top + _rcOffsetScMaximize.top + ( bZoomed ? _rcOffsetScMaximize.bottom : 0 );
  3352. rc.left = rc.right - _sizeScMaximize.cx;
  3353. rc.bottom = rc.top + _sizeScMaximize.cy;
  3354. if( bZoomed )
  3355. rc.OffsetRect( g_ptZoomedButtonOffset );
  3356. ::CopyRect( &rcMaximizeRestore, &rc );
  3357. rc.OffsetRect( -_sizeScMaximize.cx, 0 );
  3358. rcText.right = rcMaximizeRestore.left - __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3359. } // if( (dwWndStyle&WS_MAXIMIZEBOX) != 0 )
  3360. if( (dwWndStyle&WS_MINIMIZEBOX) != 0 )
  3361. {
  3362. //const CExtSkinGlyph & glyphMinimize = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Minimize")][strFrameActive].Glyph(_T("Normal"));
  3363. CSize _sizeScMinimize(m_nCaptionHeightActive-2,m_nCaptionHeightActive-3); // = glyphMinimize.GetSize();
  3364. _sizeScMinimize.cx = UiScalingDo( _sizeScMinimize.cx, __EUIST_Y );
  3365. _sizeScMinimize.cy = UiScalingDo( _sizeScMinimize.cy, __EUIST_Y );
  3366. CRect _rcOffsetScMinimize(0,0,0,0); // = glyphMinimize.GetOffset();
  3367. rc.right -= _rcOffsetScMinimize.right;
  3368. rc.top = rcCaption.top + _rcOffsetScMinimize.top + ( bZoomed ? _rcOffsetScMinimize.bottom : 0 );
  3369. rc.left = rc.right - _sizeScMinimize.cx;
  3370. rc.bottom = rc.top + _sizeScMinimize.cy;
  3371. if( bZoomed )
  3372. rc.OffsetRect( g_ptZoomedButtonOffset );
  3373. ::CopyRect( &rcMinimize, &rc );
  3374. rc.OffsetRect( -_sizeScMinimize.cx, 0 );
  3375. rcText.right = rcMinimize.left - __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3376. } // if( (dwWndStyle&WS_MINIMIZEBOX) != 0 )
  3377. if( (dwWndStyleEx&WS_EX_CONTEXTHELP) != 0 )
  3378. {
  3379. //const CExtSkinGlyph & glyphHelp = m_Skin[_T("Button")][_T("FrameNcButton")][_T("Help")][strFrameActive].Glyph(_T("Normal"));
  3380. CSize _sizeScHelp(m_nCaptionHeightActive-2,m_nCaptionHeightActive-3); // = glyphHelp.GetSize();
  3381. _sizeScHelp.cx = UiScalingDo( _sizeScHelp.cx, __EUIST_Y );
  3382. _sizeScHelp.cy = UiScalingDo( _sizeScHelp.cy, __EUIST_Y );
  3383. CRect _rcOffsetScHelp(0,0,0,0); // = glyphHelp.GetOffset();
  3384. rc.right -= _rcOffsetScHelp.right;
  3385. rc.top = rcCaption.top + _rcOffsetScHelp.top + ( bZoomed ? _rcOffsetScHelp.bottom : 0 );
  3386. rc.left = rc.right - _sizeScHelp.cx;
  3387. rc.bottom = rc.top + _sizeScHelp.cy;
  3388. if( bZoomed )
  3389. rc.OffsetRect( g_ptZoomedButtonOffset );
  3390. ::CopyRect( &rcHelp, &rc );
  3391. rcText.right = rcHelp.left - __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3392. } // if( (dwWndStyleEx&WS_EX_CONTEXTHELP) != 0 )
  3393. if( pIcon != NULL
  3394. && (! pIcon->IsEmpty() )
  3395. )
  3396. {
  3397. CSize _sizeIcon = pIcon->GetSize();
  3398. if( _sizeIcon.cx > 0 && _sizeIcon.cy > 0 )
  3399. {
  3400. _sizeIcon.cx = UiScalingDo( _sizeIcon.cx, __EUIST_Y );
  3401. _sizeIcon.cy = UiScalingDo( _sizeIcon.cy, __EUIST_Y );
  3402. int x = rcCaption.left + (bZoomed ? rcNcBorders.left : 0 );
  3403. int y = rcCaption.top + ( rcCaption.Height() - _sizeIcon.cy ) / 2;
  3404. ::SetRect(
  3405. &rcIcon,
  3406. x,
  3407. y,
  3408. x + _sizeIcon.cx,
  3409. y + _sizeIcon.cy
  3410. );
  3411. if( bZoomed )
  3412. ::OffsetRect(
  3413. &rcIcon,
  3414. g_ptZoomedIconAndTextOffset.x,
  3415. g_ptZoomedIconAndTextOffset.y
  3416. );
  3417. rcText.left = rcIcon.right + __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3418. } // if( _sizeIcon.cx > 0 && _sizeIcon.cy > 0 )
  3419. else
  3420. {
  3421. rcText.left += __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3422. if( bZoomed )
  3423. {
  3424. rcText.left += g_ptZoomedIconAndTextOffset.x;
  3425. //::OffsetRect( &rcText, 0, g_ptZoomedIconAndTextOffset.y );
  3426. rcText.top += g_ptZoomedIconAndTextOffset.y;
  3427. }
  3428. }
  3429. } // if( pIcon != NULL ...
  3430. else
  3431. {
  3432. rcText.left += __EXT_MFC_SKINNED_CAPTION_TEXT_GAP + (bZoomed ? rcNcBorders.left : 0 );
  3433. if( bZoomed )
  3434. {
  3435. rcText.left += g_ptZoomedIconAndTextOffset.x;
  3436. //::OffsetRect( &rcText, 0, g_ptZoomedIconAndTextOffset.y );
  3437. rcText.top += g_ptZoomedIconAndTextOffset.y;
  3438. }
  3439. }
  3440. } // if( (dwWndStyle&WS_SYSMENU) != 0 )
  3441. else
  3442. {
  3443. rcText.left += __EXT_MFC_SKINNED_CAPTION_TEXT_GAP + (bZoomed ? rcNcBorders.left : 0 );
  3444. rcText.right -= __EXT_MFC_SKINNED_CAPTION_TEXT_GAP;
  3445. if( bZoomed )
  3446. {
  3447. rcText.left += g_ptZoomedIconAndTextOffset.x;
  3448. //::OffsetRect( &rcText, 0, g_ptZoomedIconAndTextOffset.y );
  3449. rcText.top += g_ptZoomedIconAndTextOffset.y;
  3450. rcText.top += m_rcNcFrameBordersActive.top;
  3451. }
  3452. }
  3453. bool bRTL = ( (pWnd->GetExStyle()&WS_EX_LAYOUTRTL) != 0 ) ? true : false;
  3454. if( bRTL )
  3455. {
  3456. CRect rcWnd;
  3457. pWnd->GetWindowRect( &rcWnd );
  3458. rcWnd.OffsetRect( -rcWnd.TopLeft() );
  3459. ::SetRect(
  3460. &rcIcon,
  3461. rcWnd.right - 1 - rcIcon.right,
  3462. rcIcon.top,
  3463. rcWnd.right - 1 - rcIcon.left,
  3464. rcIcon.bottom
  3465. );
  3466. ::SetRect(
  3467. &rcText,
  3468. rcWnd.right - 1 - rcText.right,
  3469. rcText.top,
  3470. rcWnd.right - 1 - rcText.left,
  3471. rcText.bottom
  3472. );
  3473. ::SetRect(
  3474. &rcHelp,
  3475. rcWnd.right - 1 - rcHelp.right,
  3476. rcHelp.top,
  3477. rcWnd.right - 1 - rcHelp.left,
  3478. rcHelp.bottom
  3479. );
  3480. ::SetRect(
  3481. &rcMinimize,
  3482. rcWnd.right - 1 - rcMinimize.right,
  3483. rcMinimize.top,
  3484. rcWnd.right - 1 - rcMinimize.left,
  3485. rcMinimize.bottom
  3486. );
  3487. ::SetRect(
  3488. &rcMaximizeRestore,
  3489. rcWnd.right - 1 - rcMaximizeRestore.right,
  3490. rcMaximizeRestore.top,
  3491. rcWnd.right - 1 - rcMaximizeRestore.left,
  3492. rcMaximizeRestore.bottom
  3493. );
  3494. ::SetRect(
  3495. &rcClose,
  3496. rcWnd.right - 1 - rcClose.right,
  3497. rcClose.top,
  3498. rcWnd.right - 1 - rcClose.left,
  3499. rcClose.bottom
  3500. );
  3501. } // if( bRTL )
  3502. }
  3503. bool CExtPaintManagerOffice2007_Impl::OnQueryThemeColors(
  3504. COLORREF *pclrFillHint,
  3505. COLORREF *pclrAccentHint // = NULL
  3506. )
  3507. {
  3508. ASSERT_VALID( this );
  3509. if( pclrFillHint != NULL )
  3510. *pclrFillHint = m_clrFillHint;
  3511. if( pclrAccentHint != NULL )
  3512. *pclrAccentHint = m_clrAccentHint;
  3513. return true;
  3514. }
  3515. bool CExtPaintManagerOffice2007_Impl::OnQueryUseThemeColors() const
  3516. {
  3517. ASSERT_VALID( this );
  3518. if( IsHighContrast() )
  3519. return CExtPaintManagerXP::OnQueryUseThemeColors();
  3520. return true;
  3521. }
  3522. bool CExtPaintManagerOffice2007_Impl::PaintDocumentClientAreaBkgnd(
  3523. CDC & dc,
  3524. CWnd * pWnd,
  3525. LPARAM lParam // = NULL
  3526. )
  3527. {
  3528. ASSERT_VALID( this );
  3529. ASSERT( dc.GetSafeHdc() != NULL );
  3530. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  3531. if( IsHighContrast() )
  3532. return CExtPaintManagerXP::PaintDocumentClientAreaBkgnd( dc, pWnd, lParam );
  3533. bool bHaveBitmapDCA = false;
  3534. if( (! m_bmpDCA.IsEmpty() )
  3535. && m_clrDCA1 != COLORREF(-1L)
  3536. && m_clrDCA2 != COLORREF(-1L)
  3537. && m_clrDCA3 != COLORREF(-1L)
  3538. )
  3539. bHaveBitmapDCA = true;
  3540. if( bHaveBitmapDCA || m_clrDCA_Solid != COLORREF(-1L) )
  3541. {
  3542. CRect rcClient;
  3543. pWnd->GetClientRect( &rcClient );
  3544. if( dc.RectVisible( &rcClient ) )
  3545. {
  3546. if( bHaveBitmapDCA )
  3547. {
  3548. CRect rcPadding(0,0,0,0);
  3549. if( m_bDocumentClientAreaBkgndR2 )
  3550. { // R2 style
  3551. CSize _sizeBmpDCA = m_bmpDCA.GetSize();
  3552. rcPadding.left = _sizeBmpDCA.cx - 8;
  3553. CRect rcPaintGradient = rcClient;
  3554. CRect rcPaintBmp = rcClient;
  3555. rcPaintGradient.top = rcPaintBmp.bottom = rcPaintBmp.top + _sizeBmpDCA.cy;
  3556. if( dc.RectVisible( &rcPaintBmp ) )
  3557. m_bmpDCA.AlphaBlendSkinParts( dc.m_hDC, rcPaintBmp, rcPadding, CExtBitmap::__EDM_STRETCH, true, true );
  3558. if( rcPaintGradient.bottom > rcPaintGradient.top && dc.RectVisible( &rcPaintGradient ) )
  3559. stat_PaintGradientRect2steps( dc, rcPaintGradient, m_clrDCA1, m_clrDCA2, m_clrDCA3, true, 2, 3, 256 );
  3560. } // R2 style
  3561. else
  3562. { // R1 style
  3563. stat_PaintGradientRect2steps( dc, rcClient, m_clrDCA1, m_clrDCA2, m_clrDCA3, true, 2, 3, 256 );
  3564. m_bmpDCA.AlphaBlendSkinParts( dc.m_hDC, rcClient, rcPadding, CExtBitmap::__EDM_TILE, true, true );
  3565. } // R1 style
  3566. } // if( bHaveBitmapDCA )
  3567. else if( m_clrDCA_Solid != COLORREF(-1L) )
  3568. {
  3569. CRect rcClient;
  3570. pWnd->GetClientRect( &rcClient );
  3571. if( dc.RectVisible( &rcClient ) )
  3572. dc.FillSolidRect( &rcClient, m_clrDCA_Solid );
  3573. return true;
  3574. } // else if( m_clrDCA_Solid != COLORREF(-1L) )
  3575. } // if( dc.RectVisible( &rcClient ) )
  3576. return true;
  3577. } // if( bHaveBitmapDCA || m_clrDCA_Solid != COLORREF(-1L) )
  3578. return CExtPaintManagerOffice2003::PaintDocumentClientAreaBkgnd( dc, pWnd, lParam );
  3579. }
  3580. bool CExtPaintManagerOffice2010_Impl::PaintDocumentClientAreaBkgnd(
  3581. CDC & dc,
  3582. CWnd * pWnd,
  3583. LPARAM lParam // = NULL
  3584. )
  3585. {
  3586. ASSERT_VALID( this );
  3587. ASSERT( dc.GetSafeHdc() != NULL );
  3588. ASSERT( pWnd->GetSafeHwnd() != NULL && ::IsWindow(pWnd->GetSafeHwnd()) );
  3589. if( IsHighContrast() )
  3590. return CExtPaintManagerXP::PaintDocumentClientAreaBkgnd( dc, pWnd, lParam );
  3591. if( ! m_bmpDCA.IsEmpty() )
  3592. {
  3593. CRect rcClient;
  3594. pWnd->GetClientRect( &rcClient );
  3595. if( dc.RectVisible( &rcClient ) )
  3596. {
  3597. int nOldStretchBltMode = ::GetStretchBltMode( dc.m_hDC );
  3598. ::SetStretchBltMode( dc.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
  3599. m_bmpDCA.Draw( dc.m_hDC, rcClient );
  3600. ::SetStretchBltMode( dc.m_hDC, nOldStretchBltMode );
  3601. } // if( dc.RectVisible( &rcClient ) )
  3602. return true;
  3603. } // if( ! m_bmpDCA.IsEmpty() )
  3604. return CExtPaintManagerOffice2003::PaintDocumentClientAreaBkgnd( dc, pWnd, lParam );
  3605. }
  3606. bool CExtPaintManagerOffice2007_Impl::PaintDockerBkgnd(
  3607. bool bClientMapping,
  3608. CDC & dc,
  3609. const CRect &rcDst,
  3610. const CRect &rcWnd,
  3611. LPARAM lParam // = NULL
  3612. )
  3613. {
  3614. ASSERT_VALID( this );
  3615. ASSERT( dc.GetSafeHdc() != NULL );
  3616. if( IsHighContrast() )
  3617. return CExtPaintManagerXP::PaintDockerBkgnd( bClientMapping, dc, rcDst, rcWnd, lParam );
  3618. if( ! m_bUseNcFrameBmpForDockerBkgnd )
  3619. return CExtPaintManagerOffice2003::PaintDockerBkgnd( bClientMapping, dc, rcDst, rcWnd, lParam );
  3620. int nOldStretchBltMode = ::GetStretchBltMode( dc.m_hDC );
  3621. ::SetStretchBltMode( dc.m_hDC, ( g_PaintManager.m_bIsWinNT ) ? HALFTONE : COLORONCOLOR );
  3622. CSize _size = m_bmpNcFrameActive.GetSize();
  3623. CRect rcSrc(
  3624. m_rcNcFrameBordersActive.left,
  3625. m_rcNcFrameBordersActive.top + m_nCaptionHeightActive,
  3626. _size.cx - m_rcNcFrameBordersActive.right,
  3627. _size.cy - m_rcNcFrameBordersActive.bottom
  3628. );
  3629. if( g_PaintManager.m_bIsWin2000orLater )
  3630. {
  3631. if( m_bmpNcFrameActive.Draw( dc.m_hDC, rcDst, rcSrc ) == GDI_ERROR )
  3632. CExtPaintManagerOffice2003::PaintDockerBkgnd( bClientMapping, dc, rcDst, rcWnd, lParam );
  3633. }
  3634. else
  3635. {
  3636. if( m_bmpNcFrameActive.AlphaBlend( dc.m_hDC, rcDst.left, rcDst.top, rcDst.Width(), rcDst.Height(), rcSrc.left, rcSrc.top, rcSrc.Width(), rcSrc.Height() ) == GDI_ERROR )
  3637. CExtPaintManagerOffice2003::PaintDockerBkgnd( bClientMapping, dc, rcDst, rcWnd, lParam );
  3638. }
  3639. ::SetStretchBltMode( dc.m_hDC, nOldStretchBltMode );
  3640. return true;
  3641. }
  3642. void CExtPaintManagerOffice2007_Impl::PaintSeparator(
  3643. CDC & dc,
  3644. const RECT & rectItem,
  3645. bool bHorz,
  3646. bool bTransparentBk,
  3647. CObject * pHelperSrc,
  3648. LPARAM lParam // = 0L
  3649. )
  3650. {
  3651. ASSERT_VALID( this );
  3652. ASSERT( dc.GetSafeHdc() != NULL );
  3653. if( IsHighContrast() )
  3654. {
  3655. CExtPaintManagerXP::PaintSeparator(
  3656. dc,
  3657. rectItem,
  3658. bHorz,
  3659. bTransparentBk,
  3660. pHelperSrc,
  3661. lParam
  3662. );
  3663. return;
  3664. }
  3665. if( pHelperSrc == NULL
  3666. || (!( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtToolControlBar))
  3667. || pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtBarButton))
  3668. #ifndef __EXT_MFC_NO_STATUSBAR
  3669. || pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtStatusControlBar))
  3670. #endif // __EXT_MFC_NO_STATUSBAR
  3671. ))
  3672. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  3673. )
  3674. {
  3675. CExtPaintManagerXP::PaintSeparator(
  3676. dc,
  3677. rectItem,
  3678. bHorz,
  3679. bTransparentBk,
  3680. pHelperSrc,
  3681. lParam
  3682. );
  3683. return;
  3684. }
  3685. CRect rectItem2(rectItem);
  3686. if( !bTransparentBk )
  3687. dc.FillSolidRect(
  3688. rectItem2,
  3689. GetColor( CLR_3DFACE_OUT, pHelperSrc, lParam )
  3690. );
  3691. COLORREF clrBtnShadow = GetColor( _2003CLR_SEPARATOR_DARK, pHelperSrc, lParam );
  3692. COLORREF clrBtnHilight = GetColor( _2003CLR_SEPARATOR_LIGHT, pHelperSrc, lParam );
  3693. if( bHorz )
  3694. {
  3695. int x = (rectItem2.left + rectItem2.right) / 2;
  3696. rectItem2.left = x-1; rectItem2.right = x+1;
  3697. if( pHelperSrc == NULL
  3698. #ifndef __EXT_MFC_NO_STATUSBAR
  3699. || (! pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtStatusControlBar)) )
  3700. #endif // __EXT_MFC_NO_STATUSBAR
  3701. )
  3702. rectItem2.DeflateRect( 0, 1, 0, 1 );
  3703. dc.Draw3dRect(
  3704. rectItem2,
  3705. clrBtnShadow,
  3706. clrBtnHilight
  3707. );
  3708. } // if( bHorz )
  3709. else
  3710. {
  3711. int y = (rectItem2.top+rectItem2.bottom)/2;
  3712. rectItem2.top = y-1; rectItem2.bottom = y+1;
  3713. if( pHelperSrc == NULL
  3714. #ifndef __EXT_MFC_NO_STATUSBAR
  3715. || (! pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtStatusControlBar)) )
  3716. #endif // __EXT_MFC_NO_STATUSBAR
  3717. )
  3718. rectItem2.DeflateRect( 2, 0, 2, 0 );
  3719. dc.Draw3dRect(
  3720. rectItem2,
  3721. clrBtnShadow,
  3722. clrBtnHilight
  3723. );
  3724. } // else from if( bHorz )
  3725. }
  3726. COLORREF CExtPaintManagerOffice2007_R2_Obsidian::QueryObjectTextColor(
  3727. CDC & dc,
  3728. bool bEnabled,
  3729. bool bFocused,
  3730. bool bHovered,
  3731. bool bPressed,
  3732. CObject * pHelperSrc,
  3733. LPARAM lParam // = 0L
  3734. )
  3735. {
  3736. ASSERT_VALID( this );
  3737. if( IsHighContrast() )
  3738. return CExtPaintManagerXP::QueryObjectTextColor( dc, bEnabled, bFocused, bHovered, bPressed, pHelperSrc, lParam );
  3739. if( pHelperSrc != NULL )
  3740. {
  3741. if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtButton)) )
  3742. {
  3743. if( bEnabled )
  3744. {
  3745. if( bPressed )
  3746. {
  3747. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorPressed();
  3748. if( clr != COLORREF(-1L) )
  3749. return clr;
  3750. }
  3751. else if( bHovered )
  3752. {
  3753. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorHover();
  3754. if( clr != COLORREF(-1L) )
  3755. return clr;
  3756. }
  3757. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorNormal();
  3758. if( clr != COLORREF(-1L) )
  3759. return clr;
  3760. } // if( bEnabled )
  3761. else
  3762. {
  3763. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorDisabled();
  3764. if( clr != COLORREF(-1L) )
  3765. return clr;
  3766. } // else from if( bEnabled )
  3767. } // if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtButton)) )
  3768. else if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtGroupBox)) )
  3769. {
  3770. COLORREF clr = ((CExtGroupBox*)pHelperSrc)->GetTextColor( bEnabled );
  3771. if( clr != COLORREF(-1L) )
  3772. return clr;
  3773. }
  3774. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  3775. else if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtTabWnd)) )
  3776. {
  3777. if( bEnabled )
  3778. return COLORREF( -1L );
  3779. }
  3780. #endif // (!defined __EXT_MFC_NO_TAB_CTRL)
  3781. if( bEnabled )
  3782. return RGB(255,255,255);
  3783. else
  3784. return RGB(141,141,141);
  3785. }
  3786. return CExtPaintManagerOffice2007_Impl::QueryObjectTextColor( dc, bEnabled, bFocused, bHovered, bPressed, pHelperSrc, lParam );
  3787. }
  3788. COLORREF CExtPaintManagerOffice2010_R2_Black::QueryObjectTextColor(
  3789. CDC & dc,
  3790. bool bEnabled,
  3791. bool bFocused,
  3792. bool bHovered,
  3793. bool bPressed,
  3794. CObject * pHelperSrc,
  3795. LPARAM lParam // = 0L
  3796. )
  3797. {
  3798. ASSERT_VALID( this );
  3799. if( IsHighContrast() )
  3800. return CExtPaintManagerXP::QueryObjectTextColor( dc, bEnabled, bFocused, bHovered, bPressed, pHelperSrc, lParam );
  3801. if( pHelperSrc != NULL )
  3802. {
  3803. if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtButton)) )
  3804. {
  3805. if( bEnabled )
  3806. {
  3807. if( bPressed )
  3808. {
  3809. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorPressed();
  3810. if( clr != COLORREF(-1L) )
  3811. return clr;
  3812. }
  3813. else if( bHovered )
  3814. {
  3815. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorHover();
  3816. if( clr != COLORREF(-1L) )
  3817. return clr;
  3818. }
  3819. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorNormal();
  3820. if( clr != COLORREF(-1L) )
  3821. return clr;
  3822. } // if( bEnabled )
  3823. else
  3824. {
  3825. COLORREF clr = ((CExtButton*)pHelperSrc)->GetTextColorDisabled();
  3826. if( clr != COLORREF(-1L) )
  3827. return clr;
  3828. } // else from if( bEnabled )
  3829. } // if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtButton)) )
  3830. else if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtGroupBox)) )
  3831. {
  3832. COLORREF clr = ((CExtGroupBox*)pHelperSrc)->GetTextColor( bEnabled );
  3833. if( clr != COLORREF(-1L) )
  3834. return clr;
  3835. }
  3836. #if (!defined __EXT_MFC_NO_TAB_CTRL)
  3837. else if( pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtTabWnd)) )
  3838. {
  3839. if( bEnabled )
  3840. return COLORREF( -1L );
  3841. }
  3842. #endif // (!defined __EXT_MFC_NO_TAB_CTRL)
  3843. if( bEnabled )
  3844. return RGB(220,220,220);
  3845. else
  3846. return RGB(141,141,141);
  3847. }
  3848. return CExtPaintManagerOffice2007_Impl::QueryObjectTextColor( dc, bEnabled, bFocused, bHovered, bPressed, pHelperSrc, lParam );
  3849. }
  3850. void CExtPaintManagerOffice2007_Impl::PaintGripper(
  3851. CDC & dc,
  3852. CExtPaintManager::PAINTGRIPPERDATA & _pgd
  3853. )
  3854. {
  3855. ASSERT_VALID( this );
  3856. ASSERT( dc.GetSafeHdc() != NULL );
  3857. if( IsHighContrast() )
  3858. {
  3859. CExtPaintManagerXP::PaintGripper(
  3860. dc,
  3861. _pgd
  3862. );
  3863. return;
  3864. }
  3865. if( (! ( _pgd.m_bSideBar || _pgd.m_bFloating ) )
  3866. || _pgd.m_pHelperSrc == NULL
  3867. || (!(
  3868. _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtControlBar))
  3869. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  3870. || _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtDynAutoHideSlider))
  3871. #endif
  3872. || _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtMiniDockFrameWnd))
  3873. ))
  3874. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  3875. )
  3876. {
  3877. CExtPaintManagerOffice2003::PaintGripper( dc, _pgd );
  3878. return;
  3879. }
  3880. if( _pgd.m_pHelperSrc->IsKindOf(RUNTIME_CLASS(CExtMiniDockFrameWnd)) )
  3881. {
  3882. CExtControlBar * pBar = ((CExtMiniDockFrameWnd*)_pgd.m_pHelperSrc)->GetControlBarExt();
  3883. if( pBar == NULL )
  3884. {
  3885. CExtPaintManagerOffice2003::PaintGripper( dc, _pgd );
  3886. return;
  3887. }
  3888. #if (!defined __EXT_MFC_NO_TAB_CONTROLBARS)
  3889. #ifdef __FREIWALD_ORIGINAL__
  3890. #else
  3891. if ((pBar != NULL) && (!pBar->IsKindOf(RUNTIME_CLASS(CExtDynTabControlBar))))
  3892. #endif
  3893. #endif
  3894. if( pBar->IsFixedMode()
  3895. || pBar->IsKindOf( RUNTIME_CLASS(CExtDynControlBar) )
  3896. )
  3897. {
  3898. _pgd.m_bFloating = true;
  3899. _pgd.m_bSideBar = false;
  3900. _pgd.m_bActive = false;
  3901. }
  3902. }
  3903. CRect rectGripper2( _pgd.m_rcGripper );
  3904. if( _pgd.m_bFlashCaptionHighlightedState )
  3905. {
  3906. ASSERT( _pgd.m_clrFlashCaptionBackground != COLORREF(-1L) );
  3907. ASSERT( _pgd.m_clrFlashCaptionText != COLORREF(-1L) );
  3908. dc.FillSolidRect(
  3909. rectGripper2,
  3910. _pgd.m_clrFlashCaptionBackground
  3911. );
  3912. } // if( _pgd.m_bFlashCaptionHighlightedState )
  3913. else if( ! _pgd.m_bHelperNoFill )
  3914. {
  3915. if( _pgd.m_bFloating 
  3916. && (!_pgd.m_bSideBar) 
  3917. && m_clrFloatingToolbarGripperSolid != COLORREF(-1L) 
  3918. )
  3919. {
  3920. dc.FillSolidRect( &rectGripper2, m_clrFloatingToolbarGripperSolid );
  3921. }
  3922. else
  3923. {
  3924. if( _pgd.m_bActive )
  3925. stat_PaintGradientRect(
  3926. dc,
  3927. &rectGripper2,
  3928. GetColor( _2003CLR_BTN_HP_LEFT, _pgd.m_pHelperSrc, _pgd.m_lParam ),
  3929. GetColor( _2003CLR_BTN_HP_RIGHT, _pgd.m_pHelperSrc, _pgd.m_lParam ),
  3930. (!_pgd.m_bHorz)
  3931. );
  3932. else
  3933. OnPaintToolBarGradient( dc, rectGripper2, (!_pgd.m_bHorz), _pgd.m_pHelperSrc, _pgd.m_lParam );
  3934. }
  3935. }
  3936. int nTextLen = 0;
  3937. if( _pgd.m_sCaption != NULL
  3938. && ( nTextLen = int(_tcslen(_pgd.m_sCaption)) ) > 0
  3939. && (! _pgd.m_rcText.IsRectEmpty() )
  3940. && _pgd.m_rcText.right > _pgd.m_rcText.left
  3941. && _pgd.m_rcText.bottom > _pgd.m_rcText.top
  3942. )
  3943. {
  3944. COLORREF clrText =
  3945. _pgd.m_bFlashCaptionHighlightedState
  3946. ? _pgd.m_clrFlashCaptionText
  3947. : (
  3948. _pgd.m_bSideBar
  3949. ? ( _pgd.m_bActive
  3950. ? m_clrDockingFrameCaptionTextActive
  3951. : m_clrDockingFrameCaptionTextInactive
  3952. )
  3953. : m_clrDockingFrameCaptionTextFloatingFixed
  3954. )
  3955. ;
  3956. COLORREF clrOldText = dc.SetTextColor( clrText );
  3957. int nOldBkMode = dc.SetBkMode( TRANSPARENT );
  3958. CFont * pCurrFont =
  3959. (! _pgd.m_bHorz)
  3960. ? &m_FontBoldBC
  3961. : &m_FontBoldVertXBC;
  3962. CFont * pOldFont =
  3963. dc.SelectObject( pCurrFont );
  3964. ASSERT( pOldFont != NULL );
  3965. if( !_pgd.m_bHorz )
  3966. { // if text is horizontal
  3967. bool bFloatingFixedBar = false;
  3968. UINT nDtAlign = _pgd.m_bForceRTL ? DT_RIGHT : DT_LEFT;
  3969. if( _pgd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) ) )
  3970. {
  3971. CExtControlBar * pBar = 
  3972. ((CExtMiniDockFrameWnd *)_pgd.m_pHelperSrc)->GetControlBarExt();
  3973. if( pBar != NULL 
  3974. && pBar->IsFixedMode()
  3975. )
  3976. bFloatingFixedBar = true;
  3977. }
  3978. if( bFloatingFixedBar )
  3979. {
  3980. CExtSafeString sCaption( _pgd.m_sCaption );
  3981. INT nAvailableWidth = _pgd.m_rcText.Width();
  3982. for(;;) 
  3983. {
  3984. INT nWidth =
  3985. stat_CalcTextWidth( 
  3986. dc,
  3987. *pCurrFont,
  3988. sCaption
  3989. );
  3990. if( nAvailableWidth >= nWidth 
  3991. || sCaption.IsEmpty()
  3992. )
  3993. break;
  3994. sCaption.Delete( sCaption.GetLength() - 1 );
  3995. if( sCaption.GetLength() > 0 )
  3996. dc.DrawText(
  3997. sCaption,
  3998. sCaption.GetLength(),
  3999. (LPRECT)&_pgd.m_rcText,
  4000. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_NOCLIP
  4001. );
  4002. } // if( bFloatingFixedBar )
  4003. else
  4004. {
  4005. dc.DrawText(
  4006. _pgd.m_sCaption,
  4007. nTextLen,
  4008. (LPRECT)&_pgd.m_rcText,
  4009. nDtAlign|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS
  4010. );
  4011. } // else if( bFloatingFixedBar )
  4012. } // if text is horizontal
  4013. else
  4014. { // if text is vertical
  4015. LOGFONT lf;
  4016. ::memset(&lf,0,sizeof(LOGFONT));
  4017. pCurrFont->GetLogFont(&lf);
  4018. int _cyHorzFont = abs(lf.lfHeight);
  4019. int _cyTextMargin =
  4020. (_pgd.m_rcText.Width() - _cyHorzFont)  / 2
  4021. ;
  4022. CRect rcString = 
  4023. CRect(
  4024. CPoint(
  4025. _pgd.m_rcText.left + _cyTextMargin - __ExtMfc_CXTEXTMARGIN,
  4026. _pgd.m_rcText.bottom - __ExtMfc_CYTEXTMARGIN
  4027. ),
  4028. _pgd.m_rcText.Size() //m_sizeHorz
  4029. );
  4030. rcString.DeflateRect(2,2);
  4031. CRect rcExclude;
  4032. rcExclude.SetRect(
  4033. _pgd.m_rcGripper.left,
  4034. _pgd.m_rcGripper.top,
  4035. _pgd.m_rcGripper.right,
  4036. _pgd.m_rcText.top
  4037. );
  4038. dc.ExcludeClipRect( &rcExclude );
  4039. rcString.OffsetRect( -2, -3 );
  4040. dc.DrawText(
  4041. _pgd.m_sCaption,
  4042. nTextLen,
  4043. rcString,
  4044. DT_SINGLELINE //|DT_CENTER|DT_VCENTER
  4045. |DT_NOCLIP |DT_NOPREFIX
  4046. ); // don't forget DT_NOCLIP
  4047. //dc.IntersectClipRect( &rectGripper );
  4048. dc.SelectClipRgn(NULL);
  4049. } // if text is vertical
  4050. dc.SelectObject( pOldFont );
  4051. dc.SetBkMode(nOldBkMode);
  4052. dc.SetTextColor(clrOldText);
  4053. }
  4054. }
  4055. void CExtPaintManagerOffice2007_Impl::PaintDockingFrame(
  4056. CDC & dc,
  4057. CExtPaintManager::PAINTDOCKINGFRAMEDATA & _pdfd
  4058. )
  4059. {
  4060. ASSERT_VALID( this );
  4061. ASSERT( dc.GetSafeHdc() != NULL );
  4062. if( _pdfd.m_rcWindow.IsRectEmpty() )
  4063. return;
  4064. if( IsHighContrast() )
  4065. {
  4066. CExtPaintManagerXP::PaintDockingFrame(
  4067. dc,
  4068. _pdfd
  4069. );
  4070. return;
  4071. }
  4072. if( _pdfd.m_pHelperSrc == NULL
  4073. || (! ( ( _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtControlBar) )
  4074. && (! ((CExtControlBar*)_pdfd.m_pHelperSrc)->IsFixedMode() )
  4075. )
  4076. || _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtMiniDockFrameWnd) )
  4077. )
  4078. )
  4079. || ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8
  4080. )
  4081. {
  4082. CExtPaintManagerOffice2003::PaintDockingFrame(
  4083. dc,
  4084. _pdfd
  4085. );
  4086. return;
  4087. }
  4088. dc.ExcludeClipRect( _pdfd.m_rcClient );
  4089. CRect rcWnd( _pdfd.m_rcWindow );
  4090. COLORREF clr3dFace = GetColor( COLOR_3DFACE, _pdfd.m_pHelperSrc, _pdfd.m_lParam );
  4091. COLORREF clrDark = m_clrDockingFrameDark;
  4092. COLORREF clrBkOld = dc.GetBkColor();
  4093. COLORREF clrBkNew =
  4094. GetColor(
  4095. ( _pdfd.m_bFloating )
  4096. ? ( _pdfd.m_bExtBar
  4097. ? XPCLR_3DFACE_FLOAT_R
  4098. : XPCLR_3DFACE_FLOAT_F
  4099. )
  4100. : CLR_3DFACE_OUT
  4101. ,
  4102. _pdfd.m_pHelperSrc,
  4103. _pdfd.m_lParam 
  4104. );
  4105. if( _pdfd.m_bFloating )
  4106. {
  4107. dc.Draw3dRect( &rcWnd, clrDark, clrDark);
  4108. rcWnd.DeflateRect(1,1);
  4109. dc.Draw3dRect( &rcWnd, clrDark, clrDark);
  4110. rcWnd.DeflateRect(1,1);
  4111. dc.Draw3dRect( &rcWnd, clrBkNew, clrBkNew);
  4112. rcWnd.DeflateRect(0,0,1,1);
  4113. dc.SetPixel( rcWnd.left, rcWnd.top, clrDark );
  4114. dc.SetPixel( rcWnd.left, rcWnd.bottom, clrDark );
  4115. dc.SetPixel( rcWnd.right, rcWnd.top, clrDark );
  4116. dc.SetPixel( rcWnd.right, rcWnd.bottom, clrDark );
  4117. } // if( _pdfd.m_bFloating )
  4118. else
  4119. {
  4120. if( _pdfd.m_pHelperSrc != NULL
  4121. && _pdfd.m_pHelperSrc->IsKindOf( RUNTIME_CLASS(CExtToolControlBar) )
  4122. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_pDockSite != NULL )
  4123. && ( ((CExtToolControlBar*)_pdfd.m_pHelperSrc)->m_bForceNoBalloonWhenRedockable )
  4124. )
  4125. return;
  4126. dc.FillSolidRect( &rcWnd, clrBkNew );
  4127. if( ! _pdfd.m_bExtBar )
  4128. dc.Draw3dRect( &rcWnd, clr3dFace, clr3dFace);
  4129. if( !_pdfd.m_bSideBar && ::GetDeviceCaps( dc.m_hDC, BITSPIXEL ) <= 8 )
  4130. {
  4131. static WORD hatchBits[8] =
  4132. {
  4133. 0xAA,
  4134. 0x55,
  4135. 0xAA,
  4136. 0x55,
  4137. 0xAA,
  4138. 0x55,
  4139. 0xAA,