使用C ++ Builder 2009
我有一个继承自TCustomControl
的自定义控件,在该控件上我用内容等绘制了多个正方形(TRect
)。
现在,当我将鼠标悬停在每个正方形上时,我想显示提示,但是我不确定如何最好地实现。
我试图简单地使用TCustomControl
的ShowHint
,并在将鼠标悬停在正方形上时更改Hint
,但是问题是,控件第一次消失后不再显示提示,除非我离开控件并回到它。
我希望我可以在从一个正方形悬停到另一个正方形时简单地“重置”它的状态,但是它不起作用。
假设我的方法一开始是错误的,请让我知道我应该怎么做才能获得理想的效果?
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++ - 使ShowHint在具有多个不同Rect的自定义控件上工作,每个Rect都有自己的Hint,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43321926/