MFC工具提示不显示任何文本
我有一个vs2008上的项目,没有unicode支持,也没有工具提示文本显示。我在另一个支持unicode的项目上尝试了相同的代码,效果很好。我做错了什么MFC工具提示不显示任何文本,mfc,tooltip,Mfc,Tooltip,我有一个vs2008上的项目,没有unicode支持,也没有工具提示文本显示。我在另一个支持unicode的项目上尝试了相同的代码,效果很好。我做错了什么 BOOL CListCtrl_ToolTip::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult) { CPoint pt(GetMessagePos()); ScreenToClient(&pt); int nRow, nCol; Cel
BOOL CListCtrl_ToolTip::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
int nRow, nCol;
CellHitTest(pt, nRow, nCol);
CString tooltip = GetToolTipText(nRow, nCol);
//MessageBox(tooltip,NULL, MB_OK);
if (tooltip.IsEmpty())
return FALSE;
// Non-unicode applications can receive requests for tooltip-text in unicode
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, static_cast<LPCTSTR>(tooltip), sizeof(pTTTA->szText));
else
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, static_cast<LPCTSTR>(tooltip), sizeof(pTTTA->szText));
else
lstrcpyn(pTTTW->szText, static_cast<LPCTSTR>(tooltip), sizeof(pTTTW->szText)/sizeof(WCHAR));
#endif
// If wanting to display a tooltip which is longer than 80 characters,
// then one must allocate the needed text-buffer instead of using szText,
// and point the TOOLTIPTEXT::lpszText to this text-buffer.
// When doing this, then one is required to release this text-buffer again
return TRUE;
}
BOOL-CListCtrl\u工具提示::OnToolNeedText(UINT-id、NMHDR*pNMHDR、LRESULT*pResult)
{
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
int nRow,nCol;
细胞毒性试验(pt、nRow、nCol);
CString tooltip=gettooltipext(nRow,nCol);
//MessageBox(工具提示,空,MB_OK);
if(tooltip.IsEmpty())
返回FALSE;
//非unicode应用程序可以接收unicode格式的工具提示文本请求
TOOLTIPTEXTA*pTTTA=(TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW*pTTTW=(TOOLTIPTEXTW*)pNMHDR;
#ifndef\u UNICODE
如果(pNMHDR->code==TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText,静态施法(工具提示),sizeof(pTTTA->szText));
其他的
#否则
如果(pNMHDR->code==TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText,静态施法(工具提示),sizeof(pTTTA->szText));
其他的
lstrcpyn(pttw->szText,静态施法(工具提示),sizeof(pttw->szText)/sizeof(WCHAR));
#恩迪夫
//如果要显示长度超过80个字符的工具提示,
//然后必须分配所需的文本缓冲区,而不是使用szText,
//并将TOOLTIPTEXT::lpszText指向此文本缓冲区。
//执行此操作时,需要再次释放此文本缓冲区
返回TRUE;
}
工具提示字符串已填充所需的值,但文本不会显示。分配pTTW->szText时出现问题。我尝试将字符串的地址分配给lpszText,但工具提示显示了中文符号或其他内容。可能listview控件总是为
TTN\u NEEDTEXT
获取unicode消息,并且无论项目是unicode还是ANSI。因此,您不能依赖于#定义UNICODE
相关问题:
这应该适用于unicode和非unicode:
BEGIN_MESSAGE_MAP(TList, CListCtrl)
ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolNeedText)
ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolNeedText)
END_MESSAGE_MAP()
BOOL TList::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
int nRow, nCol;
CellHitTest(pt, nRow, nCol);
CString tooltip = GetToolTipText(nRow, nCol);
if (tooltip.IsEmpty())
return FALSE;
if (pNMHDR->code == TTN_NEEDTEXTW)
{
TOOLTIPTEXTW* ttext = (TOOLTIPTEXTW*)pNMHDR;
CStringW sw(tooltip);
lstrcpynW(ttext->szText, sw, sizeof(ttext->szText)/sizeof(wchar_t));
}
else
{
TOOLTIPTEXTA* ttext = (TOOLTIPTEXTA*)pNMHDR;
CStringA sa(tooltip);
lstrcpynA(ttext->szText, sa, sizeof(ttext->szText));
}
return TRUE;
}