PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » ToolTip : размеры окна


ToolTip : размеры окна

Сообщений 1 страница 4 из 4

1

Возник вопрос - как вычислить размер окна 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 

0

2

TooltipExModule.pbi - самодельный, размеры легче вычленить

0

3

Так же и делается, как я позже сделал. Отказался от затеи, переделал по-другому

0

4

Это потому что код индуский вот и не получается....ха-ха...
зачем в процедуре myWindowToolTip(hwnd, ttText$)-hwnd,есле её нет в функции CreateWindowEx_?
зачем там же открыто окно с  0-выми размерами?ну допустим надо
но что мы хотим получить от GetClientRect_(hwnd, @winRect.RECT)? с указанием hwnd windows окна?
Хе одназначно мндусский код..............

-1


Вы здесь » PureBasic - форум » PureBasic для Windows » ToolTip : размеры окна