掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CRectTrackerについて (ID:72371)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になります。 VS2005 MFCでダイアログベースのアプリケーションを 作成しています。 CRectTrackerを用いて画像表示されているピクチャコントロールに マウス左ボタンを押している間に矩形を描画したいのですが 描画ができません。 何方か教えて頂けないでしょうか。 初期化処理 BOOL CImageViewToolDlg::OnInitDialog() { m_tracker.m_nStyle |= CRectTracker::solidLine ; // 外の枠線のスタイルを指定します //m_trackerの初期化します m_tracker.m_rect.left = 100; m_tracker.m_rect.top = 100; m_tracker.m_rect.right = 100; m_tracker.m_rect.bottom = 100; } TIFF画像表示処理、OnPaint()から呼ばれます。 void CImageViewToolDlg::TiffImageView(CString imageFilePath) { //ピクチャコントロールボックスのハンドル取得 const HWND hWndPict = ::GetDlgItem( m_hWnd, IDC_PICT_AREA1 ); RECT Rect; ::GetClientRect( hWndPict, &Rect ); //ピクチャコントロールボックスの幅/高さ取得 const int width = Rect.right - Rect.left; const int height = Rect.bottom - Rect.top; HDC hdc = ::GetDC( hWndPict ); ::Graphics TiffGraphics( hdc ); //TIFFファイル名設定 Image tiffImage( imageFilePath ); //ピクチャコントロールボックスのサイズに合わせて画像表示 TiffGraphics.DrawImage( &tiffImage, 0, 0, width, height ); ::ReleaseDC( hWndPict, hdc ); //------------------矩形描画用のデバイスコンテキスト取得------------- CDC* pDC = m_pict.GetDC(); //矩形描画 m_tracker.Draw(pDC); ReleaseDC(pDC); } マウス左ボタンを押したときの処理 void CImageViewToolDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 tiffImagePoint ImagePointP; WINDOWPLACEMENT winplace; CRect rect; RECT CampRect; //画像表示モード1、2、3でかつ画像表示中あるか確認 if ( ( ( 0 <= m_ModeSelect) && ( m_ModeSelect <= 2 ) ) && ( m_imageDisp ) ) { if ( m_bCapture == false ) { SetCapture(); m_bCapture = true; } m_pict.GetWindowPlacement( &winplace ); CampRect = winplace.rcNormalPosition; //マウスの座標をピクチャコントロール用に補正 point.x -= CampRect.left; point.y -= CampRect.top; m_pict.GetClientRect( &rect ); m_rect = rect; //ピクチャコントロール内にマウスがあるか判断 if ( rect.PtInRect( point ) == FALSE ) { m_bCapture = false; ReleaseCapture(); } else { if ( !m_xvChkButton ) { ImagePointP.startPoint_x = point.x; ImagePointP.startPoint_y = point.y; ImagePointP.endPoint_x = 0; ImagePointP.endPoint_y = 0; //ピクチャーコントロールのマウス位置からTIFFファイル内の縦横位置に変換する。 ChangeTiffImagePoint( FALSE, &ImagePointP ); } else { m_startPointX = point.x; m_startPointY = point.y; //-------------------------------矩形描画---------------------------- BOOL bResult = m_tracker.HitTest(point) != CRectTracker::hitNothing; if (bResult){//更新 m_tracker.Track(this,point,TRUE); m_tracker.m_rect.NormalizeRect(); InvalidateRect(m_rect, FALSE); } else if(nFlags){ m_tracker.TrackRubberBand(this,point,TRUE); m_tracker.m_rect.NormalizeRect(); } //------------------------------------------------------------------- } } } CDialog::OnLButtonDown(nFlags, point); }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.