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

界面编程

开发平台:

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. #if (!defined __EXT_EXTCONTENTEXPANDWND_H)
  22. #define __EXT_EXTCONTENTEXPANDWND_H
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif // _MSC_VER > 1000
  26. #if (!defined __EXT_MFC_DEF_H)
  27. #include <ExtMfcDef.h>
  28. #endif // __EXT_MFC_DEF_H
  29. #if (!defined __EXT_MOUSECAPTURESINK_H)
  30. #include <../Src/ExtMouseCaptureSink.h>
  31. #endif
  32. #if (!defined __EXT_POPUP_MENU_WND_H)
  33. #include <ExtPopupMenuWnd.h>
  34. #endif
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CExtContentExpandWnd window
  37. #define __EXT_CONTENTEXPANDWND_CLASS_NAME _T("ProfUIS-ContentExpandWnd")
  38. #define __ECWAF_PASS_WM_LBUTTONDOWN 0x00000001L
  39. #define __ECWAF_PASS_WM_MBUTTONDOWN 0x00000002L
  40. #define __ECWAF_PASS_WM_RBUTTONDOWN 0x00000004L
  41. #define __ECWAF_PASS_WM_MOUSEWHEEL 0x00000008L
  42. #define __ECWAF_PASS_WM_MOUSEMOVE 0x00000010L
  43. #define __ECWAF_TRANSPARENT_WND 0x00000020L
  44. #define __ECWAF_DRAW_ITEM 0x00000040L
  45. #define __ECWAF_DRAW_RED_DOTS 0x00000080L
  46. #define __ECWAF_DRAW_RED_ARROWS 0x00000100L
  47. #define __ECWAF_DRAW_RED_ARROWS_V 0x00000200L // arrows are vertical
  48. #define __ECWAF_POST_INVALIDATE 0x00000400L
  49. #define __ECWAF_DRAW_SOURCE 0x00000800L
  50. #define __ECWAF_TRANSPARENT_ITEM 0x00001000L
  51. #define __ECWAF_NO_CAPTURE 0x00002000L
  52. #define __ECWAF_PASS_WM_LBUTTONUP 0x00004000L
  53. #define __ECWAF_PASS_WM_MBUTTONUP 0x00008000L
  54. #define __ECWAF_PASS_WM_RBUTTONUP 0x00010000L
  55. #define __ECWAF_PASS_WM_LBUTTONDBLCLK 0x00020000L
  56. #define __ECWAF_PASS_WM_MBUTTONDBLCLK 0x00040000L
  57. #define __ECWAF_PASS_WM_RBUTTONDBLCLK 0x00080000L
  58. #define __ECWAF_REDIRECT_RETVAL 0x00100000L
  59. #define __ECWAF_REDIRECT_NO_DEACTIVATE 0x00200000L
  60. #define __ECWAF_REDIRECT_AND_HANDLE 0x00400000L
  61. #define __ECWAF_HANDLE_MOUSE_ACTIVATE 0x00800000L
  62. #define __ECWAF_MA_ACTIVATE 0x01000000L
  63. #define __ECWAF_MA_ACTIVATEANDEAT 0x02000000L
  64. #define __ECWAF_MA_NOACTIVATE 0x03000000L
  65. #define __ECWAF_MA_NOACTIVATEANDEAT 0x04000000L
  66. #define __ECWAF_MA_MASK 0x07000000L
  67. #define __ECWAF_REDIRECT_MOUSE 
  68. ( __ECWAF_PASS_WM_MOUSEWHEEL 
  69. | __ECWAF_PASS_WM_MOUSEMOVE 
  70. | __ECWAF_PASS_WM_LBUTTONDOWN 
  71. | __ECWAF_PASS_WM_MBUTTONDOWN 
  72. | __ECWAF_PASS_WM_RBUTTONDOWN 
  73. | __ECWAF_PASS_WM_LBUTTONUP 
  74. | __ECWAF_PASS_WM_MBUTTONUP 
  75. | __ECWAF_PASS_WM_RBUTTONUP 
  76. | __ECWAF_PASS_WM_LBUTTONDBLCLK 
  77. | __ECWAF_PASS_WM_MBUTTONDBLCLK 
  78. | __ECWAF_PASS_WM_RBUTTONDBLCLK 
  79. )
  80. #define __ECWAF_DRAW_ANY 
  81. ( __ECWAF_DRAW_ITEM 
  82. | __ECWAF_DRAW_RED_DOTS 
  83. | __ECWAF_DRAW_RED_ARROWS 
  84. | __ECWAF_POST_INVALIDATE 
  85. | __ECWAF_DRAW_SOURCE 
  86. )
  87. #define __ECWAF_USER_DEFINED_04 0x08000000L
  88. #define __ECWAF_USER_DEFINED_03 0x10000000L
  89. #define __ECWAF_USER_DEFINED_02 0x20000000L
  90. #define __ECWAF_USER_DEFINED_01 0x40000000L
  91. #define __ECWAF_USER_DEFINED_00 0x80000000L
  92. #define __ECWAF_DEF_EXPANDED_ITEM_PAINTER 
  93. ( __ECWAF_PASS_WM_LBUTTONDOWN 
  94. | __ECWAF_PASS_WM_MBUTTONDOWN 
  95. | __ECWAF_PASS_WM_RBUTTONDOWN 
  96. | __ECWAF_PASS_WM_MOUSEWHEEL 
  97. | __ECWAF_DRAW_ITEM 
  98. /*| __ECWAF_DRAW_SOURCE*/ 
  99. )
  100. #define __ECWAF_DEF_ARROWS_H 
  101. ( __ECWAF_PASS_WM_LBUTTONDOWN 
  102. | __ECWAF_PASS_WM_MBUTTONDOWN 
  103. | __ECWAF_PASS_WM_RBUTTONDOWN 
  104. | __ECWAF_PASS_WM_MOUSEWHEEL 
  105. | __ECWAF_DRAW_RED_ARROWS 
  106. )
  107. #define __ECWAF_DEF_ARROWS_V 
  108. ( __ECWAF_PASS_WM_LBUTTONDOWN 
  109. | __ECWAF_PASS_WM_MBUTTONDOWN 
  110. | __ECWAF_PASS_WM_RBUTTONDOWN 
  111. | __ECWAF_PASS_WM_MOUSEWHEEL 
  112. | __ECWAF_DRAW_RED_ARROWS 
  113. | __ECWAF_DRAW_RED_ARROWS_V 
  114. )
  115. #define __ECWAF_DEFAULT __ECWAF_DEF_EXPANDED_ITEM_PAINTER
  116. class __PROF_UIS_API CExtRedirectOleDropTarget : public COleDropTarget
  117. {
  118. COleDropTarget * m_pOleDropTargetOther;
  119. CWnd * m_pOtherWnd;
  120. CWnd * m_pWndSrc;
  121. public:
  122. CExtRedirectOleDropTarget(
  123. COleDropTarget * pOleDropTargetOther,
  124. CWnd * pOtherWnd,
  125. CWnd * pWndSrc
  126. )
  127. : m_pOleDropTargetOther( pOleDropTargetOther )
  128. , m_pOtherWnd( pOtherWnd )
  129. , m_pWndSrc( pWndSrc )
  130. {
  131. ASSERT( m_pOleDropTargetOther != NULL );
  132. #ifdef _DEBUG
  133. if( m_pOtherWnd != NULL )
  134. {
  135. ASSERT( m_pOtherWnd->GetSafeHwnd() != NULL );
  136. ASSERT( ::IsWindow(m_pOtherWnd->GetSafeHwnd()) );
  137. }
  138. #endif // _DEBUG
  139. ASSERT( m_pWndSrc != NULL );
  140. ASSERT( m_pWndSrc->GetSafeHwnd() != NULL );
  141. ASSERT( ::IsWindow(m_pWndSrc->GetSafeHwnd()) );
  142. VERIFY( Register( m_pWndSrc ) );
  143. }
  144. virtual DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,
  145. DWORD dwKeyState, CPoint point)
  146. {
  147. ASSERT( m_pOleDropTargetOther != NULL );
  148. if( m_pOtherWnd != NULL )
  149. pWnd = m_pOtherWnd;
  150. return
  151. m_pOleDropTargetOther->
  152. OnDragEnter(pWnd,pDataObject,dwKeyState,point);
  153. }
  154. virtual DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,
  155. DWORD dwKeyState, CPoint point)
  156. {
  157. ASSERT( m_pOleDropTargetOther != NULL );
  158. if( m_pOtherWnd != NULL )
  159. pWnd = m_pOtherWnd;
  160. return
  161. m_pOleDropTargetOther->
  162. OnDragOver(pWnd,pDataObject,dwKeyState,point);
  163. }
  164. virtual BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject,
  165. DROPEFFECT dropEffect, CPoint point)
  166. {
  167. ASSERT( m_pOleDropTargetOther != NULL );
  168. if( m_pOtherWnd != NULL )
  169. pWnd = m_pOtherWnd;
  170. return
  171. m_pOleDropTargetOther->
  172. OnDrop(pWnd,pDataObject,dropEffect,point);
  173. }
  174. virtual DROPEFFECT OnDropEx(CWnd* pWnd, COleDataObject* pDataObject,
  175. DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point)
  176. {
  177. ASSERT( m_pOleDropTargetOther != NULL );
  178. if( m_pOtherWnd != NULL )
  179. pWnd = m_pOtherWnd;
  180. return
  181. m_pOleDropTargetOther->
  182. OnDropEx(pWnd,pDataObject,dropDefault,dropList,point);
  183. }
  184. virtual void OnDragLeave(CWnd* pWnd)
  185. {
  186. ASSERT( m_pOleDropTargetOther != NULL );
  187. if( m_pOtherWnd != NULL )
  188. pWnd = m_pOtherWnd;
  189. m_pOleDropTargetOther->OnDragLeave(pWnd);
  190. }
  191. virtual DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState,
  192. CPoint point)
  193. {
  194. ASSERT( m_pOleDropTargetOther != NULL );
  195. if( m_pOtherWnd != NULL )
  196. pWnd = m_pOtherWnd;
  197. return
  198. m_pOleDropTargetOther->
  199. OnDragScroll(pWnd,dwKeyState,point);
  200. }
  201. }; // class CExtRedirectOleDropTarget
  202. class __PROF_UIS_API CExtContentExpandWnd
  203. : public CWnd
  204. , public CExtMouseCaptureSink
  205. , public CExtPmBridge
  206. {
  207. // Construction
  208. public:
  209. DECLARE_DYNCREATE( CExtContentExpandWnd );
  210. DECLARE_CExtPmBridge_MEMBERS( CExtContentExpandWnd );
  211. CExtContentExpandWnd();
  212. // Attributes
  213. public:
  214. CExtShadowCtrl m_ctrlShadow;
  215. static UINT g_nMsgPaintItemContent;
  216. struct __PROF_UIS_API PAINT_ITEM_CONTENT_DATA
  217. {
  218. CDC & m_dc;
  219. CRect m_rcItem;
  220. PAINT_ITEM_CONTENT_DATA(
  221. CDC & dc,
  222. const RECT & rcItem
  223. )
  224. : m_dc( dc )
  225. , m_rcItem( rcItem )
  226. {
  227. ASSERT( m_dc.GetSafeHdc() != NULL );
  228. }
  229. private:
  230. bool Notify( HWND hWndNotify )
  231. {
  232. ASSERT( hWndNotify != NULL );
  233. ASSERT( ::IsWindow(hWndNotify) );
  234. ASSERT( m_dc.GetSafeHdc() != NULL );
  235. if( m_rcItem.right <= m_rcItem.left
  236. || m_rcItem.bottom <= m_rcItem.top
  237. )
  238. return true;
  239. if( !m_dc.RectVisible( &m_rcItem ) )
  240. return true;
  241. LRESULT lResult =
  242. ::SendMessage(
  243. hWndNotify,
  244. CExtContentExpandWnd::g_nMsgPaintItemContent,
  245. (WPARAM)(this),
  246. 0
  247. );
  248. return lResult ? true : false;
  249. }
  250. friend class CExtContentExpandWnd;
  251. }; // struct PAINT_ITEM_CONTENT_DATA
  252. protected:
  253. HFONT m_hFont;
  254. static bool g_bContentExpandWndClassRegistered;
  255. bool m_bDirectCreateCall:1;
  256. bool m_bVerticalMode:1;
  257. CRect m_rcWnd;
  258. CRect m_rcItem;
  259. CWnd * m_pWndNotify;
  260. DWORD m_dwActivateFlags;
  261. CRgn m_rgnHelperAreas, m_rgnWindow, m_rgnItem;
  262. CBrush m_brHelperAreas;
  263. CExtRedirectOleDropTarget * m_pRODT;
  264. // Operations
  265. public:
  266. bool Activate(
  267. const RECT & rcItem,
  268. CWnd * pWndNotify,
  269. DWORD dwActivateFlags = __ECWAF_DEFAULT,
  270. COleDropTarget * pODT = NULL,
  271. CWnd * pWndOtherForODT = NULL
  272. );
  273. void Deactivate();
  274. void RecalcLayout();
  275. protected:
  276. bool RegisterContentExpandWndClass();
  277. bool _CreateHelper();
  278. void _InitMembers();
  279. void _FlushOleRedir();
  280. // Overrides
  281. // ClassWizard generated virtual function overrides
  282. //{{AFX_VIRTUAL(CExtContentExpandWnd)
  283. protected:
  284. virtual void PreSubclassWindow();
  285. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  286. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  287. //}}AFX_VIRTUAL
  288. // Implementation
  289. public:
  290. virtual ~CExtContentExpandWnd();
  291. // Generated message map functions
  292. protected:
  293. //{{AFX_MSG(CExtContentExpandWnd)
  294. afx_msg UINT OnNcHitTest(CPoint point);
  295. afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
  296. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  297. afx_msg void OnPaint();
  298. afx_msg LRESULT OnSetFont( WPARAM wParam, LPARAM lParam );
  299. afx_msg LRESULT OnGetFont( WPARAM, LPARAM );
  300. //}}AFX_MSG
  301. DECLARE_MESSAGE_MAP()
  302. }; // class CExtContentExpandWnd
  303. /////////////////////////////////////////////////////////////////////////////
  304. //{{AFX_INSERT_LOCATION}}
  305. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  306. #endif // __EXT_EXTCONTENTEXPANDWND_H