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

新建一个机遇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);
}


运行结果:

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值