使 ShowHint 在具有多个不同 Rect 的自定义控件上工作,每个 Rect 都有自己的 Hint
Make ShowHint work on custom control with several different Rects, each with their own Hint
使用 C++ Builder 2009
我有一个继承自 TCustomControl
的自定义控件,我在上面绘制了几个带有内容等的正方形 (TRect
)
我现在想在将鼠标悬停在每个方块上时显示提示,但我不确定如何最好地实现这一点。
我试图简单地使用 TCustomControl
的 ShowHint
,并在我将鼠标悬停在方块上时更改 Hint
,但问题是控件不再显示提示在它第一次消失之后,除非我离开控制然后回到它。
我希望我可以简单地 'reset' 它是从一个方块悬停到另一个方块时的状态,但它不起作用。
假设我的方法一开始是错误的,请告诉我应该怎么做才能达到预期的效果?
if (State == rsHover && Item->FState != rsHover) // Not in the rsHover state yet, but going to
{
if (Item->Hint.Length())
{
if (ShowHint)
{
// Attempt to reset Hint's internal working, to no avail
Hint = L"" ;
ShowHint = false ;
}
Hint = Item->Hint ;
ShowHint = true ;
}
else
{
ShowHint = false ;
}
}
else if (State != rsHover)
{
ShowHint = false ;
}
实现此功能的正确方法是让您的组件处理 CM_HINTSHOW
消息。消息的 LParam
值将是指向 THintInfo
记录的指针,您可以根据需要自由修改其字段(特别是 HintStr
和 CursorRect
)。
要访问记录,您可以
直接将 LParam
类型转换为 THintInfo*
。
将整个 TMessage
类型转换为 TCMHintShow
,然后访问其 HintInfo
字段。
通过定义您自己的 CursorRect
矩形,您可以“[将您的控件] 分成几个提示区域”,每个区域具有不同的 HintStr
值。 CursorPos
字段指示鼠标在控件中的当前位置。当鼠标移出当前CursorRect
之外时,控件会收到新的CM_HINTSHOW
消息,您可以根据需要更新CursorRect
和HintStr
字段。
使用 C++ Builder 2009
我有一个继承自 TCustomControl
的自定义控件,我在上面绘制了几个带有内容等的正方形 (TRect
)
我现在想在将鼠标悬停在每个方块上时显示提示,但我不确定如何最好地实现这一点。
我试图简单地使用 TCustomControl
的 ShowHint
,并在我将鼠标悬停在方块上时更改 Hint
,但问题是控件不再显示提示在它第一次消失之后,除非我离开控制然后回到它。
我希望我可以简单地 'reset' 它是从一个方块悬停到另一个方块时的状态,但它不起作用。
假设我的方法一开始是错误的,请告诉我应该怎么做才能达到预期的效果?
if (State == rsHover && Item->FState != rsHover) // Not in the rsHover state yet, but going to
{
if (Item->Hint.Length())
{
if (ShowHint)
{
// Attempt to reset Hint's internal working, to no avail
Hint = L"" ;
ShowHint = false ;
}
Hint = Item->Hint ;
ShowHint = true ;
}
else
{
ShowHint = false ;
}
}
else if (State != rsHover)
{
ShowHint = false ;
}
实现此功能的正确方法是让您的组件处理 CM_HINTSHOW
消息。消息的 LParam
值将是指向 THintInfo
记录的指针,您可以根据需要自由修改其字段(特别是 HintStr
和 CursorRect
)。
要访问记录,您可以
直接将
LParam
类型转换为THintInfo*
。将整个
TMessage
类型转换为TCMHintShow
,然后访问其HintInfo
字段。
通过定义您自己的 CursorRect
矩形,您可以“[将您的控件] 分成几个提示区域”,每个区域具有不同的 HintStr
值。 CursorPos
字段指示鼠标在控件中的当前位置。当鼠标移出当前CursorRect
之外时,控件会收到新的CM_HINTSHOW
消息,您可以根据需要更新CursorRect
和HintStr
字段。