CRectTracker 는 사각형 영역을 잡는데 쓴다.
위와 같은 그림은 많이 봐왔을거다.
MFC에 들어있는 클래스이고,
#include "afxext.h"
를 해줘야 한다.
헤더파일에
사용해야 할 곳에서(예를 들어 버튼을 누른다거나)
그리고 LButtonDown 이벤트에서 다음과 같이 해준다.
OnPaint 혹은 OnDraw 함수에서 다음과 같이 넣어준다.
Draw 함수를 호출하면 거기로 트랙커가 그려지는거다.
다음 트랙커의 각 점위로 마우스가 올라가면 그 마우스의 모양이 변하도록 하기 위해, WM_SETCURSOR를 재정의한다.
위와 같은 그림은 많이 봐왔을거다.
MFC에 들어있는 클래스이고,
#include "afxext.h"
를 해줘야 한다.
헤더파일에
private:
CRectTracker m_tracker;
이렇게 선언해 주고,사용해야 할 곳에서(예를 들어 버튼을 누른다거나)
CRect rect(10, 10, 100, 100);
m_tracker.m_rect = rect;
m_tracker.m_nStyle = 0;
m_tracker.m_nStyle |= CRectTracker::dottedLine;
m_tracker.m_nStyle |= CRectTracker::resizeOutside;
this->Invalidate();
그리고 LButtonDown 이벤트에서 다음과 같이 해준다.
void CTrackerDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_tracker.HitTest(point) < 0)
{
CRectTracker track;
if (track.TrackRubberBand(this, point, true)) {
track.m_rect.NormalizeRect();
m_tracker.m_rect = track.m_rect;
//SetImageRectSelection(pDoc,&(m_tracker.m_rect));
} else {
m_tracker.m_rect = CRect(0,0,0,0);
}
} else {
if (m_tracker.Track(this, point, true)){
m_tracker.m_rect.NormalizeRect();
//SetImageRectSelection(pDoc,&(m_tracker.m_rect));
} else {
m_tracker.m_rect = CRect(0,0,0,0);
}
}
this->Invalidate();
CDialog::OnLButtonDown(nFlags, point);
}
OnPaint 혹은 OnDraw 함수에서 다음과 같이 넣어준다.
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
if ( (m_tracker.m_rect.Width() > 0) && (m_tracker.m_rect.Height() > 0) )
m_tracker.Draw(&dc);
CDialog::OnPaint();
Draw 함수를 호출하면 거기로 트랙커가 그려지는거다.
다음 트랙커의 각 점위로 마우스가 올라가면 그 마우스의 모양이 변하도록 하기 위해, WM_SETCURSOR를 재정의한다.
BOOL CTrackerDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if (m_tracker.SetCursor( pWnd, nHitTest ))
return TRUE;
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
'프로그래밍 > VC++' 카테고리의 다른 글
경로에서 드라이브, 경로명, 파일명, 확장자등 가져오는 방법 (0) | 2006.10.07 |
---|---|
다이얼로그 박스에서 CDirTreeCtrl 사용해서 트리에 폴더 목록 표시하기 (0) | 2006.10.06 |
VC++ .Net 2003 에서 iostream.h 가 incude 되지 않는다? (0) | 2006.09.02 |
activex를 dialog base처럼 만드는법 (0) | 2006.08.28 |
ActiveX 콘트롤안에 있는 CEdit에서 백스페이스가 안먹힐때. (0) | 2006.08.28 |