2011-07-13 142 views
0

ダイアログボックスを作成しました。 2つのリストビューを作成しました。 私はリストビューのサブクラスを作成しました。 マウスがどこにあるのか知りたかったのですが、どのリストビューであるのかを知りたいのです。 その後、私はCListCtrl :: HitTest()を使ってリストビューのインデックスを見つけます。MFCのダイアログボックスのリストビューのマウス移動イベント

私はHitTestを使用してインデックスを取得していますが、マウスの移動は両方のリストビューに共通です。 どのように私はマウスの移動イベントでリストビューを区別することができます。

最後に、リストビューとそのリストビューのインデックスに従ってツールチップを作成します。

答えて

0

CListCtrlはCWndを継承します。 CWnd::OnMouseMoveを実装しているマウスポインターの座標を取得できます。あなたは主に2つのオプションがあります。

  • をどちらかのCListCtrlのをサブクラス化して、派生クラスにしたいよう
  • をONMOUSEMOVEのいずれかを実装する親ウィンドウ(ダイアログウィンドウ)でONMOUSEMOVE実装し、座標に対するマウスの座標をテスト2つのリストコントロールのうちの1つです。

OnMouseMoveは非常に頻繁に呼び出され、関数の実装は非常に軽くなければなりません。それ以外の場合、コンピュータのリソースが読み込まれ、アプリケーションが遅れることに注意してください。

HTH、 JP。

0

あなたが本当に望むのは、あなたが持っているコントロールの上にマウスを置いたときにツールチップを表示するだけであれば、ヒットテストやマウス座標などで手を汚す必要はありません。そのためのメカニズムです

  • ダイアログのOnCreate()コールEnableToolTips()から:あなたのダイアログクラスは、2つのリストビューの親であると仮定すると

  • メッセージマップにハンドラーを追加します(ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnTtnNeedText)など)。

  • OnTtnNeedText()をダイアログクラスに実装します。例:

    BOOL CMyDialog::OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult) 
    {  
        TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; 
        pTTT->hinst = AfxGetResourceHandle(); 
        switch (pNMHDR->idFrom) 
        { 
         case IDC_LV_LEFT: 
          pTTT->lpszText = "I'm lefty!"; 
          break; 
         case IDC_LV_RIGHT: 
          pTTT->lpszText = "I'm righty!"; 
          break; 
        } 
        return TRUE; 
    } 
    

そして、それはそれは多かれ少なかれです。詳細についてはこれを参照してください:article

+0

pNMHDR-> idFromは実際にはHWNDです。:: GetDlgCtrlIDを使用してコントロールIDを取得する必要があります。 – dwo

関連する問題