使用CWnd :: EnableTooltips()可以实现多行工具提示吗?

cto*_*eal 2 c++ mfc tooltip

我试图让我的工具提示多行,但我似乎没有太多运气.我在创建后直接调用CWnd :: EnableTooltips()(在本例中是一个编辑框),我处理TTN_NEEDTEXT消息.我的工具提示显示正确,但只显示为一行.

我尝试在处理TTN_NEEDTEXT时传递给我传递的字符串'\n',并尝试'\ r \n'.没运气.它只是在工具提示字符串中将它们显示为普通文本.

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

我一直在挖掘,并在网上发现了一些随意的引用,说当通过CWnd函数使用工具提示时,多行行为可能不起作用.我宁愿不用CToolTipCtrl替换(因为它是一个相当大的项目).有没有人遇到过这个?如果是这样,有什么办法吗?

Rud*_*ddy 6

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

适用于DevStudio 6

CToolTipCtrl* pToolTip = AfxGetThreadState()->m_pToolTip;
pToolTip->SetMaxTipWidth(SHRT_MAX);
Run Code Online (Sandbox Code Playgroud)

你每次打电话都要再打电话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);
...
}
Run Code Online (Sandbox Code Playgroud)