【问题标题】:Are multiline tooltips possible using CWnd::EnableTooltips()?多行工具提示是否可以使用 CWnd::EnableTooltips()?
【发布时间】:2010-03-18 02:10:48
【问题描述】:

我正在尝试将我的工具提示设置为多行,但我似乎不太幸运。我在创建后直接调用 CWnd::EnableTooltips()(在本例中为编辑框)并处理 TTN_NEEDTEXT 消息。我的工具提示正确显示,但仅显示为单行。

我尝试在处理 TTN_NEEDTEXT 时将“\n”添加到我传递的字符串中,并且还尝试了“\r\n”。没运气。它只是将它们显示为工具提示字符串中的普通文本。

然后我尝试手动插入 0x0D0A,但这只是显示为框。

我一直在挖掘,并在网上找到了一些临时参考资料,说当通过 CWnd 函数使用工具提示时,多行行为可能不起作用。我宁愿不必用 CToolTipCtrl 替换(因为它是一个相当大的项目)。有没有人遇到过这个?如果是这样,有什么办法可以解决吗?

【问题讨论】:

    标签: c++ mfc tooltip


    【解决方案1】:

    我使用TTN_NEEDTEXT处理程序中的以下代码成功地将\n分隔的工具提示变成了多行工具提示

    对于 DevStudio 6

    CToolTipCtrl* pToolTip = AfxGetThreadState()->m_pToolTip;
    pToolTip->SetMaxTipWidth(SHRT_MAX);
    

    每次调用TTN_NEEDTEXT 时,您都必须再次调用,否则它不会粘住。

    我发现这个技巧是从http://www.codeproject.com/KB/list/CListCtrl_ToolTip.aspx读取代码

    注意:那里的代码实际上执行以下操作,但不会在 VS6 中编译,因为 ModuleThreadState 在 VS6 中没有 m_pToolTip 成员(我没有在 VS2005+ 中尝试过以下操作,但我认为它会在那里工作)

    BOOL CListCtrl_EnableToolTip::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
    {
    ...
       // Break tooltip into multiple lines if it contains newlines (/n/r)
       CToolTipCtrl* pToolTip = AfxGetModuleThreadState()->m_pToolTip;
       if (pToolTip)
          pToolTip->SetMaxTipWidth(SHRT_MAX);
    ...
    }
    

    【讨论】:

    • 虽然这样做不会使转义字符对我有用,但它似乎确实使 0x0D0A 工作,这对我来说已经足够了。 SetMaxTipWidth 神奇地使某些事情起作用似乎很荒谬。我假设它做了它应该做的事情(设置最大尖端宽度!),但我猜它也有隐藏的好处。谢谢你们俩。
    • 是的,无证幻数是我最喜欢的东西。
    【解决方案2】:

    我隐约记得我得到了它的工作。我用谷歌搜索了一下,我认为我所做的是将 SetMaxTipWidth() 设置为“强制”工具提示比我输入的文本更窄。后来我出于其他原因切换到自己的工具提示控件,但我正在使用那里的“设计”相同,很可能是我从旧代码中复制了该行为。试一试我会说如果你已经有一个 CToolTipCtrl :)

    【讨论】:

    • 问题在于我没有想要换行的特定宽度,我只是想要换行符。如果没有其他方法可以做到,那我想这就是我必须做的,但这有点麻烦。 (而且有点奇怪。为什么除了工具提示之外的所有地方都支持转义字符?)
    • 工具提示是一种奇怪的野兽。我尽量避免使用内置的,因为它们使用起来不直观,而且不是很灵活,正如你所发现的:)
    【解决方案3】:

    这是我在 MFC 应用程序中一直在努力解决的问题。我有所有常见视图/对话框类的子类来处理我的工具提示。我发现在某些(例如 CListCtrls 或 CPropertySheets 中的标题)中不需要您每次都调用 SetMaxTipWidth(如上所述),但其他(CView、CDialog、CPropertyPage、CListCtrl、CTreeCtrl)确实需要您每次调用它工具提示将弹出的时间。它有点傻,但它似乎工作。

    【讨论】:

      猜你喜欢
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      相关资源
      最近更新 更多