使用C ++ Builder 2009

我有一个继承自TCustomControl的自定义控件,在该控件上我用内容等绘制了多个正方形(TRect)。

现在,当我将鼠标悬停在每个正方形上时,我想显示提示,但是我不确定如何最好地实现。

我试图简单地使用TCustomControlShowHint,并在将鼠标悬停在正方形上时更改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记录的指针,您可以根据需要自由修改其字段(尤其是HintStrCursorRect)。

要访问记录,您可以


LParam直接输入到THintInfo*中。
将整个TMessage类型转换为TCMHintShow,然后访问其HintInfo字段。


通过定义自己的CursorRect矩形,可以“将控件划分为几个提示区域”,每个提示区域具有不同的HintStr值。 CursorPos字段指示鼠标在控件中的当前位置。当鼠标移到当前CursorRect之外时,控件将收到一条新的CM_HINTSHOW消息,您可以根据需要更新CursorRectHintStr字段。

关于c++ - 使ShowHint在具有多个不同Rect的自定义控件上工作,每个Rect都有自己的Hint,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43321926/

10-08 22:43