Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786

Как узнать, на какое количество пикселей вниз, система по умолчанию, отодвигает подсказку от курсора мыши?

17.10.2023, 14:00. Показов 4371. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как узнать, на какое количество пикселей вниз, система по умолчанию, отодвигает подсказку от курсора мыши?

Создаю свою подсказку и решил сделать автоматическое перемещение подсказки в след за мышкой. Но вот появилась проблема я не знаю на какое количество пикселей вниз, система, отодвигает подсказку от курсора мыши? Я даже не знаю как определить размер по высоте курсора мыши. Знаю что в разных DPI курсор мыши может быть разный.

Сам тултип в системе точно знает на какое количество пикселей вниз от мышки ему перемещается. Но я не знаю этой формулы. Неужели придётся ковырятся в исходниках икспи целую неделю чтобы выяснить или есть где-то документация?

Добавлено через 6 минут
Кстати у меня по моему на 18 пикселей вниз и на 0 пикселей влево, система по умолчанию отодвигает подсказку от курсора мыши. Но как это определить ведь в разных системах по разному.
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2023, 14:00
Ответы с готовыми решениями:

Как узнать размер курсора мыши
Как узнать размер курсора мыши Именно сколько пикселей по высоте, системные сообщения будут выдавать 32-х32 но это нето Добавлено...

Как узнать статус курсора мыши?
Кто может конкретно ответить? Как получить статус(что-то типа в этом роде) курсора, который показывает что курсором можно произвести...

Как узнать координаты курсора мыши
Как узнать положение курсора мыши на страницу?

88
Любитель
 Аватар для Тим70
1047 / 757 / 161
Регистрация: 27.01.2019
Сообщений: 1,531
23.10.2023, 07:57
Студворк — интернет-сервис помощи студентам
HackerVlad, Например
Вложения
Тип файла: zip GetMouseCursorHeight_1.zip (9.9 Кб, 2 просмотров)
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
23.10.2023, 08:31  [ТС]
Цитата Сообщение от Тим70 Посмотреть сообщение
Измени на 1 и будет за окнами
А зачем мне это?_)

Добавлено через 1 минуту
Тим70, из-за твоего флага "За окнами" я не могу даже сфокусировать свою программу. Нажимаешь на панель задач, а программа не активизируется. Мне не понравилось.

Добавлено через 1 минуту
Единственное, что там можно улучшить это перемещение окна и поверхвсехоконность сделать в одной строчке кода:

Visual Basic
1
SetWindowPos Form2.hwnd, HWND_TOPMOST, pt.x, pt.y + ((CursorSizeHeight - HotY) + 1), 0, 0, SWP_NOSIZE Or SWP_NOACTIVATE
Тултип кстати должен быть обязательно поверх всех окон иначе никак
0
Любитель
 Аватар для Тим70
1047 / 757 / 161
Регистрация: 27.01.2019
Сообщений: 1,531
23.10.2023, 09:15
Цитата Сообщение от HackerVlad Посмотреть сообщение
А зачем мне это?_)
Да просто так.
0
dive
 Аватар для I can
4990 / 4746 / 850
Регистрация: 13.04.2015
Сообщений: 9,979
23.10.2023, 10:47
Цитата Сообщение от HackerVlad Посмотреть сообщение
А зачем мне это?
А зачем вообще такая подсказка нужна?
Я вот честно пытался "натянуть сову на глобус" и придумать ей применение, но так и не смог
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
23.10.2023, 15:48  [ТС]
Пытался сделать как в примере MSDN но ничего не получилось
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" (ByVal dwExStyle As Long, ByVal lpClassName As Long, ByVal lpWindowName As Long, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long
 
Private Const TOOLTIPS_CLASS = "tooltips_class32"
Private Const WS_POPUP = &H80000000
Private Const CW_USEDEFAULT = &H80000000
Private Const TTS_ALWAYSTIP = &H1
Private Const TTS_NOPREFIX = &H2
Private Const WS_EX_TOPMOST = &H8&
Private Const TTF_IDISHWND = &H1
Private Const TTF_TRACK = &H20
Private Const TTF_ABSOLUTE = &H80
Private Const WM_USER = &H400
Private Const TTM_ADDTOOLW = (WM_USER + 50)
Private Const TTM_TRACKACTIVATE = (WM_USER + 17)
Private Const TTM_TRACKPOSITION = (WM_USER + 18)
Private Const TTM_SETTOOLINFOW = (WM_USER + 54)
Private Const TTM_UPDATETIPTEXTW = (WM_USER + 57)
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type TOOLINFOW
    cbSize      As Long
    uFlags      As Long
    hwnd        As Long
    uId         As Long
    cRect       As RECT
    hinst       As Long
    lpszText    As String
    lParam      As Long
End Type
 
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Dim hwndTT As Long
Dim ti As TOOLINFOW
Dim g_TrackingMouse As Boolean
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Static oldX As Single
    Static oldY As Single
    Dim pt As POINTAPI
    
    ' // The mouse has just entered the window.
    ' // Request notification when the mouse leaves.
    If g_TrackingMouse = False Then
        ' // Activate the tooltip.
        SendMessage hwndTT, TTM_TRACKACTIVATE, 0, VarPtr(ti)
        
        ' // Update the text.
        SendMessage hwndTT, TTM_SETTOOLINFOW, 0, VarPtr(ti)
        
        SendMessage hwndTT, TTM_UPDATETIPTEXTW, 0, VarPtr(ti)
        
        ' // Position the tooltip. The coordinates are adjusted so that the tooltip does not overlap the mouse pointer.
        
        ' POINT pt = { newX, newY };
        ' ClientToScreen(hDlg, &pt);
        ' SendMessage(g_hwndTrackingTT, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x + 10, pt.y - 20));
        pt.x = x / Screen.TwipsPerPixelX
        pt.y = y / Screen.TwipsPerPixelY
        ClientToScreen Me.hwnd, pt
        pt.x = pt.x + 10
        pt.y = pt.y - 20
        
        Me.Caption = pt.x & "x" & pt.y
        
        SendMessage hwndTT, TTM_TRACKPOSITION, 0, VarPtr(pt)
    End If
End Sub
 
Private Sub Form_Load()
    ' // Create a tooltip.
    hwndTT = CreateWindowEx(WS_EX_TOPMOST, StrPtr(TOOLTIPS_CLASS), 0, WS_POPUP Or TTS_NOPREFIX Or TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0, App.hInstance, ByVal 0&)
    
    If hwndTT > 0 Then
        ' // Set up the tool information. In this case, the "tool" is the entire parent window.
        
        ' g_toolItem.cbSize   = sizeof(TOOLINFO);
        ' g_toolItem.uFlags   = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
        ' g_toolItem.hwnd     = hDlg;
        ' g_toolItem.hinst    = g_hInst;
        ' g_toolItem.lpszText = pText;
        ' g_toolItem.uId      = (UINT_PTR)hDlg;
        ' GetClientRect (hDlg, &g_toolItem.rect);
        
        With ti
            .cbSize = Len(ti)
            .uFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_ABSOLUTE
            .hwnd = Me.hwnd
            .hinst = App.hInstance
            .lpszText = "Привет!"
            .uId = Me.hwnd
            GetClientRect Me.hwnd, .cRect
        End With
        
        ' // Associate the tooltip with the tool window.
        SendMessage hwndTT, TTM_ADDTOOLW, 0, VarPtr(ti)
    End If
End Sub
Добавлено через 7 минут
Цитата Сообщение от The trick Посмотреть сообщение
https://learn.microsoft.com/en... g-tooltips
Помоги пожалуйста, что я сделал не так, где ошибка в коде? Всё в точности так же переписал вроде как и в MSDN но подсказка не появляется

Добавлено через 3 часа 34 минуты
Кажется заработало (это мой черновик, но всё заработало):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" (ByVal dwExStyle As Long, ByVal lpClassName As Long, ByVal lpWindowName As Long, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal CX As Long, ByVal CY As Long, ByVal wFlags As Long) As Long
 
Private Const TOOLTIPS_CLASS = "tooltips_class32"
Private Const WS_POPUP = &H80000000
Private Const CW_USEDEFAULT = &H80000000
Private Const TTS_ALWAYSTIP = &H1
Private Const TTS_NOPREFIX = &H2
Private Const WS_EX_TOPMOST = &H8&
Private Const TTF_IDISHWND = &H1
Private Const TTF_TRACK = &H20
Private Const TTF_ABSOLUTE = &H80
Private Const WM_USER = &H400
Private Const TTM_ADDTOOLW = (WM_USER + 50)
Private Const TTM_TRACKACTIVATE = (WM_USER + 17)
Private Const TTM_TRACKPOSITION = (WM_USER + 18)
Private Const TTM_SETTOOLINFOW = (WM_USER + 54)
Private Const TTM_UPDATETIPTEXTW = (WM_USER + 57)
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOZORDER = &H4
Private Const HWND_TOPMOST = -1
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type TOOLINFOW
    cbSize      As Long
    uFlags      As Long
    hwnd        As Long
    uId         As Long
    cRect       As RECT
    hinst       As Long
    lpszText    As String
    lParam      As Long
End Type
 
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Dim hwndTT As Long
Dim ti As TOOLINFOW
Dim g_TrackingMouse As Boolean
 
Private Sub Command1_Click()
    Dim rct As RECT
    
    GetWindowRect Me.hwnd, rct
    
    Print rct.Left
    Print rct.Top
    Print rct.Right
    Print rct.Bottom
End Sub
 
Private Function MakeLong(ByVal wLow As Integer, ByVal wHigh As Integer) As Long
    MakeLong = wHigh * &H10000 + wLow
End Function
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Static oldX As Single
    Static oldY As Single
    Dim pt As POINTAPI
    
    ' // The mouse has just entered the window.
    ' // Request notification when the mouse leaves.
    If g_TrackingMouse = False Then
        If oldX <> x And oldY <> y Then
            oldX = x
            oldY = y
            
            ' // Activate the tooltip.
            SendMessage hwndTT, TTM_TRACKACTIVATE, True, VarPtr(ti)
            
            ' // Update the text.
            'SendMessage hwndTT, TTM_SETTOOLINFOW, 0, VarPtr(ti)
            
            SendMessage hwndTT, TTM_UPDATETIPTEXTW, 0, VarPtr(ti)
            
            ' // Position the tooltip. The coordinates are adjusted so that the tooltip does not overlap the mouse pointer.
            
            ' POINT pt = { newX, newY };
            ' ClientToScreen(hDlg, &pt);
            ' SendMessage(g_hwndTrackingTT, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x + 10, pt.y - 20));
            pt.x = x / Screen.TwipsPerPixelX
            pt.y = y / Screen.TwipsPerPixelY
            ClientToScreen Me.hwnd, pt
            pt.x = pt.x + 10
            pt.y = pt.y - 20
            
            Me.Caption = pt.x & "x" & pt.y
            
            SendMessage hwndTT, TTM_TRACKPOSITION, 0, MakeLong(pt.x, pt.y)
            'SetWindowPos hwndTT, HWND_TOPMOST, pt.x, pt.y, 0, 0, SWP_NOSIZE Or SWP_NOACTIVATE
        End If
    End If
End Sub
 
Private Sub Form_Load()
    ' // Create a tooltip.
    hwndTT = CreateWindowEx(WS_EX_TOPMOST, StrPtr(TOOLTIPS_CLASS), 0, WS_POPUP Or TTS_NOPREFIX Or TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, Me.hwnd, 0, App.hInstance, ByVal 0&)
    
    If hwndTT > 0 Then
        ' // Set up the tool information. In this case, the "tool" is the entire parent window.
        
        ' g_toolItem.cbSize   = sizeof(TOOLINFO);
        ' g_toolItem.uFlags   = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
        ' g_toolItem.hwnd     = hDlg;
        ' g_toolItem.hinst    = g_hInst;
        ' g_toolItem.lpszText = pText;
        ' g_toolItem.uId      = (UINT_PTR)hDlg;
        ' GetClientRect (hDlg, &g_toolItem.rect);
        
        With ti
            .uFlags = TTF_IDISHWND Or TTF_TRACK Or TTF_ABSOLUTE
            .hwnd = Me.hwnd
            '.hinst = App.hInstance
            .lpszText = "Привет!"
            .uId = Me.hwnd
            GetWindowRect Me.hwnd, .cRect
            .cbSize = Len(ti)
        End With
        
        Print ti.cRect.Left
        Print ti.cRect.Top
        Print ti.cRect.Right
        Print ti.cRect.Bottom
        
        ' // Associate the tooltip with the tool window.
        SendMessage hwndTT, TTM_ADDTOOLW, 0, VarPtr(ti)
    End If
End Sub
Добавлено через 50 секунд
Нашёл эту замечательную функцию, без неё не работало конечно
Visual Basic
1
2
3
Private Function MakeLong(ByVal wLow As Integer, ByVal wHigh As Integer) As Long
    MakeLong = wHigh * &H10000 + wLow
End Function
Добавлено через 37 секунд
В VB6 часто такие подводные камни, я заметил
1
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,673
Записей в блоге: 2
23.10.2023, 19:08
Цитата Сообщение от HackerVlad Посмотреть сообщение
SendMessage hwndTT, TTM_TRACKPOSITION, 0, MakeLong(pt.x, pt.y)
Хрень какая-то, 2 лонга, в один санделятся да еще байвалом, но главное работает и пусть. )
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
23.10.2023, 20:15  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Хрень какая-то
Почему хрень? И почему плохо, что байвалом? А чем надо? Байрефом что ли по твоему?

Добавлено через 3 минуты
testuser2, я не понимаю чем тебя так эти байвалы не устраивают. В апи почти всё на байвалах.

Добавлено через 4 минуты
testuser2, ты знаешь как сложно вообще найти в интернете информацию по коду VB6? Про TTM_TRACKPOSITION нигде не было информации, по VB именно, ни на этом форуме ни где-то ещё в других закаулках интернета. Но я ели ели по сусекам наскрёб необходимую мне информацию для того чтобы что-то толковое написать.

Добавлено через 2 минуты
Про подсказку отслеживания нигде нет информации тоже. Про подсказку с флагом TTF_TRACK. Все примеры они другие. У меня был чёткий вопрос: как перемещать подсказку по координатам и как указывать подсказке где ей появляться. Моей самой основной задачей было это именно как сделать так чтобы подсказка появлялась в координатах которые я захочу, а не как система сама отпозицианирует.

Добавлено через 3 минуты
Я очень давно мечтал найти способ программно переместить подсказку в заданную точку по координатам. Я ещё два года назад об этом думал и не понимал. TTM_TRACKPOSITION тёмный лес был для меня тогда и лишь сегодня я приоткрыл завесу тайны для себя. Хочу так же добавить, что подсказку можно "насильно" перемещать с помощью SetWindowPos но, там есть одно большое НО, сама по себе подсказка изначально появляется там где система скажет ей появляться, а не где ты хочешь, если не использовать так называемую "подсказку отслеживания" и про эту подсказку с флагом TTF_TRACK нигде толком нет информации.

Добавлено через 1 минуту
Форум такой огромный а эту тему ещё никто не поднимал видимо раньше, что я не смог ничего найти. От The Trick тоже ничего небыло того что мне нужно.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
24.10.2023, 11:02  [ТС]
Важно! Новая версия функции GetMouseCursorHeight. Теперь не будет глючить, добавил строчку DeleteObject tICONINFO.hbmColor чтобы небыло переполнение стека или переполнение графического буфера. В общем чтоб графика не глючила, при многократном вызове.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Public Sub GetMouseCursorHeight(SizeHeight As Integer, HotY As Integer)
    Dim tCurInfo As CURSORINFO
    
    ' If there is no mouse cursor, these should be 0
    SizeHeight = 0
    HotY = 0
    
    tCurInfo.cbSize = Len(tCurInfo)
    GetCursorInfo tCurInfo
    
    If tCurInfo.Flags = 1 And CBool(tCurInfo.hCursor) Then
        ' In case we can't figure out the dimensions, this is a best guess
        SizeHeight = 19
        
        Dim tICONINFO As ICONINFO
        
        If GetIconInfo(tCurInfo.hCursor, tICONINFO) Then
            Dim bm As BITMAP
            
            If GetObjectW(tICONINFO.hbmMask, Len(bm), bm) <> 0 Then
                ' Extract the bitmap bits
                Dim max As Long
                Dim curMask() As Byte
                
                max = bm.bmWidth * bm.bmHeight / 8
                ReDim curMask(max * 2 - 1) ' Enough space for the mask and the xor mask
                
                ' bm.bmWidthBytes = UBound(curMask)
                If GetBitmapBits(tICONINFO.hbmMask, UBound(curMask), curMask(0)) <> 0 Then
                    Dim hasXORMask As Byte
                    Dim Empt As Boolean
                    Dim bottom As Long
                    
                    If tICONINFO.hbmColor Then
                    
                    Else
                        ' if no color bitmap, then the hbmMask is a double height bitmap
                        ' with the cursor and the mask stacked.
                        hasXORMask = 1
                        max = max / 2
                    End If
                    
                    ' Go through the bitmap looking for the bottom of the image and/or mask
                    Empt = True
                    bottom = max
                    bottom = bottom - 1
                    
                    Do While bottom >= 0
                        If curMask(bottom) <> &HFF Or (hasXORMask And (curMask(bottom + max) <> 0)) Then
                            Empt = False
                            Exit Do
                        End If
                        
                        bottom = bottom - 1
                    Loop
                    
                    If Empt = False Then
                        ' Go through the bitmap looking for the top of the image and/or mask
                        Dim top As Long
                        Dim byteWidth As Long
                        
                        For top = 0 To max - 1
                            If curMask(top) <> &HFF Or (hasXORMask And (curMask(top + max) <> 0)) Then Exit For
                        Next
                        
                        ' byteWidth = bytes per row AND bytes per vertical pixel
                        byteWidth = bm.bmWidth / 8
                        bottom = bottom / byteWidth
                        top = top / byteWidth
                        
                        SizeHeight = bottom - top + 1
                        HotY = tICONINFO.yHotspot - top
                    Else
                        ' (Final value) We didn't find anything in the bitmap.
                        ' So, we'll make a guess with the information that we have.
                        ' Note: This seems to happen on I-Beams and Cross-hairs -- cursors that
                        ' are all inverted. Strangely, their hbmColor is non-null.
                        SizeHeight = bm.bmHeight
                        HotY = tICONINFO.yHotspot
                    End If
                End If
            End If
            
            DeleteObject tICONINFO.hbmMask
            If tICONINFO.hbmColor Then DeleteObject tICONINFO.hbmColor
        End If
    End If
End Sub
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
25.10.2023, 17:31  [ТС]
По перемещению подсказки я ещё хотел бы поговорить. Я заметил следующею ведь, если перемещать подсказку с помощью сообщения TTM_TRACKPOSITION то наблюдается подглючивание этой подсказки постоянное перерисовывание окна подсказки это не очень красиво. А если перемещать подсказку с помощью функции SetWindowPos то она перемещается на экране красиво без всяких подглючиваний и перерисовываний окна подсказки. Очень жаль, что разработчики майкрософт так плохо сделали с сообщением TTM_TRACKPOSITION, по логике ведь если задаётся это сообщение то требуется только переместить окно подсказки и всё, зачем при этом ещё и перерисовывать подсказку, я понятия не имею. Из-за этого косяка майкрософта и происходит подглючивание подсказки. Спасает функция насильного перемещения любого окна SetWindowPos.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2023, 17:31

Как узнать координаты курсора мыши и отобразить их? c++
Как узнать координаты курсора мыши и отобразить их? c++

Как узнать координаты курсора мыши относительно формы?
Как узнать координаты курсора мыши? Добавлено через 35 минут относительно окна нужно

При наведении курсора мыши на картинку получить матрицу 8х8 со значениями яркости пикселей
Добрый день! Имеется черно-белое изображение, загруженное в программу. Как при наведении курсора мыши в область картинки получить матрицу...

Узнать растояние от начала блока до курсора мыши
Ситуация такая, есть видео плеер, весь контроль написан с нуля, и дело в том что когда на progress bar, когда мы хотим преремотать видео он...

Когда делаю прокрутку мыши вниз она крутит страницу вниз и отдача идёт чуть вверх как исправить?
Когда делаю прокрутку мыши вниз она крутит страницу (в интернете) вниз и отдача идёт чуть вверх как исправить? Мышка новая такая проблема...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
89
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru