5

ツールチップが表示される (表示される) たびにツールチップ テキストを更新するにはどうすればよいですか?

通常の方法でツールチップを使用するCDialog派生ダイアログがありCToolTipCtrl、問題なく動作します。

  • CToolTipCtrlCDialog私のクラス のメンバー変数。
  • ツールチップを作成し、ツールに追加CDialog::OnInitDialog
  • CToolTipCtrlにリレーされたメッセージCDialog::PreTranslateMessage

CToolTipCtrl::UpdateTipTextとを使用して、コードのさまざまな場所でツールヒント テキストを更新する方法も知っています。CToolTipCtrl::Update

ただし、私が望んでいてまだ達成していないのは、次のとおり です。ツールヒントが表示される前にマウスがツールの上に移動するたびに、ツールヒントのテキストが更新されるようにしたいです。つまり、表示されるテキストは、ツールヒントが表示された瞬間の状況に依存します・テキストが表示されます。

これまでの私の作業コード(関連する行に切り捨てられました):

class CmyDialog : public CDialog
{
  virtual BOOL OnInitDialog();
  virtual BOOL PreTranslateMessage(MSG* pMsg);
  virtual void RefreshToolTipText();        // Want to call this prior each display

  CToolTipCtrl m_toolTip;
}

BOOL CmyDialog::OnInitDialog()
{
  CDialog::OnInitDialog();
  m_toolTip.Create(this);
  m_toolTip.AddTool( GetDlgItem(IDC_SOMECONTROLID), "Sometext" );
  m_toolTip.Activate( TRUE );
}

BOOL CmyDialog::PreTranslateMessage(MSG* pMsg)
{
  if(IsWindow(m_toolTip.m_hWnd)) 
     m_toolTip.RelayEvent(pMsg); 
}

void CmyDialog::RefreshToolTipText()
{
  m_toolTip.UpdateTipText( "updated runtime text",  GetDlgItem(IDC_SOMECONTROLID) );
  m_toolTip.Update();   
}
4

2 に答える 2

3

呼び出すときは、ツールチップに使用するテキストとしてCToolTipCtrl::AddTool「特別な」値を使用します。LPSTR_TEXTCALLBACKこれにより、ツールチップは、ツールチップを追加するウィンドウのTTN_NEEDTEXTに通知を投稿します。その後、親はそれに応じてテキストを設定できます。

于 2013-01-31T22:28:04.997 に答える
1

私は自分でそれを理解したようです。オンラインで解決策を見つけることができなかったので、参考のためにここに投稿します。コメントがあれば引き続きよろしくお願いします。

CmyDialogクラスのメッセージ マップに次の行を追加しました。

BEGIN_MESSAGE_MAP(CmyDialog, CDialog)
   ON_NOTIFY( TTN_SHOW, 0, OnToolTipTextAboutToShow )   
END_MESSAGE_MAP()

そして、次のメンバー関数を CmyDialog に追加しました。

void CmyDialog::OnToolTipTextAboutToShow(NMHDR * pNotifyStruct, LRESULT* result)
{
   if ( pNotifyStruct->hwndFrom == m_toolTip.m_hWnd )
       RefreshToolTipText();
}

どうやら、TTN_SHOW 通知コードは、ツールチップが表示されるたびに WM_NOTIFY 経由で送信されます。私の関数の if-check は、toolTip が特定の CToolTipCtrl からのものであることを確認します。

于 2013-02-06T07:35:53.440 に答える