矩形トラッカー(VC++) 画面上で、マウスのドラッグで、矩形の範囲を指定する為のCRectTrackerクラスの使い方のメモです。 1.ビュー/フレームベースのプロジェクトを作成して、矩形のデータを保存する為に、CRect型のm_rectを宣言します。afxext.hヘッダーファイルをインクルードします。 #include <afxext.h> 2.矩形トラッカーに設定する座標は、スクリーン座標です。 void CTestRTView::OnInitialUpdate() { CView::OnInitialUpdate(); m_rect = CRect(10,10,100,100); ClientToScreen(&m_rect); } 3.テストのため、矩形の中に楕円を表示します。 void CTestRTView::OnDraw(CDC* pDC) { CTestRTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->Ellipse(&m_rect); } 4.マウス左クリックをきっかけにして、CRectTrackerでオブジェクトを作成して、機能させます。マウスドラッグなどで、矩形範囲を決めさせてから、矩形トラッカーから矩形の座標を取り出してm_rectに保存し、楕円を再描画させます。 void CTestRTView::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC dc(this); if (m_rect.PtInRect(point)) { CRectTracker tracker; tracker.m_nHandleSize = 8; tracker.m_rect = m_rect; tracker.m_nStyle |= CRectTracker::resizeInside; tracker.m_nStyle |= CRectTracker::solidLine; tracker.Draw(&dc); if (tracker.Track(this, point)) { tracker.GetTrueRect(m_rect); Invalidate(); } } CView::OnLButtonDown(nFlags, point); } 5.マウスカーソルが矩形の上に置かれている時に、カーソルの形を変化させます。 BOOL CTestRTView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { CClientDC dc(this); CRectTracker tracker; tracker.m_nHandleSize = 8; tracker.m_rect = m_rect; tracker.m_nStyle |= CRectTracker::resizeInside; tracker.m_nStyle |= CRectTracker::solidLine; tracker.Draw(&dc); if (tracker.SetCursor(this, nHitTest)) return TRUE; return CView::OnSetCursor(pWnd, nHitTest, message); } |