1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
14 * The Original Code is mozilla.org Code.
16 * The Initial Developer of the Original Code is
17 * Netscape Communications Corporation.
18 * Portions created by the Initial Developer are Copyright (C) 2001
19 * the Initial Developer. All Rights Reserved.
22 * Adam Lock <adamlock@netscape.com>
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
40 #include "BrowserToolTip.h"
45 static char THIS_FILE
[] = __FILE__
;
48 /////////////////////////////////////////////////////////////////////////////
51 CBrowserToolTip::CBrowserToolTip()
55 CBrowserToolTip::~CBrowserToolTip()
59 BEGIN_MESSAGE_MAP(CBrowserToolTip
, CWnd
)
60 //{{AFX_MSG_MAP(CBrowserToolTip)
66 BOOL
CBrowserToolTip::Create(CWnd
*pParentWnd
)
68 return CWnd::CreateEx(WS_EX_TOOLWINDOW
,
69 AfxRegisterWndClass(CS_SAVEBITS
, NULL
, GetSysColorBrush(COLOR_INFOBK
), NULL
),
70 _T("ToolTip"), WS_POPUP
| WS_BORDER
, 0, 0, 1, 1, pParentWnd
->GetSafeHwnd(), NULL
);
73 /////////////////////////////////////////////////////////////////////////////
74 // CBrowserToolTip message handlers
76 void CBrowserToolTip::OnPaint()
78 CPaintDC
dc(this); // device context for painting
81 GetClientRect(&rcClient
);
84 int oldBkMode
= dc
.SetBkMode(TRANSPARENT
);
85 COLORREF oldTextColor
= dc
.SetTextColor(GetSysColor(COLOR_INFOTEXT
));
86 HGDIOBJ oldFont
= dc
.SelectObject(GetStockObject(DEFAULT_GUI_FONT
));
88 dc
.DrawText(m_szTipText
, -1, rcClient
, DT_SINGLELINE
| DT_VCENTER
| DT_CENTER
);
90 dc
.SetBkMode(oldBkMode
);
91 dc
.SetTextColor(oldTextColor
);
92 dc
.SelectObject(oldFont
);
95 BOOL
CBrowserToolTip::PreCreateWindow(CREATESTRUCT
& cs
)
97 return CWnd::PreCreateWindow(cs
);
100 void CBrowserToolTip::SetTipText(const CString
&szTipText
)
102 m_szTipText
= szTipText
;
105 void CBrowserToolTip::Show(CWnd
*pOverWnd
, long left
, long top
)
107 // Calculate the client window size
108 CRect
rcNewClient(0,0,0,0);
110 HGDIOBJ oldFont
= pdc
->SelectObject(GetStockObject(DEFAULT_GUI_FONT
));
111 rcNewClient
.bottom
= pdc
->DrawText(m_szTipText
, -1, rcNewClient
,
112 DT_SINGLELINE
| DT_VCENTER
| DT_CENTER
| DT_CALCRECT
);
113 pdc
->SelectObject(oldFont
);
115 rcNewClient
.right
+= 8;
116 rcNewClient
.bottom
+= 8;
118 // Adjust the tooltip to new size
119 AdjustWindowRectEx(rcNewClient
, GetWindowLong(m_hWnd
, GWL_STYLE
), FALSE
, GetWindowLong(m_hWnd
, GWL_EXSTYLE
));
121 // Adjust the left, top position of the tooltip
122 CPoint
ptTip(left
, top
);
123 pOverWnd
->ClientToScreen(&ptTip
);
125 // Make sure tip is below cursor
127 GetCursorPos(&ptCursor
);
128 long cyCursor
= GetSystemMetrics(SM_CYCURSOR
);
129 if (ptTip
.y
< ptCursor
.y
+ cyCursor
)
130 ptTip
.y
= ptCursor
.y
+ cyCursor
;
132 // Make sure tip is fully visible
134 GetDesktopWindow()->GetClientRect(&rcScreen
);
137 else if (ptTip
.x
+ rcNewClient
.Width() > rcScreen
.right
)
138 ptTip
.x
= rcScreen
.right
- rcNewClient
.Width();
141 else if (ptTip
.y
+ rcNewClient
.Height() > rcScreen
.bottom
)
142 ptTip
.y
= rcScreen
.bottom
- rcNewClient
.Height();
144 // Position and show the tip
145 SetWindowPos(&CWnd::wndTop
, ptTip
.x
, ptTip
.y
, rcNewClient
.Width(), rcNewClient
.Height(),
146 SWP_NOACTIVATE
| SWP_SHOWWINDOW
);
149 void CBrowserToolTip::Hide()