新建一个机遇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);
}
运行结果:
现在只能移动该矩形,如何设计,才能缩放该矩形框呢?