Возник вопрос - как вычислить размер окна tooltip? Получаются неверные значения.
#TTF_TRACK = $20
#TTF_ABSOLUTE = $80
cursorWidth = GetSystemMetrics_(#SM_CXCURSOR)
cursorHeight = GetSystemMetrics_(#SM_CYCURSOR)
Macro MakeLong(low, high)
low | high <<16
EndMacro
Global ti.TOOLINFO
; --> Create tooltip for entire window
Procedure myWindowToolTip(hwnd, ttText$)
ti.TOOLINFO\cbSize = SizeOf(TOOLINFO)
If hToolTip = 0
hToolTip = CreateWindowEx_(#WS_EX_TRANSPARENT|#WS_EX_TOPMOST, "ToolTips_Class32","", #WS_POPUP | #TTS_NOPREFIX | #TTS_ALWAYSTIP, 0, 0, 0, 0, WindowID(0), 0, GetModuleHandle_(0), 0)
EndIf
GetClientRect_(hwnd, @winRect.RECT)
#TTF_TRANSPARENT=256
ti\uFlags = #TTF_IDISHWND | #TTF_TRACK | #TTF_TRANSPARENT | #TTF_ABSOLUTE
ti\hwnd = hwnd
ti\hInst = GetModuleHandle_(0)
ti\uId = 0
ti\lpszText = @ttText$
ti\rect\left = winRect\left
ti\rect\top = winRect\top
ti\rect\right = winRect\right
ti\rect\bottom = winRect\bottom
SendMessage_(hToolTip, #TTM_ADDTOOL, 0, ti)
SendMessage_(hToolTip, #TTM_TRACKACTIVATE, #False, @ti)
ProcedureReturn hToolTip
EndProcedure
If OpenWindow(0, 0, 0, 270, 100, "Click the left mouse button below", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
hTT = myWindowToolTip(WindowID(0), "Smart ToolTip")
;SetWindowPos_(hTT, #HWND_TOPMOST, 100, 100, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOACTIVATE)
AddWindowTimer(0, 123, 100)
t$=""
t0.TOOLINFO
t0\hInst=GetModuleHandle_(0)
t0\hwnd=WindowID(0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Timer
wah.l=FindWindow_(@"Winamp v1.x",0)
If wah
tl.l=SendMessage_(wah,#WM_GETTEXTLENGTH,0,0)
If tl
*m=AllocateMemory(tl*2+4)
SendMessage_(wah,#WM_GETTEXT,tl+1,*m)
s$=PeekS(*m)
If t$<>s$
t$=s$
s$=Mid(s$,1,Len(s$)-9)
ti\lpszText = @s$
ti.TOOLINFO\cbSize = SizeOf(TOOLINFO)
SendMessage_(hTT, #TTM_UPDATETIPTEXT, 0, @ti)
FreeMemory(*m)
;position
wn.l=FindWindow_(@"Shell_TrayWnd",0)
GetWindowRect_(GetDesktopWindow_(),re.RECT)
GetWindowRect_(wn,re)
my=re\top
;SendMessage_(hTT, #TTM_ADJUSTRECT, 1, @re)
my=my-20;(re\bottom-re\top)
;Debug re\right-re\left
t0\cbSize=SizeOf(TOOLINFO)
SendMessage_(hTT, #TTM_GETTOOLINFO, 0, @t0)
mx=0
SendMessage_(hTT, #TTM_TRACKACTIVATE, #True, @ti)
SendMessage_(hTT, #TTM_TRACKPOSITION, 0, MakeLong(mx, my))
EndIf
EndIf
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
End