gpt4 book ai didi

c++ - 如何在 MFC 中获得多行工具提示

转载 作者:可可西里 更新时间:2023-11-01 18:27:01 25 4
gpt4 key购买 nike

现在,当我将鼠标悬停在编辑框上时,会弹出一个工具提示。问题在于此工具提示包含多条错误消息,并且它们都排在一长行中。我需要让每条错误消息都在其自己的行中。错误消息包含在 CString 中,并用新行分隔它们。

我现有的代码如下。

BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
// TCHAR szFullText[256];
CString strTipText=_T("");
UINT nID = pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
}

//m_errProjAccel[ch] contains 1 or more error messages each seperated by a new line.
if((int)nID >= ID_PROJECTED_ACCEL1 && (int)nID < ID_PROJECTED_ACCEL1 + PROJECTED_ROWS -1 ) {
int ch = nID - ID_PROJECTED_ACCEL1;
strTipText = m_errProjAccel[ch];
}


#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
else
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
else
lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]));
#endif
*pResult = 0;

// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);

return TRUE; // message was handled
}

最佳答案

解释了如何创建多行工具提示 here在 MSDN 库中 - 阅读“实现多行工具提示”部分。您应该将 TTM_SETMAXTIPWIDTH 消息发送到 ToolTip 控件以响应 TTN_GETDISPINFO 通知以强制它使用多行。在您的字符串中,您应该使用 \r\n 分隔行。

此外,如果您的文本超过 80 个字符,您应该使用 NMTTDISPINFO 结构的 lpszText 成员,而不是复制到 szText 数组。

关于c++ - 如何在 MFC 中获得多行工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/153134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com