在MFC中如何增加工具提示的时间仍然可见

时间:2017-07-28 07:01:31

标签: visual-c++ mfc

我使用下面的代码创建工具提示。

m_ctrlToolTip.Create(this, TTS_ALWAYSTIP|TTS_BALLOON);

m_ti.cbSize = sizeof(TOOLINFO);
m_ti.uFlags = TTF_IDISHWND|TTF_TRACK|TTF_TRANSPARENT|TTF_ABSOLUTE;
m_ti.hwnd = m_hWnd;
m_ti.hinst = NULL;
m_ti.uId = (UINT)1;
m_ti.lpszText = "";;
m_ti.rect=CRect(0,0,0,0);

m_ctrlToolTip.SetMaxTipWidth(SHRT_MAX);
m_ctrlToolTip.SetDelayTime(TTDT_AUTOPOP,5000);
m_ctrlToolTip.Activate(TRUE);

void CLadIOView::OnMouseMove(UINT nFlags, CPoint point)
{
    static CPoint prevPoint =0;
    static CLadRemoteIOModule* pLastIO=NULL;

    CLadRemoteIOModule* pLastIO1=pLastIO;
    pLastIO=NULL;

    bool bToolTipSet = false;
    // Go thru each module already added
    POSITION pos = gobjEztouchApp.m_objLadderLogic.m_objSysAttr.m_objRemoteIOModuleLst.GetHeadPosition();
    for( ; pos != NULL; )
    {
        CLadRemoteIOModule* pIO = gobjEztouchApp.m_objLadderLogic.m_objSysAttr.m_objRemoteIOModuleLst.GetNext(pos);

        // Get the rectangle for the module
        CRect rectModule = GetIOModuleRect(pIO->m_nModulePosition);
        if(!rectModule.PtInRect(pt)) continue;
        pLastIO=pIO;
        if(pLastIO1==pIO)  break;       
        if(!m_bMouseDown && !m_bPlacingANewModule && prevPoint != pt)
        {           
            CString sDescription, sPartNumber, sAddressRange;
            GetIOModuleText2(pIO,sDescription, sPartNumber, sAddressRange);
            sPartNumber.Remove('[');
            sPartNumber.Remove(']');

            CString sModuleDetails;
            sModuleDetails.Format(_T("Position: M%d\nModule Type: %s\nModule Part No: %s"), pIO->m_nModulePosition+1, sDescription,sPartNumber);
            if(pIO->GetIPSize() > 0)
                sModuleDetails+=_T("\nInput Address: ")+ pIO->GetInputAdr()+_T(" - ")+pIO->GetEndInputAdr();
            if(pIO->GetOPSize() > 0)
                sModuleDetails+=_T("\nOutput Address: ")+ pIO->GetOutputAdr()+_T(" - ")+pIO->GetEndOutputAdr();

            CPoint pp = pt-GetScrollPosition();
            ClientToScreen(&pp);

            m_ctrlToolTip.UpdateTipText(sModuleDetails,this,1);
            m_ctrlToolTip.SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)MAKELPARAM(pp.x, pp.y+16));//+16 to move the tooltip stem down
            m_ctrlToolTip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_ti);


            //to track mouse leave abd there we can remove tooltip
            TRACKMOUSEEVENT tk;
            tk.cbSize = sizeof(tk);
            tk.dwFlags = TME_LEAVE;
            tk.hwndTrack = m_hWnd;
            _TrackMouseEvent(&tk);

            prevPoint = pt;

            bToolTipSet = true;
        }
        bToolTipSet = true;
        break;
    }


if(!bToolTipSet)
{
    m_ctrlToolTip.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_ti);
    m_ctrlToolTip.UpdateTipText("",this,1);
    m_ctrlToolTip.Pop();
}

工具提示在几秒钟内仍然可见,然后它们消失。我觉得这个时间太短,无法阅读一些较长的工具提示。有没有办法增加它们可见的时间?

我尝试使用setdelaytime函数增加时间,但它对我没有帮助。

提前致谢。

0 个答案:

没有答案