【发布时间】:2015-10-23 10:38:30
【问题描述】:
自 Windows XP 时代以来,我们多年来一直在使用在我们的旧版 VB6 组件中创建经典 Win32 多行工具提示的代码。它在除 Windows 10 之外的所有最新版本的 MS Windows(7、8.1)中都能正常工作。此操作系统的工具提示中出现一条寄生的水平灰线。这个问题的最佳演示是一个包含多行文本的工具提示窗口(主要提示文本是多行的和/或工具提示有一个粗体标题):
正确的工具提示应该如下所示(来自 Windows 8.1 的屏幕):
当工具提示窗口没有平铺/图标但仅包含多行文本时,以下是同一问题的另一个示例:
这条寄生灰线也出现在单行工具提示中 - 虽然乍一看并不明显:
可能是什么?是 Windows 10 中的错误,还是工具提示 API 发生了变化?
下面是用于初始化工具提示的方法代码:
Public Function Create(ByVal ParentHwnd As Long) As Boolean
Dim lWinStyle As Long
If m_lTTHwnd <> 0 Then
DestroyWindow m_lTTHwnd
End If
m_lParentHwnd = ParentHwnd
lWinStyle = TTS_ALWAYSTIP Or TTS_NOPREFIX
m_lTTHwnd = CreateWindowExA(0&, _
TOOLTIPS_CLASS, _
vbNullString, _
lWinStyle, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
0&, _
0&, _
App.hInstance, _
0&)
'now set our tooltip info structure
Dim tiA As TOOLINFOA
Dim tiW As TOOLINFOW
If g_bIsNt Then
With tiW
.lSize = Len(tiW)
.lFlags = TTF_SUBCLASS Or TTF_IDISHWND
.hWnd = m_lParentHwnd
.lId = m_lParentHwnd '0
.hInstance = App.hInstance
.lpStr = StrPtr(mvarTipText)
End With
Else
With tiA
.lSize = Len(tiA)
.lFlags = TTF_SUBCLASS Or TTF_IDISHWND
.hWnd = m_lParentHwnd
.lId = m_lParentHwnd
.hInstance = App.hInstance
.lpStr = mvarTipText
End With
End If
'add the tooltip structure
If g_bIsNt Then
SendMessage m_lTTHwnd, TTM_ADDTOOLW, 0&, tiW
Else
SendMessage m_lTTHwnd, TTM_ADDTOOLA, 0&, tiA
End If
'if we want a title or we want an icon
If mvarTitle <> vbNullString Or mvarIcon <> igToolTipIconNone Then
If g_bIsNt Then
SendMessage m_lTTHwnd, TTM_SETTITLEW, mvarIcon, ByVal StrPtr(mvarTitle)
Else
SendMessage m_lTTHwnd, TTM_SETTITLEA, mvarIcon, ByVal mvarTitle
End If
End If
' set the time parameters
SendMessageByLongA m_lTTHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, mvarVisibleTime
SendMessageByLongA m_lTTHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, mvarDelayTime
'according to MSDN, we should set TTM_SETMAXTIPWIDTH to a positive value
'to enable multiline tooltips
SendMessageByLongA m_lTTHwnd, TTM_SETMAXTIPWIDTH, 0, 100000
End Function
【问题讨论】:
-
看到“正确”工具提示的图像会很有趣。
-
Windows 10 赶在人为的最后期限前推出,难怪它有一些错误 :)
-
我看到您的 一个未记录的 Windows 功能 评论将宽度设置为 2147483647 像素 ...
-
@AlexK.,幸好现在是documented,但这不是问题的根源。我为 TTM_SETMAXTIPWIDTH 尝试了不同的 lParam 值,但没有任何改变。
-
@MarkHurd,天哪,我没有注意到这条灰线也出现在单行工具提示中!让我更新一下我的问题。
标签: winapi vb6 tooltip windows-10 multiline