工控编程吧

标题: 上位机MFC程序运行时动态修改控件提示文本 [打印本页]

作者: qq263946146    时间: 2019-7-12 11:52
标题: 上位机MFC程序运行时动态修改控件提示文本
程序运行时,可能在不同条件或环境下,控件会实现不同的功能。
前面我们分享的实例是鼠标移动到控件上显示出控件的功能。
当前例程实现如何在程序运行时改变工控的提示文本。其方法主要是重载下面函数:
virtual afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult );
并增加消息处理:
    ON_NOTIFY_EX_RANGE( TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
    ON_NOTIFY_EX_RANGE( TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
重载方法代码如下:
BOOL CToolTipView::OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult )
{
    ASSERT ( pNMHDR->code == TTN_NEEDTEXTA || TTN_NEEDTEXTW );
       
    TOOLTIPTEXTA* pTTTA = ( TOOLTIPTEXTA *)pNMHDR;
    TOOLTIPTEXTW* pTTTW = ( TOOLTIPTEXTW *)pNMHDR;
    CString strTipText;
    CString strMessage;
    if( GetToolText(pNMHDR->idFrom, strTipText, strMessage))
    {
#ifndef _UNICODE
        if(pNMHDR->code == TTN_NEEDTEXTA)
            lstrcpyn(pTTTA->szText,strTipText,_countof(pTTTA->szText));
        else
            _mbstowcsz(pTTTW->szText,strTipText,_countof(pTTTW->szText));
#else
        if(pNMHDR->code == TTN_NEEDTEXTA)
            _wcstombsz(pTTTA->szText,strTipText,_countof(pTTTA->szText));
        else
            lstrcpyn(pTTTW->szText,strTipText,_countof(pTTTW->szText));       
#endif       
                // change status bar message here, need a pointer to CMainFrame
                // SetMessageText(strMessage);
               
                // ok we handled the message, return TRUE
                return TRUE;
        }
       
        // we did NOT handle the message, pass it on, this is important, don't miss it!
        return CToolTipView::OnToolTipText(nID,pNMHDR,pResult);
       
}
下面是改变文本的函数:
BOOL CToolTipView::GetToolText( UINT nID, CString& strTipText, CString& /*strMessage*/)
{
    CString strFullString;
    switch( nID )
    {
        case ID_FILE_NEW:  // have to handle all toolbar tool tip messages here
        case ID_FILE_OPEN:
        case ID_FILE_SAVE:
        case ID_EDIT_CUT:
        case ID_EDIT_COPY:
        case ID_EDIT_PASTE:
        case ID_FILE_PRINT:
        case ID_APP_ABOUT:
                if (strFullString.LoadString(nID))
                        AfxExtractSubString ( strTipText, strFullString, 1,'\n');
                break;
        // demonstrates how to change the tool tip for a specific button
        case ID_CHANGE_TOOL_TIP:
                // local CString containg the new text, which you can set anytime at runtime
                // and will be displayed here when the user puts the mouse on the button.
                strTipText = m_strNewToolTipText;
                // if the user tried to enter a zero legth string, it could
                // cause confusion, so put the default sring back in
                if ( strTipText.GetLength()  ==  0 )  // then  put back the default string
                {
                        if (strFullString.LoadString (ID_CHANGE_TOOL_TIP))
                                AfxExtractSubString ( strTipText, strFullString, 1,'\n' );
                }
                break;
    }
    return TRUE;
}

效果如下图:
(, 下载次数: 2)