用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);
}
运行结果:
现在只能移动该矩形,如何设计,才能缩放该矩形框呢?
![](http://img.blog.csdn.net/20130512092819931)
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);
}
运行结果:
现在只能移动该矩形,如何设计,才能缩放该矩形框呢?
相关文章推荐
- 绘制在某个矩形区域内字符串自动多行换行的一个方法(c)语言实现
- GDI+绘制矩形,并且实现可旋转、缩放、移动功能(基于MFC对话框)
- 利用Jqurey写一个输入内容增加并且可以删除,上下移动的标签
- Silverlight实现对图片的涂鸦、绘制矩形、圆形、直线、文本,并且能够移动
- 获取轮廓中心点,并且判断是否在一个矩形区域内
- canvas画一个移动的小车,并且可以选择哪个部分被消除
- Silverlight实现对图片的涂鸦、绘制矩形、圆形、直线、文本,并且能够移动
- View:屏幕区域(一个View占据屏幕上的一个矩形区域),负责交互和绘制, 在主线程
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- MFC中基于对话框利用CRectTracker实现多矩形绘制、选择、拉伸、移动和删除
- 打印一个框,可以在平面内任意移动,并且要控制框中的一个坐标点,让它不能移动到框的外面
- 如何在窗口绘制背景图片,并且在图片上话一个矩形
- 利用鼠标绘制矩形和截取图像的矩形区域并保存(OpenCV2.4.5)
- 回答带箭头移动绘制矩形,小议AS3.0面向对像
- php绘制一个矩形的方法
- android OpenGLES开发第三课 绘制一个可以翻转的Polygon
- 仿淘宝商品图片放大镜效果(鼠标移动上去会出现放大的图片,并且可以移动)
- 利用GDI+、贝塞尔曲线绘制一个带曲线的矩形
- 初学移动开发技术_两个页面相互跳转,并且向上一个活动传递数据并显示
- Flex桌面程序(入门)之绘制一个移动的圆