我试图让我的工具提示多行,但我似乎没有太多运气。我在创建后直接调用CWnd :: EnableTooltips()(在本例中是一个编辑框),我处理TTN_NEEDTEXT消息。我的工具提示显示正确,但只显示为一行。
我尝试在处理TTN_NEEDTEXT时向我传递的字符串添加'\ n',并尝试'\ r \ n'。没运气。它只是在工具提示字符串中将它们显示为普通文本。
然后我尝试手动插入0x0D0A,但这只是显示为方框。
我一直在挖掘,并在网上发现了一些随意的引用,说当通过CWnd函数使用工具提示时,多行行为可能不起作用。我宁愿不用CToolTipCtrl替换(因为它是一个相当大的项目)。有没有人遇到过这个?如果是这样,有什么办法吗?
答案 0 :(得分:6)
我成功地使用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
读取代码注意:那里的代码实际执行以下操作,但由于ModuleThreadState在VS6中没有m_pToolTip成员,因此无法在VS6中编译(我在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);
...
}
答案 1 :(得分:0)
我依旧回忆起我已经开始工作了。我google了一下,我想我所做的是设置SetMaxTipWidth()来'强制'工具提示比我输入的文本更窄。我后来切换到我自己的工具提示控制由于其他原因,但我正在使用那里的“设计”相同,我很可能从旧代码中复制了这种行为。如果你已经有一个CToolTipCtrl,我会说一下:)
答案 2 :(得分:0)
这是我在MFC应用程序中打开和关闭的问题。我有所有常见视图/对话框类的子类,可以为我处理工具提示。我发现在某些(比如CListCtrls或CPropertySheets中的头文件)中,每次都不需要你调用SetMaxTipWidth(如上所述),但其他人(CView,CDialog,CPropertyPage,CListCtrl,CTreeCtrl)确实需要你每次调用它弹出工具提示的时间。它有点傻,但似乎有效。