PPTooltip.h
上传用户:aymxxn
上传日期:2014-11-29
资源大小:135k
文件大小:16k
源码类别:

文件操作

开发平台:

Visual C++

  1. /********************************************************************
  2. created: 2003/04/12
  3. created: 12:04:2003   10:50
  4. file base: PPTooltip
  5. file ext: h
  6. author: Eugene Pustovoyt
  7. purpose:
  8. *********************************************************************/
  9. #ifndef _PPTOOLTIP_H
  10. #define _PPTOOLTIP_H
  11. #if _MSC_VER > 1000
  12. #pragma once
  13. #endif // _MSC_VER > 1000
  14. // PPToolTip.h : header file
  15. //
  16. #define PPTOOLTIP_USE_SHADE
  17. #ifdef PPTOOLTIP_USE_SHADE
  18. #include "CeXDib.h"
  19. #endif
  20. #define PPTOOLTIP_CLASSNAME    _T("CPPTooltip")  // Window class name
  21. #define UDM_TOOLTIP_FIRST    (WM_USER + 100)
  22. #define UDM_TOOLTIP_DISPLAY    (UDM_TOOLTIP_FIRST) //User was changed the data
  23. //The styles
  24. #define PPTOOLTIP_ANCHOR 0x00000001
  25. #define PPTOOLTIP_SHADOW 0x00000002
  26. #define PPTOOLTIP_ROUNDED 0x00000004
  27. #define PPTOOLTIP_BALLOON 0x00000007
  28. #define PPTOOLTIP_VCENTER_ALIGN 0x00000008
  29. #define PPTOOLTIP_BOTTOM_ALIGN 0x00000010
  30. #define PPTOOLTIP_ICON_VCENTER_ALIGN 0x00000020
  31. #define PPTOOLTIP_ICON_BOTTOM_ALIGN 0x00000040
  32. #define PPTOOLTIP_SHOW_INACTIVE 0x00000100 //Show tooltip for inacive window
  33. #define PPTOOLTIP_SHOW_DISABLED 0x00000200 //Show tooltip for disabled control
  34. //The behaviours
  35. #define PPTOOLTIP_MULTIPLE_SHOW 0x00000001 //Multiple show for single control
  36. #define PPTOOLTIP_TRACKING_MOUSE 0x00000002 //Tracking for mouse
  37. #define PPTOOLTIP_CLOSE_LEAVEWND 0x00000004 //Close tooltip if mouse leave the control
  38. #define PPTOOLTIP_NOCLOSE_OVER 0x00000008 //No close tooltip if mouse over him
  39. #define PPTOOLTIP_DISABLE_AUTOPOP 0x00000010 //Disables autopop tooltip from timer
  40. //#define PPTOOLTIP_NO_CLOSE_OVER 0x00000002 //No closes tooltip if the mouse over the control
  41. //#define PPTOOLTIP_NO_CLOSE_MOVE 0x00000004 //No closes for any mouse's move.
  42. //#define PPTOOLTIP_TRACK_MOUSE 0x00000008 //Tracking window for the mouse's move
  43. //The masks
  44. #define PPTOOLTIP_MASK_STYLES 0x0001 // The styles for the tooltip gets from the structures
  45. #define PPTOOLTIP_MASK_EFFECT 0x0002 // The background's type for the tooltip gets from the structures
  46. #define PPTOOLTIP_MASK_COLORS 0x0004 // The background's colors for the tooltip gets from the structures
  47. #define PPTOOLTIP_MASK_DIRECTION 0x0008  // The align for the tooltip gets from the structures
  48. #define PPTOOLTIP_MASK_BEHAVIOUR 0x0010  // The behaviour for the tooltip gets from the structures
  49. //#define PPTOOLTIP_MASK_GRANULARITY 0x0010 // The effect's granularity
  50. // This info structure
  51. typedef struct tagPPTOOLTIP_INFO
  52. {
  53.     HWND hWnd; // Window handle of the control
  54.     UINT nIDTool; // ID of tool   
  55.     CRect rectBounds; // Bounding rect for toolinfo to be displayed
  56. HICON hIcon; // The icon of the tooltip
  57. CString sTooltip; // The string of the tooltip
  58. UINT        nMask; // The mask 
  59. UINT nStyles; // The tooltip's styles
  60. UINT        nDirection; // Direction display the tooltip relate cursor point
  61. UINT nEffect; // The color's type or effects
  62. UINT        nBehaviour; // The tooltip's behaviour
  63. BYTE        nGranularity; // The effect's granularity
  64. COLORREF crBegin; // Begin Color
  65. COLORREF    crMid; // Mid Color
  66. COLORREF crEnd; // End Color
  67. } PPTOOLTIP_INFO;
  68. typedef struct tagPPTOOLTIP_NAME_RES
  69. {
  70. CString sName; // Name of the resource (IDB_ - Bitmap, IDI_ - Icon)
  71. UINT nID; // ID of the resource 
  72. BYTE nTypeRes; // TYPE_RES_ICON = Icon, TYPE_RES_BITMAP = bitmap, TYPE_RES_TRAN_BITMAP = transparent bitmap
  73. COLORREF crMask;// Color mask of the resource 
  74. } PPTOOLTIP_NAME_RES;
  75. // This structure sent to PPToolTip parent in a WM_NOTIFY message
  76. typedef struct tagNM_PPTOOLTIP_DISPLAY {
  77.     NMHDR hdr;
  78. CPoint * pt;
  79. PPTOOLTIP_INFO * ti;
  80. } NM_PPTOOLTIP_DISPLAY;
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CPPToolTip window
  83. class CPPToolTip : public CWnd
  84. {
  85. // Construction
  86. public:
  87. virtual BOOL Create(CWnd* pParentWnd, BOOL bBalloonSize = TRUE);
  88. CPPToolTip();
  89. virtual ~CPPToolTip();
  90. // Attributes
  91. public:
  92. enum { PPTTSZ_ROUNDED_CX = 0,
  93. PPTTSZ_ROUNDED_CY,
  94. PPTTSZ_MARGIN_CX,
  95. PPTTSZ_MARGIN_CY,
  96. PPTTSZ_SHADOW_CX,
  97. PPTTSZ_SHADOW_CY,
  98. PPTTSZ_WIDTH_ANCHOR,
  99. PPTTSZ_HEIGHT_ANCHOR,
  100. PPTTSZ_MARGIN_ANCHOR,
  101. PPTTSZ_BORDER_CX,
  102. PPTTSZ_BORDER_CY,
  103. PPTTSZ_MAX_SIZES
  104. };
  105. enum { TYPE_RES_ICON = 0,
  106. TYPE_RES_BITMAP,
  107. TYPE_RES_MASK_BITMAP,
  108. MAX_TYPES_RES
  109. };
  110. enum { PPTOOLTIP_COLOR_0 = 0,
  111. PPTOOLTIP_COLOR_1,
  112. PPTOOLTIP_COLOR_2,
  113. PPTOOLTIP_COLOR_3,
  114. PPTOOLTIP_COLOR_4,
  115. PPTOOLTIP_COLOR_5,
  116. PPTOOLTIP_COLOR_6,
  117. PPTOOLTIP_COLOR_7,
  118. PPTOOLTIP_COLOR_8,
  119. PPTOOLTIP_COLOR_9,
  120. PPTOOLTIP_COLOR_10,
  121. PPTOOLTIP_COLOR_11,
  122. PPTOOLTIP_COLOR_12,
  123. PPTOOLTIP_COLOR_13,
  124. PPTOOLTIP_COLOR_14,
  125. PPTOOLTIP_COLOR_15,
  126. PPTOOLTIP_COLOR_16,
  127. PPTOOLTIP_COLOR_FG,
  128. PPTOOLTIP_COLOR_BK_BEGIN,
  129. PPTOOLTIP_COLOR_BK_MID,
  130. PPTOOLTIP_COLOR_BK_END,
  131. PPTOOLTIP_COLOR_LINK, // Color for hyperlink text
  132. PPTOOLTIP_COLOR_VISITED, // Color for visited hyperlink text
  133. PPTOOLTIP_COLOR_HOVER, // Color for hover hyperlink text
  134. PPTOOLTIP_COLOR_SHADOW, // Color for the shadow
  135. PPTOOLTIP_COLOR_BORDER, // Color for border of the tooltip
  136. PPTOOLTIP_MAX_COLORS
  137. };
  138. enum { PPTOOLTIP_LEFT_TOP = 0,
  139. PPTOOLTIP_RIGHT_TOP,
  140. PPTOOLTIP_LEFT_BOTTOM,
  141. PPTOOLTIP_RIGHT_BOTTOM,
  142. PPTOOLTIP_MAX_DIRECTIONS
  143. };
  144. enum { PPTOOLTIP_EFFECT_SOLID = 0,
  145. PPTOOLTIP_EFFECT_HGRADIENT,
  146. PPTOOLTIP_EFFECT_VGRADIENT,
  147. PPTOOLTIP_EFFECT_HCGRADIENT,
  148. PPTOOLTIP_EFFECT_VCGRADIENT,
  149. PPTOOLTIP_EFFECT_3HGRADIENT,
  150. PPTOOLTIP_EFFECT_3VGRADIENT,
  151. #ifdef PPTOOLTIP_USE_SHADE
  152. PPTOOLTIP_EFFECT_NOISE,
  153. PPTOOLTIP_EFFECT_DIAGSHADE,
  154. PPTOOLTIP_EFFECT_HSHADE,
  155. PPTOOLTIP_EFFECT_VSHADE,
  156. PPTOOLTIP_EFFECT_HBUMP,
  157. PPTOOLTIP_EFFECT_VBUMP,
  158. PPTOOLTIP_EFFECT_SOFTBUMP,
  159. PPTOOLTIP_EFFECT_HARDBUMP,
  160. PPTOOLTIP_EFFECT_METAL,
  161. #endif
  162. PPTOOLTIP_MAX_EFFECTS
  163. };
  164. protected:
  165. enum { PPTOOLTIP_SHOW = 0x100, //the identifier of the timer for show the tooltip
  166. PPTOOLTIP_HIDE = 0x101  //the identifier of the timer for hide the tooltip
  167. };
  168. enum { PPTOOLTIP_TOOL_NOEXIST = -1, //the current tool is not exist
  169. PPTOOLTIP_TOOL_HELPER = -2   //the current tool is a helper
  170. };
  171. // typedef CArray<PPTOOLTIP_HOTRECT, PPTOOLTIP_HOTRECT&> m_arrToolsWnd;
  172. // CMap <HWND, HWND, m_arrToolsWnd, m_arrToolsWnd&> m_mapTools;
  173. CArray<PPTOOLTIP_INFO, PPTOOLTIP_INFO> m_arrTools; //Tools Archive
  174. CArray<PPTOOLTIP_NAME_RES, PPTOOLTIP_NAME_RES> m_arrNameRes; //Names of the resource
  175. HWND   m_hNotifyWnd; // Handle to window for notification about change data
  176. CWnd * m_pParentWnd; // The pointer to the parent window
  177. UINT m_nLastDirection;
  178. CUIntArray m_nLengthLines; //The real length of the lines in the tooltip
  179. CUIntArray m_nHeightLines; //The real heigth of the lines in the tooltip
  180. int m_nIndexCurrentWnd;
  181. int m_nIndexDisplayWnd;
  182.     LOGFONT m_LogFont;                  // Current font in use
  183. //Default setting
  184. COLORREF m_crColor [PPTOOLTIP_MAX_COLORS]; //The indexing colors
  185. UINT m_nSizes [PPTTSZ_MAX_SIZES]; //All sizes 
  186. UINT m_nStyles;
  187. UINT m_nDirection;
  188. UINT m_nEffect;
  189. UINT m_nGranularity;
  190. UINT m_nBehaviour;  //The tooltip's behaviour 
  191. UINT m_nTimeAutoPop; //Retrieve the length of time the tool tip window remains visible if the pointer is stationary within a tool's bounding rectangle
  192. UINT m_nTimeInitial; //Retrieve the length of time the pointer must remain stationary within a tool's bounding rectangle before the tool tip window appears
  193. //The properties of the current tooltip
  194. CPoint  m_ptOriginal;
  195. CRgn m_rgnToolTip;
  196. CRgn    m_rgnShadow;
  197. CSize m_szToolIcon; //the size of the current icon
  198. CSize m_szTextTooltip; //the size of the tooltip's text
  199. CImageList m_imgTooltip; //the image list 
  200. CSize m_szImage;
  201. PPTOOLTIP_INFO m_pToolInfo; //info of the current tooltip
  202. #ifdef PPTOOLTIP_USE_SHADE
  203. void SetShade(CRect rect, UINT shadeID = 0, BYTE granularity = 8, BYTE coloring = 0, COLORREF color = 0);
  204. CCeXDib m_dNormal,m_dh,m_dv;
  205. #endif
  206. // Operations
  207. public:
  208. // Overrides
  209. // ClassWizard generated virtual function overrides
  210. //{{AFX_VIRTUAL(CPPToolTip)
  211. public:
  212. virtual BOOL PreTranslateMessage(MSG* pMsg);
  213. //}}AFX_VIRTUAL
  214. // Implementation
  215. public:
  216. //Functions for the styles
  217. void  SetStyles(DWORD nStyles, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Sets New Style
  218. void  ModifyStyles(DWORD nAddStyles, DWORD nRemoveStyles, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Modifies styles
  219. DWORD GetStyles(int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Gets current Styles
  220. void  SetDefaultStyles(int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Sets default styles
  221. //functions for color
  222. void SetColor(int nIndex, COLORREF crColor); //Sets the color
  223. COLORREF GetColor(int nIndex); //Gets the color
  224. void SetDefaultColors(); //Sets default colors
  225. void SetGradientColors(COLORREF crBegin, COLORREF crMid, COLORREF crEnd, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Sets the gradient's colors
  226. void GetGradientColors(COLORREF & crBegin, COLORREF & crMid, COLORREF & crEnd, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST); //Gets the gradient's colors
  227. //functions for tool
  228. void AddTool(CWnd * pWnd, UINT nIdText, HICON hIcon = NULL, LPCRECT lpRectTool = NULL, UINT nIDTool = 0); //Adds tool
  229. void AddTool(CWnd * pWnd, UINT nIdText, UINT nIdIcon, CSize szIcon = CSize(0, 0), LPCRECT lpRectTool = NULL, UINT nIDTool = 0); //Adds tool
  230. void AddTool(CWnd * pWnd, CString sTooltipText, HICON hIcon = NULL, LPCRECT lpRectTool = NULL, UINT nIDTool = 0); //Adds tool
  231. void AddTool(CWnd * pWnd, CString sTooltipText, UINT nIdIcon, CSize szIcon = CSize(0, 0), LPCRECT lpRectTool = NULL, UINT nIDTool = 0); //Adds tool
  232. void AddTool(PPTOOLTIP_INFO ti); //Adds tool
  233. int  FindTool(CPoint & pt);
  234. int  FindTool(CWnd * pWnd, LPCRECT lpRect = NULL);
  235. int  FindTool(UINT nIDTool);
  236. BOOL GetTool(int nIndexTool, PPTOOLTIP_INFO & ti);
  237. BOOL RemoveTool(int nIndexTool);  //Removes specified tool
  238. void RemoveAllTools(); // Removes all tools
  239. BOOL IsExistTool(int nIndexTool);
  240. void SetAtTool(int nIndexTool, PPTOOLTIP_INFO & ti);
  241. //Functions for resources name
  242. void AddNameOfResource(CString sName, UINT nID, BYTE nTypeRes = TYPE_RES_MASK_BITMAP, COLORREF crMask = RGB(255, 0, 255));
  243. int  FindIdOfResource(CString sName);
  244. int  FindNameOfResource(UINT nID);
  245. void RemoveNameOfResource(int nIndex);
  246. void RemoveAllNamesOfResource();
  247. //Functions for images
  248. void SetImageList(UINT nIdBitmap, int cx, int cy, int nCount, COLORREF crMask = RGB(255, 0, 255));
  249. void SetImageList(HBITMAP hBitmap, int cx, int cy, int nCount, COLORREF crMask = RGB(255, 0, 255));
  250. CImageList * GetImageList(CSize & sz);
  251. //Functions for mask
  252. void  SetMaskTool(int nIndexTool, UINT nMask = 0);
  253. void  ModifyMaskTool(int nIndexTool, UINT nAddMask, UINT nRemoveMask);
  254. UINT  GetMaskTool(int nIndexTool);
  255. //functions for effects
  256. void SetEffectBk(UINT nEffect, BYTE nGranularity = 2, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  257. UINT GetEffectBk(int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  258. UINT GetEffectBk(BYTE & nGranularity, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  259. //functions for
  260. void  SetNotify(HWND hWnd);
  261. void  SetNotify(BOOL bParentNotify = TRUE);
  262. BOOL  GetNotify(); //Is enabled notification
  263. //functions for delay
  264. void SetDelayTime(DWORD dwDuration, UINT nTime);
  265. UINT GetDelayTime(DWORD dwDuration) const;
  266. //functions for sizes
  267. void SetSize(int nSizeIndex, UINT nValue);
  268. UINT GetSize(int nSizeIndex);
  269. void SetDefaultSizes(BOOL bBalloonSize = TRUE);
  270. //functions for direction
  271. void SetDirection(UINT nDirection = PPTOOLTIP_RIGHT_BOTTOM, int nIndex = PPTOOLTIP_TOOL_NOEXIST);
  272. UINT GetDirection(int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  273. // 
  274. void SetBehaviour(UINT nBehaviour = 0, int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  275. UINT GetBehaviour(int nIndexTool = PPTOOLTIP_TOOL_NOEXIST);
  276. // void SetMultipleShow(BOOL bMultiple = TRUE, CWnd * pWnd = NULL);
  277. // BOOL IsMultipleShow(CWnd * pWnd = NULL);
  278. //Functions for the fonts
  279. BOOL  SetFont(CFont & font); //set font
  280. BOOL  SetFont(LPLOGFONT lf); //set font
  281. BOOL  SetFont(LPCTSTR lpszFaceName, int nSizePoints = 8,
  282. BOOL bUnderline = FALSE, BOOL bBold = FALSE,
  283. BOOL bStrikeOut = FALSE, BOOL bItalic = FALSE); //set font
  284. void  SetDefaultFont(); //set default fonts
  285. void  GetFont(CFont & font);
  286. void  GetFont(LPLOGFONT lf);
  287. void RelayEvent(MSG* pMsg);
  288. //The help tooltip functions
  289. void ShowHelpTooltip(CPoint & pt, UINT nIdText, HICON hIcon = NULL); //show tooltip as helper
  290. void ShowHelpTooltip(CPoint & pt, UINT nIdText, UINT nIdIcon); //show tooltip as helper
  291. void ShowHelpTooltip(CPoint & pt, CString sTooltipText, HICON hIcon = NULL); //show tooltip as helper
  292. void ShowHelpTooltip(CPoint & pt, CString sTooltipText, UINT nIdIcon); //show tooltip as helper
  293. void ShowHelpTooltip(CPoint & pt, PPTOOLTIP_INFO & ti); //show tooltip as helper
  294. static short GetVersionI() {return 0x14;}
  295. static LPCTSTR GetVersionC() {return (LPCTSTR)_T("1.4");}
  296. // Generated message map functions
  297. protected:
  298. void KillTimers(UINT nIDTimer = NULL);
  299. CSize PrintTitleString(CDC * pDC, CRect rect, CString str, BOOL bCalculate = TRUE); //Prints the title string
  300. void  DrawHorzLine(CDC * pDC, int xStart, int xEnd, int y) const;
  301. void PrepareDisplayToolTip(CPoint * pt); //Notifying parent, Determines the size of tooltip's rect
  302. void DisplayToolTip(CPoint * pt, CRect * rect);
  303. void SetNewToolTip(int nIndexTool, BOOL bWithDelay = TRUE);
  304. void Pop();
  305. BOOL IsEnabledIndexTool(int nIndex);
  306. BOOL IsCursorInToolTip() const;
  307. inline BOOL IsVisible() const { return ((GetStyle() & WS_VISIBLE) == WS_VISIBLE); }
  308. CSize GetTooltipSize(CString str); //Gets max rectangle for display tooltip text
  309. CSize GetSizeIcon(HICON hIcon) const;
  310. void CalculateInfoBoxRect(CPoint * pt, CRect * rect);
  311. CString SearchBeginOfTag(CString & str, int & nIndex);
  312. void SearchEndOfTag(CString & str, int & nIndex);
  313. CString GetNameOfTag(CString & str, int & nIndex);
  314. CString GetPropertiesOfTag(CString & str, int & nIndex);
  315. CString GetStringValue(CString & str, int & nIndex);
  316. UINT GetUIntValue(CString & str, int & nIndex, UINT nDefValue);
  317. LPLOGFONT GetSystemToolTipFont() const;
  318. int   GetNextHorizDirection(int nDirection) const;
  319. int   GetNextVertDirection(int nDirection) const;
  320. BOOL  TestHorizDirection(int x, int cx, int w_cx, int nDirection, LPRECT rect) const;
  321. BOOL  TestVertDirection(int y, int cy, int w_cy, int nDirection, LPRECT rect) const;
  322. CRect GetWindowRegion(CRgn * rgn, CSize sz, CPoint pt);
  323. void  FillGradient(CDC * pDC, CRect rect, COLORREF colorStart, COLORREF colorFinish, BOOL bHorz = TRUE);
  324. LRESULT SendNotify(CPoint * pt, PPTOOLTIP_INFO & ti);
  325. void  OnRedrawClient(CDC * pDC);
  326. void  OnDraw(CDC * pDC, CRect rect);
  327. void  OnDrawBackground(CDC * pDC, CRect * pRect);
  328. void  OnDrawShadow(CDC * pDC);
  329. CSize DrawIconFromImageList(CDC * pDC, CPoint pt, CSize sz, CImageList & img, int nIndex = 0, BOOL bCalculate = TRUE);
  330. CSize DrawResource(CString sName, CDC * pDC, CPoint pt, int nMaxHeight, CSize szResource, BOOL bCalculate);
  331. CSize DrawBitmap(CDC * pDC, CPoint pt, int nMaxHeight, UINT nID, BOOL bUseMask, COLORREF crMask, CSize szBitmap, BOOL bCalculate);
  332. CSize DrawIcon(CDC * pDC, CPoint pt, int nMaxHeight, UINT nID, CSize szIcon, BOOL bCalculate);
  333. HWND GetWndFromPoint(CPoint & pt, BOOL bGetDisabled = TRUE) const;
  334. // HICON GetIconFromResources(CString sResName, CSize szIcon = CSize(0, 0)) const;
  335. HICON GetIconFromResources(UINT nID, CSize szIcon = CSize(0, 0)) const;
  336. HBITMAP GetBitmapFromResources(UINT nID) const;
  337. //{{AFX_MSG(CPPToolTip)
  338. afx_msg void OnPaint();
  339. afx_msg void OnTimer(UINT nIDEvent);
  340. afx_msg void OnDestroy();
  341. afx_msg void OnKillFocus(CWnd* pNewWnd);
  342. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  343. //}}AFX_MSG
  344. DECLARE_MESSAGE_MAP()
  345. };
  346. /////////////////////////////////////////////////////////////////////////////
  347. //{{AFX_INSERT_LOCATION}}
  348. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  349. #endif