BalloonHelp.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:10k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #ifndef __BALLOONHELP_H_
  20. #define __BALLOONHELP_H_
  21. #include <string>
  22. #include <tchar.H>
  23. #include <ATLSTR.h>
  24. #include <ATLTYPES.h>
  25. #include <atlbase.h>
  26. #include <atlcom.h>
  27. #include <atlwin.h>
  28. #include <atlcoll.h>
  29. class CBalloonHelp : public CWindowImpl<CBalloonHelp>
  30. {
  31. public:
  32. CBalloonHelp();
  33. virtual ~CBalloonHelp();
  34. static ATL::CWndClassInfo& GetWndClassInfo() 
  35. static ATL::CWndClassInfo wc = 
  36. // { sizeof(WNDCLASSEX), CS_DBLCLKS | CS_SAVEBITS | CS_DROPSHADOW, StartWindowProc, 
  37. { sizeof(WNDCLASSEX), CS_DBLCLKS | CS_SAVEBITS, StartWindowProc, 
  38. 0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW + 1), NULL, _T("BalloonHelpClass"), NULL}, 
  39. NULL, NULL, IDC_ARROW, TRUE, 0, _T("") 
  40. }; 
  41. return wc; 
  42. }
  43. // options
  44. static const unsigned int unHIDE_AFTER_CREATED;
  45. static const unsigned int unCLOSE_ON_LBUTTON_UP;   // closes window on WM_LBUTTON_UP
  46. static const unsigned int unCLOSE_ON_RBUTTON_UP;   // closes window on WM_RBUTTON_UP
  47. static const unsigned int unCLOSE_ON_MOUSE_MOVE;   // closes window when user moves mouse past threshhold
  48. static const unsigned int unCLOSE_ON_KEYPRESS;     // closes window on the next keypress message sent to this thread.    (!!! probably not thread safe !!!)
  49. static const unsigned int unDELETE_THIS_ON_CLOSE;  // deletes object when window is closed.  Used by LaunchBalloon(), use with care
  50. static const unsigned int unSHOW_CLOSE_BUTTON;     // shows close button in upper right
  51. static const unsigned int unSHOW_INNER_SHADOW;     // draw inner shadow in balloon
  52. static const unsigned int unSHOW_TOPMOST;          // place balloon above all other windows
  53. static const unsigned int unDISABLE_FADEIN;        // disable the fade-in effect (overrides system and user settings)
  54. static const unsigned int unDISABLE_FADEOUT;       // disable the fade-out effect (overrides system and user settings)
  55. static const unsigned int unDISABLE_FADE;          // disable the fade-in/fade-out effects (overrides system and user settings)
  56. BOOL Create(const CString& strTitle,         // title of balloon
  57. const CString& strContent,       // content of balloon
  58. const CPoint& ptAnchor,          // anchor (tail position) of balloon
  59. unsigned int unOptions,          // options (see above)
  60. HWND pParentWnd = NULL,         // parent window (NULL == MFC main window)
  61. const CString strURL = "",       // URL to open (ShellExecute()) when clicked
  62. unsigned int unTimeout = 0,      // delay before closing automatically (milliseconds)
  63. HICON hIcon = NULL);             // icon to display
  64. // Show a help balloon on screen.
  65. static void LaunchBalloon(const CString& strTitle, const CString& strContent, 
  66. const CPoint& ptAnchor, 
  67. LPCTSTR szIcon = IDI_EXCLAMATION,
  68. unsigned int unOptions = unSHOW_CLOSE_BUTTON,
  69. HWND pParentWnd = NULL, 
  70. const CString strURL = "",
  71. unsigned int unTimeout = 10000);
  72. // Sets the font used for drawing the balloon title.  Deleted by balloon, do not use CFont* after passing to this function.
  73. void SetTitleFont(HFONT);
  74. // Sets the font used for drawing the balloon content.  Deleted by balloon, do not use CFont* after passing to this function.
  75. void SetContentFont(HFONT);
  76. // Sets the icon displayed in the top left of the balloon (pass NULL to hide icon)
  77. void SetIcon(HICON hIcon);
  78. // Sets the icon displayed in the top left of the balloon (pass NULL hBitmap to hide icon)
  79. void SetIcon(HBITMAP hBitmap, COLORREF crMask);
  80. // Sets the icon displayed in the top left of the balloon
  81. void SetIcon(HBITMAP hBitmap, HBITMAP hMask);
  82. // Set icon displayed in the top left of the balloon to image # nIconIndex from pImageList
  83. void SetIcon(HIMAGELIST pImageList, int nIconIndex);
  84. // Sets the URL to be opened when balloon is clicked.  Pass "" to disable.
  85. void SetURL(const CString& strURL);
  86. // Sets the number of milliseconds the balloon can remain open.  Set to 0 to disable timeout.
  87. void SetTimeout(unsigned int unTimeout);
  88. // Sets the distance the mouse must move before the balloon closes when the unCLOSE_ON_MOUSE_MOVE option is set.
  89. void SetMouseMoveTolerance(int nTolerance);
  90. // Sets the CPoint to which the balloon is "anchored"
  91. void SetAnchorPoint(CPoint ptAnchor);
  92. // Sets the title of the balloon
  93. void SetTitle(const CString& strTitle);
  94. // Sets the content of the balloon (plain text only)
  95. void SetContent(const CString& strContent);
  96. // Sets the forground (text and border) color of the balloon
  97. void SetForegroundColor(COLORREF crForeground);
  98. // Sets the background color of the balloon
  99. void SetBackgroundColor(COLORREF crBackground);
  100. // Size and position the balloon window on the screen.
  101. void PositionWindow(bool forceRedraw=false);
  102. // Displays the balloon on the screen, performing fade-in if enabled.
  103. void ShowBalloon(void);
  104. // Removes the balloon from the screen, performing the fade-out if enabled
  105. void HideBalloon(void);
  106. // Removes the balloon from the screen immediately
  107. void HideBalloonImmediately(void);
  108. protected:
  109. // layout constants
  110. static const int nTIP_TAIL;
  111. static const int nTIP_MARGIN;
  112. // mouse move tolerance
  113. static const int nMOUSE_MOVE_TRIGGER;
  114. enum BALLOON_QUADRANT { BQ_TOPRIGHT, BQ_TOPLEFT, BQ_BOTTOMRIGHT, BQ_BOTTOMLEFT };
  115. BALLOON_QUADRANT GetBalloonQuadrant();
  116. // Calculate the dimensions and draw the balloon header
  117. virtual CSize DrawHeader(HDC pDC, bool bDraw = TRUE);
  118. // Calculate the dimensions and draw the balloon contents
  119. virtual CSize DrawContent(HDC pDC, int nTop, bool bDraw = TRUE);
  120. // Calculate the dimensions required to draw the balloon header
  121. CSize CalcHeaderSize(HDC pDC) { return DrawHeader(pDC, FALSE); }
  122. // Calculate the dimensions required to draw the balloon content
  123. CSize CalcContentSize(HDC pDC) { return DrawContent(pDC, 0, FALSE); }
  124. // Calculate the total size needed by the balloon window
  125. CSize CalcWindowSize();
  126. // Calculate the total size needed by the client area of the balloon window
  127. CSize CalcClientSize();
  128. BEGIN_MSG_MAP(CBalloonHelp)
  129. MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
  130. MESSAGE_HANDLER(WM_PAINT, OnPaint)
  131. MESSAGE_HANDLER(WM_NCPAINT, OnNcPaint)
  132. MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
  133. MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
  134. MESSAGE_HANDLER(WM_NCCALCSIZE, OnNcCalcSize)
  135. MESSAGE_HANDLER(WM_TIMER, OnTimer)
  136. MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
  137. MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
  138. MESSAGE_HANDLER(WM_RBUTTONUP, OnRButtonUp)
  139. MESSAGE_HANDLER(WM_CLOSE, OnClose)
  140. END_MSG_MAP()
  141. LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  142. LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  143. LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  144. LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  145. LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  146. LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  147. LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  148. LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  149. LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  150. LRESULT OnRButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  151. LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  152. private:
  153. // keyboard hook callback
  154. static LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam);
  155. // handle to the hook, if set
  156. static HHOOK            s_hKeyboardHook;
  157. // windows to close when user hits a key
  158. static CAtlArray<HWND>  s_apKeyboardCloseWnds;
  159. // synchronization
  160. static CComCriticalSection s_KeyboardHookSection;
  161. // Sets up the keyboard hook; adds this to list to close
  162. void SetKeyboardHook();
  163. // Removes this from the list of windows to close; removes hook if not in use.
  164. void RemoveKeyboardHook();
  165. // Wrapper for possibly-existing API call
  166. BOOL SetLayeredWindowAttributes(COLORREF crKey, int nAlpha, DWORD dwFlags);
  167. // layered window API, if available
  168. typedef BOOL (WINAPI* FN_SET_LAYERED_WINDOW_ATTRIBUTES)(HWND,COLORREF,BYTE,DWORD);
  169. FN_SET_LAYERED_WINDOW_ATTRIBUTES m_fnSetLayeredWindowAttributes;
  170. unsigned int   m_unOptions;
  171. unsigned int   m_unTimeout;      // max time to show, in milliseconds
  172. CString        m_strTitle;       // text to shwo in title area
  173. CString        m_strContent;     // text to show in content area
  174. CString        m_strURL;         // url to open, if clicked.
  175. CPoint          m_ptAnchor;       // "anchor" (CPoint of tail)
  176. HIMAGELIST     m_ilIcon;         // icon
  177. HFONT          m_pTitleFont;     // font to use for title
  178. HFONT          m_pContentFont;   // font to use for content
  179.    
  180. COLORREF       m_crBackground;   // Background color for balloon   
  181. COLORREF       m_crForeground;   // Foreground color for balloon
  182.    
  183. HRGN           m_rgnComplete;    // Clipping / Drawing region
  184. int            m_nAlpha;         // current alpha, for fade in / fade out
  185. CPoint          m_ptMouseOrig;    // original mouse position; for hiding on mouse move
  186. UINT           m_uCloseState;    // current state of the close button
  187. int            m_nMouseMoveTolerance;  // distance mouse has to move before balloon will close.
  188. protected:
  189. void OnFinalMessage(HWND);
  190. };
  191. #endif