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

界面编程

开发平台:

Visual C++

  1. // This is part of the Professional User Interface Suite library.
  2. // Copyright (C) 2001-2009 FOSS Software, Inc.
  3. // All rights reserved.
  4. //
  5. // http://www.prof-uis.com
  6. // mailto:support@prof-uis.com
  7. //
  8. // This source code can be used, modified and redistributed
  9. // under the terms of the license agreement that is included
  10. // in the Professional User Interface Suite package.
  11. //
  12. // Warranties and Disclaimers:
  13. // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
  14. // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  16. // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
  17. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
  18. // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
  19. // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
  20. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  21. #include "stdafx.h"
  22. #if (!defined __EXT_EXTCONTENTEXPANDWND_H)
  23. #include <ExtContentExpandWnd.h>
  24. #endif
  25. #if (!defined __EXT_PAINT_MANAGER_H)
  26. #include <ExtPaintManager.h>
  27. #endif
  28. #if (!defined __EXT_MEMORY_DC_H)
  29. #include <../Src/ExtMemoryDC.h>
  30. #endif
  31. #ifdef _DEBUG
  32. #define new DEBUG_NEW
  33. #undef THIS_FILE
  34. static char THIS_FILE[] = __FILE__;
  35. #endif
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CExtContentExpandWnd
  38. UINT CExtContentExpandWnd::g_nMsgPaintItemContent =
  39. ::RegisterWindowMessage(
  40. _T("CExtContentExpandWnd::g_nMsgPaintItemContent")
  41. );
  42. IMPLEMENT_DYNCREATE( CExtContentExpandWnd, CWnd );
  43. IMPLEMENT_CExtPmBridge_MEMBERS( CExtContentExpandWnd );
  44. CExtContentExpandWnd::CExtContentExpandWnd()
  45. {
  46. _InitMembers();
  47. VERIFY( RegisterContentExpandWndClass() );
  48. PmBridge_Install();
  49. }
  50. CExtContentExpandWnd::~CExtContentExpandWnd()
  51. {
  52. PmBridge_Uninstall();
  53. }
  54. void CExtContentExpandWnd::_InitMembers()
  55. {
  56. m_hFont = NULL;
  57. m_pRODT = NULL;
  58. m_bDirectCreateCall = false;
  59. m_bVerticalMode = false;
  60. m_rcWnd.SetRectEmpty();
  61. m_rcItem.SetRectEmpty();
  62. m_pWndNotify = NULL;
  63. m_dwActivateFlags = __ECWAF_DEFAULT;
  64. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  65. {
  66. m_rgnHelperAreas.DeleteObject();
  67. ASSERT( m_rgnHelperAreas.GetSafeHandle() == NULL );
  68. }
  69. if( m_rgnWindow.GetSafeHandle() != NULL )
  70. {
  71. m_rgnWindow.DeleteObject();
  72. ASSERT( m_rgnWindow.GetSafeHandle() == NULL );
  73. }
  74. if( m_rgnItem.GetSafeHandle() != NULL )
  75. {
  76. m_rgnItem.DeleteObject();
  77. ASSERT( m_rgnItem.GetSafeHandle() == NULL );
  78. }
  79. if( m_brHelperAreas.GetSafeHandle() != NULL )
  80. {
  81. m_brHelperAreas.DeleteObject();
  82. ASSERT( m_brHelperAreas.GetSafeHandle() == NULL );
  83. }
  84. }
  85. BEGIN_MESSAGE_MAP(CExtContentExpandWnd, CWnd)
  86. //{{AFX_MSG_MAP(CExtContentExpandWnd)
  87. ON_WM_NCCALCSIZE()
  88. ON_WM_ERASEBKGND()
  89. ON_WM_PAINT()
  90. ON_MESSAGE(WM_SETFONT, OnSetFont)
  91. ON_MESSAGE(WM_GETFONT, OnGetFont)
  92. //}}AFX_MSG_MAP
  93. __EXT_MFC_ON_WM_NCHITTEST()
  94. END_MESSAGE_MAP()
  95.  
  96. LRESULT CExtContentExpandWnd::OnSetFont( WPARAM wParam, LPARAM lParam )
  97. {
  98. ASSERT_VALID( this );
  99. HFONT hFont = (HFONT) wParam;
  100. BOOL bRedraw = (BOOL) lParam;
  101. m_hFont = hFont; 
  102.     if( bRedraw )
  103.         Invalidate();
  104. return 0L;
  105. }
  106.   
  107. LRESULT CExtContentExpandWnd::OnGetFont( WPARAM, LPARAM )
  108. {
  109. ASSERT_VALID( this );
  110.     return (LRESULT) m_hFont;
  111. }
  112. bool CExtContentExpandWnd::Activate(
  113. const RECT & rcItem,
  114. CWnd * pWndNotify,
  115. DWORD dwActivateFlags, // = __ECWAF_DEFAULT
  116. COleDropTarget * pODT, // = NULL
  117. CWnd * pWndOtherForODT // = NULL
  118. )
  119. {
  120. /*
  121. dwActivateFlags =
  122. __ECWAF_DEFAULT
  123. | __ECWAF_DRAW_RED_ARROWS
  124. | __ECWAF_DRAW_RED_DOTS
  125. ;
  126. */
  127. /*
  128. dwActivateFlags &= ~__ECWAF_DRAW_ITEM;
  129. RECT & rcItemXX = (RECT &)rcItem;
  130. rcItemXX.right = rcItemXX.left;
  131. //rcItemXX.bottom = rcItemXX.top;
  132. */
  133. ASSERT( (dwActivateFlags & __ECWAF_DRAW_ANY) != 0 );
  134. if( !RegisterContentExpandWndClass() )
  135. {
  136. ASSERT( FALSE );
  137. return false;
  138. }
  139. if( m_pWndNotify != NULL )
  140. {
  141. Deactivate();
  142. }
  143. ASSERT( m_pWndNotify == NULL );
  144. m_pWndNotify = pWndNotify;
  145. ASSERT( m_pWndNotify != NULL );
  146. ASSERT( m_pWndNotify->GetSafeHwnd() != NULL );
  147. ASSERT( ::IsWindow(m_pWndNotify->GetSafeHwnd()) );
  148. m_dwActivateFlags = dwActivateFlags;
  149. m_bDirectCreateCall = true;
  150. m_rcWnd = rcItem;
  151. m_pWndNotify->ClientToScreen( &m_rcWnd );
  152. RecalcLayout();
  153. //ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  154. ASSERT( m_rgnWindow.GetSafeHandle() != NULL );
  155. //ASSERT( m_rgnItem.GetSafeHandle() != NULL );
  156. if( ! CWnd::CreateEx(
  157. WS_EX_TOPMOST
  158. | ( (m_dwActivateFlags&__ECWAF_TRANSPARENT_WND)
  159. ? WS_EX_TRANSPARENT
  160. : 0
  161. )
  162. , //|WS_EX_NOPARENTNOTIFY
  163. __EXT_CONTENTEXPANDWND_CLASS_NAME,
  164. NULL,
  165. WS_POPUP,
  166. m_rcWnd.left, m_rcWnd.top,
  167. m_rcWnd.Width(), m_rcWnd.Height(),
  168. m_pWndNotify->GetSafeHwnd(),
  169. (HMENU)NULL,
  170. (LPVOID)NULL
  171. )
  172. )
  173. {
  174. ASSERT( FALSE );
  175. Deactivate();
  176. return false;
  177. }
  178. if( !_CreateHelper() )
  179. {
  180. ASSERT( FALSE );
  181. Deactivate();
  182. AfxThrowMemoryException();
  183. }
  184. ASSERT( m_pRODT == NULL );
  185. if( pODT != NULL )
  186. {
  187. m_pRODT =
  188. new CExtRedirectOleDropTarget(
  189. pODT,
  190. pWndOtherForODT, //m_pWndNotify,
  191. this
  192. );
  193. }
  194. ::SetWindowPos(
  195. GetSafeHwnd(),
  196. HWND_TOP,
  197. -1, -1, -1, -1,
  198. SWP_NOACTIVATE
  199. |SWP_NOMOVE|SWP_NOSIZE
  200. |SWP_SHOWWINDOW
  201. //|SWP_NOREDRAW //|SWP_NOSENDCHANGING
  202. |SWP_NOZORDER //|SWP_NOOWNERZORDER
  203. //|SWP_NOCOPYBITS
  204. );
  205. if( (m_dwActivateFlags&__ECWAF_NO_CAPTURE) == 0 )
  206. CExtMouseCaptureSink::SetCapture( GetSafeHwnd() );
  207. return true;
  208. }
  209. void CExtContentExpandWnd::Deactivate()
  210. {
  211. if( GetSafeHwnd() != NULL )
  212. {
  213. ASSERT( ::IsWindow(GetSafeHwnd()) );
  214. //HWND hWndPostInvalidate = NULL;
  215. if( m_dwActivateFlags & __ECWAF_POST_INVALIDATE )
  216. {
  217. HWND hWndPostInvalidate = m_pWndNotify->GetSafeHwnd();
  218. if( ::IsWindow(hWndPostInvalidate) )
  219. ::InvalidateRect(hWndPostInvalidate,NULL,TRUE);
  220. }
  221. // if( GetStyle() & WS_VISIBLE )
  222. // ShowWindow( SW_HIDE );
  223. if( CExtMouseCaptureSink::GetCapture() == GetSafeHwnd() )
  224. CExtMouseCaptureSink::ReleaseCapture();
  225. _FlushOleRedir();
  226. DestroyWindow();
  227. // if( hWndPostInvalidate != NULL
  228. // && ::IsWindow(hWndPostInvalidate)
  229. // )
  230. // {
  231. // ::InvalidateRect(hWndPostInvalidate,NULL,TRUE);
  232. // ::UpdateWindow(hWndPostInvalidate);
  233. // }
  234. } // if( GetSafeHwnd() != NULL )
  235. _InitMembers();
  236. }
  237. void CExtContentExpandWnd::_FlushOleRedir()
  238. {
  239. ASSERT_VALID( this );
  240. if( m_pRODT == NULL )
  241. return;
  242. m_pRODT->Revoke();
  243. delete m_pRODT;
  244. m_pRODT = NULL;
  245. }
  246. bool CExtContentExpandWnd::g_bContentExpandWndClassRegistered = false;
  247. bool CExtContentExpandWnd::RegisterContentExpandWndClass()
  248. {
  249. if( g_bContentExpandWndClassRegistered )
  250. return true;
  251. WNDCLASS _wndClassInfo;
  252. HINSTANCE hInst = ::AfxGetInstanceHandle();
  253. if( ! ::GetClassInfo( hInst, __EXT_CONTENTEXPANDWND_CLASS_NAME, &_wndClassInfo ) )
  254. {
  255. _wndClassInfo.style = CS_GLOBALCLASS|CS_DBLCLKS|CS_SAVEBITS;
  256. _wndClassInfo.lpfnWndProc = ::DefWindowProc;
  257. _wndClassInfo.cbClsExtra = _wndClassInfo.cbWndExtra = 0;
  258. _wndClassInfo.hInstance = hInst;
  259. _wndClassInfo.hIcon = NULL;
  260. _wndClassInfo.hCursor = ::LoadCursor( NULL, IDC_ARROW );
  261. ASSERT( _wndClassInfo.hCursor != NULL );
  262. _wndClassInfo.hbrBackground = NULL; 
  263. _wndClassInfo.lpszMenuName = NULL;
  264. _wndClassInfo.lpszClassName = __EXT_CONTENTEXPANDWND_CLASS_NAME;
  265. if( !::AfxRegisterClass( &_wndClassInfo ) )
  266. {
  267. ASSERT( FALSE );
  268. //AfxThrowResourceException();
  269. return false;
  270. }
  271. }
  272. g_bContentExpandWndClassRegistered = true;
  273. return true;
  274. }
  275. bool CExtContentExpandWnd::_CreateHelper()
  276. {
  277. ASSERT( m_rgnWindow.GetSafeHandle() != NULL );
  278. SetWindowRgn( (HRGN)m_rgnWindow.GetSafeHandle(), FALSE );
  279. return true;
  280. }
  281. void CExtContentExpandWnd::RecalcLayout()
  282. {
  283. ASSERT( (m_dwActivateFlags & __ECWAF_DRAW_ANY) != 0 );
  284. m_rcItem = m_rcWnd;
  285. m_rcItem.OffsetRect( -m_rcItem.TopLeft() );
  286. ASSERT( m_rgnHelperAreas.GetSafeHandle() == NULL );
  287. ASSERT( m_rgnWindow.GetSafeHandle() == NULL );
  288. ASSERT( m_rgnItem.GetSafeHandle() == NULL );
  289. m_bVerticalMode = false;
  290. const int nDotRgnOffsetDX = 1+1;
  291. const int nDotRgnOffsetDY = 1+1;
  292. const int nDotRadius = 2;
  293. const int nDotStepDelta = 8;
  294. if( m_dwActivateFlags & __ECWAF_DRAW_ITEM )
  295. { // if draw used-defined item
  296. if( m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS )
  297. { // if draw red arrows around item
  298. const int nDiagonalRgnOffsetDX =
  299. 12 // 9 + 1
  300. ;
  301. const int nDiagonalRgnOffsetDY =
  302. 12 // 9 + 1
  303. ;
  304. m_rcWnd.InflateRect(
  305. nDiagonalRgnOffsetDX,
  306. nDiagonalRgnOffsetDY
  307. );
  308. m_rcItem.OffsetRect(
  309. nDiagonalRgnOffsetDX,
  310. nDiagonalRgnOffsetDY
  311. );
  312. // static POINT vArrowTL[] =
  313. // {
  314. // { 3, 0 },
  315. // { 6, 3 },
  316. // { 8, 1 },
  317. // { 8, 8 },
  318. // { 1, 8 },
  319. // { 3, 6 },
  320. // { 0, 3 },
  321. // };
  322. // CRgn rgnArrowTL;
  323. // VERIFY(
  324. // rgnArrowTL.CreatePolygonRgn(
  325. // vArrowTL,
  326. // sizeof(vArrowTL) / sizeof(vArrowTL[0]),
  327. // ALTERNATE
  328. // )
  329. // );
  330. CRgn rgnArrowTL;
  331. CExtPaintManager::g_DockingCaptionGlyphs[
  332. CExtPaintManager::__DCBT_ARROW_PT_RB
  333. ] -> GenerateRgn( rgnArrowTL );
  334. ASSERT( rgnArrowTL.GetSafeHandle() != NULL );
  335. // static POINT vArrowTR[] =
  336. // {
  337. // { 8, 3 },
  338. // { 5, 6 },
  339. // { 7, 8 },
  340. // { 0, 8 },
  341. // { 0, 1 },
  342. // { 2, 3 },
  343. // { 5, 0 },
  344. // };
  345. // CRgn rgnArrowTR;
  346. // VERIFY(
  347. // rgnArrowTR.CreatePolygonRgn(
  348. // vArrowTR,
  349. // sizeof(vArrowTR) / sizeof(vArrowTR[0]),
  350. // ALTERNATE
  351. // )
  352. // );
  353. // rgnArrowTR.OffsetRgn(
  354. // m_rcWnd.Width() - nDiagonalRgnOffsetDX, //m_rcItem.Width() + nDiagonalRgnOffsetDX,
  355. // 0
  356. // );
  357. CRgn rgnArrowTR;
  358. CExtPaintManager::g_DockingCaptionGlyphs[
  359. CExtPaintManager::__DCBT_ARROW_PT_LB
  360. ] -> GenerateRgn( rgnArrowTR );
  361. ASSERT( rgnArrowTR.GetSafeHandle() != NULL );
  362. rgnArrowTR.OffsetRgn(
  363. m_rcWnd.Width() - nDiagonalRgnOffsetDX,
  364. 0
  365. );
  366. // static POINT vArrowBL[] =
  367. // {
  368. // { 0, 5 },
  369. // { 3, 2 },
  370. // { 1, 0 },
  371. // { 8, 0 },
  372. // { 8, 7 },
  373. // { 6, 5 },
  374. // { 3, 8 },
  375. // };
  376. // CRgn rgnArrowBL;
  377. // VERIFY(
  378. // rgnArrowBL.CreatePolygonRgn(
  379. // vArrowBL,
  380. // sizeof(vArrowBL) / sizeof(vArrowBL[0]),
  381. // ALTERNATE
  382. // )
  383. // );
  384. // rgnArrowBL.OffsetRgn(
  385. // 0,
  386. // m_rcWnd.Height() - nDiagonalRgnOffsetDY // m_rcItem.Height() + nDiagonalRgnOffsetDY
  387. // );
  388. CRgn rgnArrowBL;
  389. CExtPaintManager::g_DockingCaptionGlyphs[
  390. CExtPaintManager::__DCBT_ARROW_PT_RT
  391. ] -> GenerateRgn( rgnArrowBL );
  392. ASSERT( rgnArrowBL.GetSafeHandle() != NULL );
  393. rgnArrowBL.OffsetRgn(
  394. 0,
  395. m_rcWnd.Height() - nDiagonalRgnOffsetDY
  396. );
  397. // static POINT vArrowBR[] =
  398. // {
  399. // { 5, 8 },
  400. // { 2, 5 },
  401. // { 0, 7 },
  402. // { 0, 0 },
  403. // { 7, 0 },
  404. // { 5, 2 },
  405. // { 8, 5 },
  406. // };
  407. // CRgn rgnArrowBR;
  408. // VERIFY(
  409. // rgnArrowBR.CreatePolygonRgn(
  410. // vArrowBR,
  411. // sizeof(vArrowBR) / sizeof(vArrowBR[0]),
  412. // ALTERNATE
  413. // )
  414. // );
  415. // rgnArrowBR.OffsetRgn(
  416. // m_rcWnd.Width() - nDiagonalRgnOffsetDX, // m_rcItem.Width() + nDiagonalRgnOffsetDX,
  417. // m_rcWnd.Height() - nDiagonalRgnOffsetDY // m_rcItem.Height() + nDiagonalRgnOffsetDY
  418. // );
  419. CRgn rgnArrowBR;
  420. CExtPaintManager::g_DockingCaptionGlyphs[
  421. CExtPaintManager::__DCBT_ARROW_PT_LT
  422. ] -> GenerateRgn( rgnArrowBR );
  423. ASSERT( rgnArrowBR.GetSafeHandle() != NULL );
  424. rgnArrowBR.OffsetRgn(
  425. m_rcWnd.Width() - nDiagonalRgnOffsetDX,
  426. m_rcWnd.Height() - nDiagonalRgnOffsetDY
  427. );
  428. CRect rcHelperAreas( m_rcWnd );
  429. rcHelperAreas.OffsetRect( -rcHelperAreas.TopLeft() );
  430. VERIFY(
  431. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  432. );
  433. CRgn rgnTmp1, rgnTmp2;
  434. VERIFY(
  435. rgnTmp1.CreateRectRgnIndirect( &rcHelperAreas )
  436. );
  437. VERIFY(
  438. rgnTmp2.CreateRectRgnIndirect( &rcHelperAreas )
  439. );
  440. rgnTmp1.CombineRgn(
  441. &rgnArrowTL,
  442. &rgnArrowTR,
  443. RGN_OR
  444. );
  445. ASSERT( rgnTmp1.GetSafeHandle() != NULL );
  446. rgnTmp2.CombineRgn(
  447. &rgnArrowBL,
  448. &rgnArrowBR,
  449. RGN_OR
  450. );
  451. ASSERT( rgnTmp2.GetSafeHandle() != NULL );
  452. m_rgnHelperAreas.CombineRgn(
  453. &rgnTmp1,
  454. &rgnTmp2,
  455. RGN_OR
  456. );
  457. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  458. } // if draw red arrows around item
  459. if( m_dwActivateFlags & __ECWAF_DRAW_RED_DOTS )
  460. { // if draw red dots around item
  461. if( (m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS) == 0 )
  462. {
  463. m_rcWnd.InflateRect(
  464. nDotRgnOffsetDX,
  465. nDotRgnOffsetDY
  466. );
  467. m_rcItem.OffsetRect(
  468. nDotRgnOffsetDX,
  469. nDotRgnOffsetDY
  470. );
  471. } // if( (m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS) == 0 )
  472. CSize sizeItem = m_rcItem.Size();
  473. CRect rcHelperDots( 0, 0, 0, 0 );
  474. CRgn rgnHelperDots;
  475. VERIFY(
  476. rgnHelperDots.CreateRectRgnIndirect( &rcHelperDots )
  477. );
  478. LONG nDistance = (sizeItem.cx + sizeItem.cy) * 2;
  479. if( nDistance >= nDotStepDelta )
  480. {
  481. for( LONG nx = nDotStepDelta/2; nx < sizeItem.cx; nx += nDotStepDelta )
  482. {
  483. static RECT rcDot = { -nDotRadius, -nDotRadius, nDotRadius, nDotRadius };
  484. CRgn rgnDot1, rgnDot2;
  485. VERIFY( rgnDot1.CreateEllipticRgnIndirect( &rcDot ) );
  486. VERIFY( rgnDot2.CreateEllipticRgnIndirect( &rcDot ) );
  487. rgnDot1.OffsetRgn(
  488. m_rcItem.left + nx,
  489. m_rcItem.top
  490. );
  491. rgnDot2.OffsetRgn(
  492. m_rcItem.left + m_rcItem.Width() - nx,
  493. m_rcItem.bottom
  494. );
  495. rgnHelperDots.CombineRgn(
  496. &rgnHelperDots,
  497. &rgnDot1,
  498. RGN_OR
  499. );
  500. rgnHelperDots.CombineRgn(
  501. &rgnHelperDots,
  502. &rgnDot2,
  503. RGN_OR
  504. );
  505. ASSERT( rgnHelperDots.GetSafeHandle() != NULL );
  506. }
  507. LONG ny =
  508. ( sizeItem.cy % nDotStepDelta ) / 2
  509. ;
  510. for( ; ny < sizeItem.cy; ny += nDotStepDelta )
  511. {
  512. static RECT rcDot = { -nDotRadius, -nDotRadius, nDotRadius, nDotRadius };
  513. CRgn rgnDot1, rgnDot2;
  514. VERIFY( rgnDot1.CreateEllipticRgnIndirect( &rcDot ) );
  515. VERIFY( rgnDot2.CreateEllipticRgnIndirect( &rcDot ) );
  516. rgnDot1.OffsetRgn(
  517. m_rcItem.left,
  518. m_rcItem.top + m_rcItem.Height() - ny
  519. );
  520. rgnDot2.OffsetRgn(
  521. m_rcItem.right,
  522. m_rcItem.top + ny
  523. );
  524. rgnHelperDots.CombineRgn(
  525. &rgnHelperDots,
  526. &rgnDot1,
  527. RGN_OR
  528. );
  529. rgnHelperDots.CombineRgn(
  530. &rgnHelperDots,
  531. &rgnDot2,
  532. RGN_OR
  533. );
  534. ASSERT( rgnHelperDots.GetSafeHandle() != NULL );
  535. } // for( ; ny < sizeItem.cy; ny += nDotStepDelta )
  536. if( rgnHelperDots.GetSafeHandle() != NULL )
  537. {
  538. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  539. {
  540. m_rgnHelperAreas.CombineRgn(
  541. &m_rgnHelperAreas,
  542. &rgnHelperDots,
  543. RGN_OR
  544. );
  545. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  546. } // if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  547. else
  548. {
  549. CRect rcHelperAreas( m_rcWnd );
  550. rcHelperAreas.OffsetRect( -rcHelperAreas.TopLeft() );
  551. VERIFY(
  552. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  553. );
  554. m_rgnHelperAreas.CombineRgn(
  555. &rgnHelperDots,
  556. NULL,
  557. RGN_COPY
  558. );
  559. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  560. } // else from if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  561. } // if( rgnHelperDots.GetSafeHandle() != NULL )
  562. } // if( nDistance >= nDotStepDelta )
  563. } // if draw red dots around item
  564. VERIFY(
  565. m_rgnItem.CreateRectRgnIndirect( &m_rcItem )
  566. );
  567. VERIFY(
  568. m_rgnWindow.CreateRectRgnIndirect( &m_rcWnd )
  569. );
  570. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  571. {
  572. m_rgnWindow.CombineRgn(
  573. &m_rgnHelperAreas,
  574. &m_rgnItem,
  575. RGN_OR
  576. );
  577. } // if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  578. else
  579. {
  580. m_rgnWindow.CombineRgn(
  581. &m_rgnItem,
  582. NULL,
  583. RGN_COPY
  584. );
  585. } // else from if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  586. if( m_dwActivateFlags & __ECWAF_TRANSPARENT_ITEM )
  587. {
  588. m_rgnWindow.CombineRgn(
  589. &m_rgnWindow,
  590. &m_rgnItem,
  591. RGN_XOR
  592. );
  593. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  594. {
  595. m_rgnWindow.CombineRgn(
  596. &m_rgnWindow,
  597. &m_rgnHelperAreas,
  598. RGN_OR
  599. );
  600. } // if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  601. } // if( m_dwActivateFlags & __ECWAF_TRANSPARENT_ITEM )
  602. } // if draw used-defined item
  603. else
  604. { // if NOT draw used-defined item
  605. ASSERT(
  606. m_rcWnd.left == m_rcWnd.right
  607. || m_rcWnd.top == m_rcWnd.bottom
  608. );
  609. if( m_rcWnd.left == m_rcWnd.right )
  610. m_bVerticalMode = true;
  611. CRect rcWndPrev( m_rcWnd );
  612. if( m_bVerticalMode )
  613. {
  614. if( m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS )
  615. { // if draw red arrows
  616. m_rcWnd.InflateRect( 6, 12 );
  617. // static POINT vArrowTop[] =
  618. // {
  619. // {  8, 0 },
  620. // {  8, 4 },
  621. // { 11, 4 },
  622. // {  6, 9 },
  623. // {  1, 4 },
  624. // {  4, 4 },
  625. // {  4, 0 },
  626. // };
  627. // CRgn rgnArrowTop;
  628. // VERIFY(
  629. // rgnArrowTop.CreatePolygonRgn(
  630. // vArrowTop,
  631. // sizeof(vArrowTop) / sizeof(vArrowTop[0]),
  632. // ALTERNATE
  633. // )
  634. // );
  635. //
  636. // static POINT vArrowBottom[] =
  637. // {
  638. // {  4, 10 },
  639. // {  4,  6 },
  640. // {  0,  6 },
  641. // {  6,  0 },
  642. // { 12,  6 },
  643. // {  8,  6 },
  644. // {  8, 10 },
  645. // };
  646. // CRgn rgnArrowBottom;
  647. // VERIFY(
  648. // rgnArrowBottom.CreatePolygonRgn(
  649. // vArrowBottom,
  650. // sizeof(vArrowBottom) / sizeof(vArrowBottom[0]),
  651. // ALTERNATE
  652. // )
  653. // );
  654. // rgnArrowBottom.OffsetRgn(
  655. // 0,
  656. // m_rcWnd.Height() - 11
  657. // );
  658. CRgn rgnArrowTop, rgnArrowBottom;
  659. CExtPaintManager::g_DockingCaptionGlyphs[
  660. CExtPaintManager::__DCBT_ARROW_PT_DOWN
  661. ] -> GenerateRgn( rgnArrowTop );
  662. ASSERT( rgnArrowTop.GetSafeHandle() != NULL );
  663. CExtPaintManager::g_DockingCaptionGlyphs[
  664. CExtPaintManager::__DCBT_ARROW_PT_UP
  665. ] -> GenerateRgn( rgnArrowBottom );
  666. ASSERT( rgnArrowBottom.GetSafeHandle() != NULL );
  667. rgnArrowBottom.OffsetRgn(
  668. 0,
  669. m_rcWnd.Height() - 11
  670. );
  671. CRect rcHelperAreas( 0, 0, 0, 0 );
  672. VERIFY(
  673. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  674. );
  675. m_rgnHelperAreas.CombineRgn(
  676. &rgnArrowTop,
  677. &rgnArrowBottom,
  678. RGN_OR
  679. );
  680. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  681. } // if draw red arrows
  682. if( m_dwActivateFlags & __ECWAF_DRAW_RED_DOTS )
  683. { // if draw red dots
  684. if( (m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS) == 0 )
  685. m_rcWnd.InflateRect(
  686. nDotRgnOffsetDX/2,
  687. 0,
  688. nDotRgnOffsetDX/2 + 1,
  689. 0
  690. );
  691. CSize sizeItem = m_rcItem.Size();
  692. CRect rcHelperDots( 0, 0, 0, 0 );
  693. CRgn rgnHelperDots;
  694. VERIFY(
  695. rgnHelperDots.CreateRectRgnIndirect( &rcHelperDots )
  696. );
  697. LONG nDistance = (sizeItem.cx + sizeItem.cy) * 2;
  698. if( nDistance >= nDotStepDelta )
  699. {
  700. LONG ny =
  701. ( sizeItem.cy % nDotStepDelta ) / 2
  702. ;
  703. for( ; ny < sizeItem.cy; ny += nDotStepDelta )
  704. {
  705. static RECT rcDot = { -nDotRadius, -nDotRadius, nDotRadius, nDotRadius };
  706. CRgn rgnDot1;
  707. VERIFY( rgnDot1.CreateEllipticRgnIndirect( &rcDot ) );
  708. rgnDot1.OffsetRgn(
  709. rcWndPrev.left - m_rcWnd.left + nDotRadius/2,
  710. rcWndPrev.top - m_rcWnd.top + ny
  711. );
  712. rgnHelperDots.CombineRgn(
  713. &rgnHelperDots,
  714. &rgnDot1,
  715. RGN_OR
  716. );
  717. ASSERT( rgnHelperDots.GetSafeHandle() != NULL );
  718. } // for( ; ny < sizeItem.cy; ny += nDotStepDelta )
  719. } // if( nDistance >= nDotStepDelta )
  720. if( rgnHelperDots.GetSafeHandle() != NULL )
  721. {
  722. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  723. {
  724. m_rgnHelperAreas.CombineRgn(
  725. &m_rgnHelperAreas,
  726. &rgnHelperDots,
  727. RGN_OR
  728. );
  729. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  730. } // if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  731. else
  732. {
  733. CRect rcHelperAreas( m_rcWnd );
  734. rcHelperAreas.OffsetRect( -rcHelperAreas.TopLeft() );
  735. VERIFY(
  736. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  737. );
  738. m_rgnHelperAreas.CombineRgn(
  739. &rgnHelperDots,
  740. NULL,
  741. RGN_COPY
  742. );
  743. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  744. } // else from if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  745. } // if( rgnHelperDots.GetSafeHandle() != NULL )
  746. } // if draw red dots
  747. } // if( m_bVerticalMode )
  748. else
  749. {
  750. if( m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS )
  751. { // if draw red arrows
  752. m_rcWnd.InflateRect( 12, 6 );
  753. // static POINT vArrowLeft[] =
  754. // {
  755. // { 0,  9 },
  756. // { 4,  9 },
  757. // { 4, 12 },
  758. // { 9,  6 },
  759. // { 4,  0 },
  760. // { 4,  4 },
  761. // { 0,  4 },
  762. // };
  763. // CRgn rgnArrowLeft;
  764. // VERIFY(
  765. // rgnArrowLeft.CreatePolygonRgn(
  766. // vArrowLeft,
  767. // sizeof(vArrowLeft) / sizeof(vArrowLeft[0]),
  768. // ALTERNATE
  769. // )
  770. // );
  771. //
  772. // static POINT vArrowRight[] =
  773. // {
  774. // { 10,  4},
  775. // {  6,  4},
  776. // {  6,  0},
  777. // {  0,  6},
  778. // {  6, 12},
  779. // {  6,  9},
  780. // { 10,  9},
  781. // };
  782. // CRgn rgnArrowRight;
  783. // VERIFY(
  784. // rgnArrowRight.CreatePolygonRgn(
  785. // vArrowRight,
  786. // sizeof(vArrowRight) / sizeof(vArrowRight[0]),
  787. // ALTERNATE
  788. // )
  789. // );
  790. // rgnArrowRight.OffsetRgn(
  791. // m_rcWnd.Width() - 11,
  792. // 0
  793. // );
  794. CRgn rgnArrowLeft, rgnArrowRight;
  795. CExtPaintManager::g_DockingCaptionGlyphs[
  796. CExtPaintManager::__DCBT_ARROW_PT_RIGHT
  797. ] -> GenerateRgn( rgnArrowLeft );
  798. ASSERT( rgnArrowLeft.GetSafeHandle() != NULL );
  799. CExtPaintManager::g_DockingCaptionGlyphs[
  800. CExtPaintManager::__DCBT_ARROW_PT_LEFT
  801. ] -> GenerateRgn( rgnArrowRight );
  802. ASSERT( rgnArrowRight.GetSafeHandle() != NULL );
  803. rgnArrowRight.OffsetRgn(
  804. m_rcWnd.Width() - 11,
  805. 0
  806. );
  807. CRect rcHelperAreas( 0, 0, 0, 0 );
  808. VERIFY(
  809. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  810. );
  811. m_rgnHelperAreas.CombineRgn(
  812. &rgnArrowLeft,
  813. &rgnArrowRight,
  814. RGN_OR
  815. );
  816. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  817. } // if draw red arrows
  818. if( m_dwActivateFlags & __ECWAF_DRAW_RED_DOTS )
  819. { // if draw red dots
  820. if( (m_dwActivateFlags & __ECWAF_DRAW_RED_ARROWS) == 0 )
  821. m_rcWnd.InflateRect(
  822. 0,
  823. nDotRgnOffsetDY/2,
  824. 0,
  825. nDotRgnOffsetDY/2 + 1
  826. );
  827. CSize sizeItem = m_rcItem.Size();
  828. CRect rcHelperDots( 0, 0, 0, 0 );
  829. CRgn rgnHelperDots;
  830. VERIFY(
  831. rgnHelperDots.CreateRectRgnIndirect( &rcHelperDots )
  832. );
  833. LONG nDistance = (sizeItem.cx + sizeItem.cy) * 2;
  834. if( nDistance >= nDotStepDelta )
  835. {
  836. LONG nx =
  837. ( sizeItem.cx % nDotStepDelta ) / 2
  838. ;
  839. for( ; nx < sizeItem.cx; nx += nDotStepDelta )
  840. {
  841. static RECT rcDot = { -nDotRadius, -nDotRadius, nDotRadius, nDotRadius };
  842. CRgn rgnDot1;
  843. VERIFY( rgnDot1.CreateEllipticRgnIndirect( &rcDot ) );
  844. rgnDot1.OffsetRgn(
  845. rcWndPrev.left - m_rcWnd.left + nx ,
  846. rcWndPrev.top - m_rcWnd.top + nDotRadius/2
  847. );
  848. rgnHelperDots.CombineRgn(
  849. &rgnHelperDots,
  850. &rgnDot1,
  851. RGN_OR
  852. );
  853. ASSERT( rgnHelperDots.GetSafeHandle() != NULL );
  854. } // for( ; nx < sizeItem.cx; nx += nDotStepDelta )
  855. } // if( nDistance >= nDotStepDelta )
  856. if( rgnHelperDots.GetSafeHandle() != NULL )
  857. {
  858. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  859. {
  860. m_rgnHelperAreas.CombineRgn(
  861. &m_rgnHelperAreas,
  862. &rgnHelperDots,
  863. RGN_OR
  864. );
  865. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  866. } // if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  867. else
  868. {
  869. CRect rcHelperAreas( m_rcWnd );
  870. rcHelperAreas.OffsetRect( -rcHelperAreas.TopLeft() );
  871. VERIFY(
  872. m_rgnHelperAreas.CreateRectRgnIndirect( &rcHelperAreas )
  873. );
  874. m_rgnHelperAreas.CombineRgn(
  875. &rgnHelperDots,
  876. NULL,
  877. RGN_COPY
  878. );
  879. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  880. } // else from if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  881. } // if( rgnHelperDots.GetSafeHandle() != NULL )
  882. } // if draw red dots
  883. } // else from if( m_bVerticalMode )
  884. ASSERT( m_rgnHelperAreas.GetSafeHandle() != NULL );
  885. VERIFY(
  886. m_rgnWindow.CreateRectRgn( 0, 0, 0, 0 )
  887. );
  888. m_rgnWindow.CombineRgn(
  889. &m_rgnHelperAreas,
  890. NULL,
  891. RGN_COPY
  892. );
  893. } // if NOT draw used-defined item
  894. }
  895. /////////////////////////////////////////////////////////////////////////////
  896. // CExtContentExpandWnd message handlers
  897. void CExtContentExpandWnd::PreSubclassWindow() 
  898. {
  899. CWnd::PreSubclassWindow();
  900. if( m_bDirectCreateCall )
  901. return;
  902. if( !_CreateHelper() )
  903. {
  904. ASSERT( FALSE );
  905. AfxThrowMemoryException();
  906. } // if( !Create() )
  907. }
  908. BOOL CExtContentExpandWnd::PreCreateWindow(CREATESTRUCT& cs) 
  909. {
  910. if( ( !RegisterContentExpandWndClass() )
  911. || ( !CWnd::PreCreateWindow(cs) )
  912. )
  913. {
  914. ASSERT( FALSE );
  915. return FALSE;
  916. }
  917. cs.lpszClass = __EXT_CONTENTEXPANDWND_CLASS_NAME;
  918. return TRUE;
  919. }
  920. UINT CExtContentExpandWnd::OnNcHitTest(CPoint point) 
  921. {
  922. // return CWnd::OnNcHitTest(point);
  923. point;
  924. return HTCLIENT;
  925. }
  926. void CExtContentExpandWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
  927. {
  928. // CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
  929. bCalcValidRects;
  930. CRect rcClient( m_rcWnd );
  931. ::CopyRect(
  932. &lpncsp->rgrc[0],
  933. &rcClient
  934. );
  935. }
  936. BOOL CExtContentExpandWnd::OnEraseBkgnd(CDC* pDC) 
  937. {
  938. // return CWnd::OnEraseBkgnd(pDC);
  939. pDC;
  940. return TRUE;
  941. }
  942. void CExtContentExpandWnd::OnPaint() 
  943. {
  944. ASSERT( m_pWndNotify != NULL );
  945. ASSERT( m_pWndNotify->GetSafeHwnd() != NULL );
  946. ASSERT( ::IsWindow(m_pWndNotify->GetSafeHwnd()) );
  947. CPaintDC dcPaint(this);
  948. ASSERT( (m_dwActivateFlags & __ECWAF_DRAW_ANY) != 0 );
  949. if( m_dwActivateFlags != 0 )
  950. {
  951. CRect rcClient;
  952. GetClientRect( &rcClient );
  953. DWORD dwMemDcOptions = 0; // CExtMemoryDC::MDCOPT_RTL_COMPATIBILITY;
  954. dwMemDcOptions |=
  955. ( m_dwActivateFlags & __ECWAF_DRAW_SOURCE )
  956. ? CExtMemoryDC::MDCOPT_TO_MEMORY
  957. : CExtMemoryDC::MDCOPT_DEFAULT
  958. ;
  959. CExtMemoryDC dc(
  960. &dcPaint,
  961. NULL, // &rcClient,
  962. dwMemDcOptions
  963. );
  964. if( m_dwActivateFlags & __ECWAF_DRAW_SOURCE )
  965. dc.BitBlt(
  966. 0, 0, rcClient.Width(), rcClient.Height(),
  967. &dcPaint,
  968. 0, 0,
  969. SRCCOPY
  970. );
  971. if( m_dwActivateFlags & __ECWAF_DRAW_ITEM )
  972. { // if draw used-defined item
  973. if( (m_dwActivateFlags & __ECWAF_TRANSPARENT_ITEM) == 0 )
  974. {
  975. PAINT_ITEM_CONTENT_DATA _picd( dc, m_rcItem );
  976. if( !_picd.Notify(
  977. m_pWndNotify->GetSafeHwnd()
  978. )
  979. )
  980. {
  981. dc.FillSolidRect(
  982. &rcClient,
  983. PmBridge_GetPM()->GetColor( COLOR_BTNFACE, this )
  984. );
  985. }
  986. } // if( (m_dwActivateFlags & __ECWAF_TRANSPARENT_ITEM) == 0 )
  987. } // if draw used-defined item
  988. else
  989. { // if NOT draw used-defined item
  990. } // if NOT draw used-defined item
  991. if( m_rgnHelperAreas.GetSafeHandle() != NULL )
  992. {
  993. if( m_brHelperAreas.GetSafeHandle() == NULL )
  994. {
  995. VERIFY(
  996. m_brHelperAreas.CreateSolidBrush(
  997. RGB(255,0,0)
  998. )
  999. );
  1000. }
  1001. if( m_brHelperAreas.GetSafeHandle() != NULL )
  1002. dc.FillRgn( &m_rgnHelperAreas, &m_brHelperAreas );
  1003. }
  1004. } // if( m_dwActivateFlags != 0 )
  1005. }
  1006. LRESULT CExtContentExpandWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  1007. {
  1008. switch( message )
  1009. {
  1010. case WM_DESTROY:
  1011. _FlushOleRedir();
  1012. break; // case WM_DESTROY:
  1013. } // switch( message )
  1014. if( m_pWndNotify != NULL )
  1015. {
  1016. bool bPassMouseMessage = false;
  1017. switch( message )
  1018. {
  1019. case WM_MOUSEACTIVATE:
  1020. if( ( m_dwActivateFlags & __ECWAF_HANDLE_MOUSE_ACTIVATE ) != 0 )
  1021. {
  1022. switch( ( m_dwActivateFlags & __ECWAF_MA_MASK ) )
  1023. {
  1024. case __ECWAF_MA_ACTIVATE: return MA_ACTIVATE;
  1025. case __ECWAF_MA_ACTIVATEANDEAT: return MA_ACTIVATEANDEAT;
  1026. case __ECWAF_MA_NOACTIVATE: return MA_NOACTIVATE;
  1027. case __ECWAF_MA_NOACTIVATEANDEAT: return MA_NOACTIVATEANDEAT;
  1028. #ifdef _DEBUG
  1029. default:
  1030. ASSERT( FALSE );
  1031. break;
  1032. #endif // _DEBUG
  1033. } // switch( ( m_dwActivateFlags & __ECWAF_MA_MASK ) )
  1034. }
  1035. break;
  1036. case WM_LBUTTONDOWN:
  1037. bPassMouseMessage =
  1038. ( m_dwActivateFlags & __ECWAF_PASS_WM_LBUTTONDOWN )
  1039. ? true : false;
  1040. break;
  1041. case WM_MBUTTONDOWN:
  1042. bPassMouseMessage =
  1043. ( m_dwActivateFlags & __ECWAF_PASS_WM_MBUTTONDOWN )
  1044. ? true : false;
  1045. break;
  1046. case WM_RBUTTONDOWN:
  1047. bPassMouseMessage =
  1048. ( m_dwActivateFlags & __ECWAF_PASS_WM_RBUTTONDOWN )
  1049. ? true : false;
  1050. break;
  1051. case WM_LBUTTONUP:
  1052. bPassMouseMessage =
  1053. ( m_dwActivateFlags & __ECWAF_PASS_WM_LBUTTONUP )
  1054. ? true : false;
  1055. break;
  1056. case WM_MBUTTONUP:
  1057. bPassMouseMessage =
  1058. ( m_dwActivateFlags & __ECWAF_PASS_WM_MBUTTONUP )
  1059. ? true : false;
  1060. break;
  1061. case WM_RBUTTONUP:
  1062. bPassMouseMessage =
  1063. ( m_dwActivateFlags & __ECWAF_PASS_WM_RBUTTONUP )
  1064. ? true : false;
  1065. break;
  1066. case WM_LBUTTONDBLCLK:
  1067. bPassMouseMessage =
  1068. ( m_dwActivateFlags & __ECWAF_PASS_WM_LBUTTONDBLCLK )
  1069. ? true : false;
  1070. break;
  1071. case WM_MBUTTONDBLCLK:
  1072. bPassMouseMessage =
  1073. ( m_dwActivateFlags & __ECWAF_PASS_WM_MBUTTONDBLCLK )
  1074. ? true : false;
  1075. break;
  1076. case WM_RBUTTONDBLCLK:
  1077. bPassMouseMessage =
  1078. ( m_dwActivateFlags & __ECWAF_PASS_WM_RBUTTONDBLCLK )
  1079. ? true : false;
  1080. break;
  1081. case WM_MOUSEWHEEL:
  1082. bPassMouseMessage =
  1083. ( m_dwActivateFlags & __ECWAF_PASS_WM_MOUSEWHEEL )
  1084. ? true : false;
  1085. break;
  1086. case WM_MOUSEMOVE:
  1087. bPassMouseMessage =
  1088. ( m_dwActivateFlags & __ECWAF_PASS_WM_MOUSEMOVE )
  1089. ? true : false;
  1090. break;
  1091. } // switch( message )
  1092. if( bPassMouseMessage )
  1093. {
  1094. CPoint ptCursor( 0, 0 );
  1095. ::GetCursorPos( &ptCursor );
  1096. m_pWndNotify->ScreenToClient( &ptCursor );
  1097. lParam = MAKELPARAM( ptCursor.x, ptCursor.y );
  1098. LRESULT lResult =
  1099. ::SendMessage(
  1100. m_pWndNotify->GetSafeHwnd(),
  1101. message,
  1102. wParam,
  1103. lParam
  1104. );
  1105. if( (m_dwActivateFlags&__ECWAF_REDIRECT_NO_DEACTIVATE) == 0 )
  1106. Deactivate();
  1107. if( (m_dwActivateFlags&__ECWAF_REDIRECT_AND_HANDLE) == 0 )
  1108. {
  1109. if( (m_dwActivateFlags&__ECWAF_REDIRECT_RETVAL) != 0 )
  1110. return lResult;
  1111. return 0;
  1112. } // if( (m_dwActivateFlags&__ECWAF_REDIRECT_AND_HANDLE) == 0 )
  1113. } // if( bPassMouseMessage )
  1114. } // if( m_pWndNotify != NULL )
  1115. return CWnd::WindowProc(message, wParam, lParam);
  1116. }