0

TTF_TRACK フラグを CTooltipCtrl に設定すると、SetDelayTime が機能しなくなり、ツールチップが自動的に消えないことがわかりました。指定したコントロールのすぐ下にツールチップを表示し、数秒後に消えることを期待します (時間は SetDelayTime で設定できます)。誰でも私を助けることができますか?

ツールチップを作成する手順は次のとおりです。

1. Add member variable
   CToolTipCtrl m_tooltip;
2. override PreTranslateMessage
   BOOL CPF_GetSetNameDlg::PreTranslateMessage( MSG* pMsg )
{
    switch (pMsg->message)
    {
    case WM_KEYDOWN:
    case WM_SYSKEYDOWN:
    case WM_LBUTTONDOWN:
    case WM_RBUTTONDOWN:
    case WM_MBUTTONDOWN:
    case WM_LBUTTONUP:
    case WM_RBUTTONUP:
    case WM_MBUTTONUP:
    case WM_MOUSEMOVE:
        m_tooltip.RelayEvent(pMsg);
        break;
    }

    return CDialog::PreTranslateMessage(pMsg);
}
3. OnInitialDialog
   BOOL CPF_GetSetNameDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    //tooltip
    EnableToolTips();
    m_tooltip.Create(this , WS_POPUP | TTS_NOPREFIX | TTS_BALLOON);

    m_tooltip.SetDelayTime(TTDT_INITIAL, 0);
    m_tooltip.SetDelayTime(TTDT_AUTOPOP, 30000);
    m_tooltip.SetDelayTime(TTDT_RESHOW, 30000);
    m_tooltip.AddTool(GetDlgItem(IDC_SETNAME), _T(""));
    m_tooltip.SetMaxTipWidth(600); 
}
4. Control to show tool tip
      if(bShow)
{
    m_tooltip.UpdateTipText(_T("Hello, money~"), pWnd);
    CToolInfo       sTinfo;
    m_tooltip.GetToolInfo(sTinfo, pWnd);
    sTinfo.uFlags = TTF_TRACK;
    m_tooltip.SetToolInfo(&sTinfo);

    CRect rect;
    pWnd->GetWindowRect(rect);
    m_tooltip.SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(rect.left, rect.bottom));
    m_tooltip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&sTinfo );
}
4

1 に答える 1

1

トラッキング ツールチップを使用する場合は、ツールチップを手動で表示および非表示にする責任があります。ツールチップ タイマー (「autopop」など) は無視されます。したがって、独自のタイマーを作成し、起動時にツールチップを非表示にする必要があります。

于 2013-06-12T11:57:52.227 に答える