您的位置:首页 > 其它

用CRectTracker绘制一个矩形区域,并且可以移动该矩形

2013-05-12 09:29 387 查看
新建一个机遇Dlg的工程,在主对话框类中加入

protected:

HICON m_hIcon;

CRectTracker* m_pRectTracker;

BOOL m_bMoving;

CPoint m_ptOffset;

BOOL CRectTrackDlg::OnInitDialog()中加入:

m_bMoving = FALSE;

m_pRectTracker = new CRectTracker(CRect(50,50,180,100),

CRectTracker::hatchedBorder + CRectTracker::resizeOutside);

void CRectTrackDlg::OnPaint() 中加入:

CPaintDC dc(this);

m_pRectTracker->Draw(&dc);

CRect &rect = m_pRectTracker->m_rect;

dc.SetBkMode(TRANSPARENT);

dc.SetTextColor(RGB(255,0,0));

CFont *pFont = CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));

CFont *pOldFont = dc.SelectObject(pFont);

dc.TextOut(rect.left+5,rect.top+20,_T("按住鼠标并推动这里"));

dc.SelectObject(pOldFont);

添加鼠标消息事件:

void CRectTrackDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if((!m_bMoving) && (m_pRectTracker->HitTest(point)>0))

{

SetCapture();

m_ptOffset.x = point.x - m_pRectTracker->m_rect.left;

m_ptOffset.y = point.y - m_pRectTracker->m_rect.top;

m_bMoving = TRUE;

}

CDialog::OnLButtonDown(nFlags, point);

}

void CRectTrackDlg::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if(m_bMoving && (nFlags & MK_LBUTTON))

{

int nWidth = m_pRectTracker->m_rect .Width();

int nHeight = m_pRectTracker->m_rect .Height();

m_pRectTracker->m_rect.left = point.x - m_ptOffset.x;

m_pRectTracker->m_rect.top = point.y - m_ptOffset.y;

m_pRectTracker->m_rect.right = m_pRectTracker->m_rect.left + nWidth;

m_pRectTracker->m_rect.bottom = m_pRectTracker->m_rect.top + nHeight;

Invalidate();

}

CDialog::OnMouseMove(nFlags, point);

}

void CRectTrackDlg::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if(m_bMoving)

{

ReleaseCapture();

m_bMoving = FALSE;

}

CDialog::OnLButtonUp(nFlags, point);

}

运行结果:

现在只能移动该矩形,如何设计,才能缩放该矩形框呢?



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐