当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在MFC中获得多行工具提示》经验,为你挑选了1个好方法。

现在,当我将鼠标悬停在编辑框上时,我会弹出一个工具提示.问题是这个工具提示包含多个错误消息,它们都在一个长行中.我需要将每条错误消息都放在自己的行上.错误消息包含在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
}

ChrisN.. 12

MSDN库中介绍了创建多行工具提示- 阅读"实现多行工具提示"部分.您应该向TTM_SETMAXTIPWIDTHToolTip控件发送一条消息,以响应TTN_GETDISPINFO通知以强制它使用多行.在你的字符串中,你应该用\r\n.

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



1> ChrisN..:

MSDN库中介绍了创建多行工具提示- 阅读"实现多行工具提示"部分.您应该向TTM_SETMAXTIPWIDTHToolTip控件发送一条消息,以响应TTN_GETDISPINFO通知以强制它使用多行.在你的字符串中,你应该用\r\n.

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有