如何实现一个橡皮区矩形
来源:互联网 发布:剪切视频的软件 编辑:程序博客网 时间:2024/04/27 23:11
CRectTracker是一个很有用的类,可以通过调用CRectTracker:: TrackRubberBand
响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动
和重置视窗中的蓝色椭圆的大小是很容易的事情。
首先,在文件档中声明一个CRectTracker数据成员:
class CSampleView : Public CView
{
…
public :
CrectTracker m_tracker;
…
};
其次,在文档类的构造函数中初始化CRectTracker 对象:
CSampleDoc:: CSampleDOC ()
{
//Initialize tracker position, size and style.
m_tracker.m_rect.SetRect (0, 0, 10, 10);
m_tracker.m_nStyle=CRectTracker:: resizeInside |
CRectTracker:: dottedLine;
}
然后,在OnDraw函数中画椭圆和踪迹矩形:
void CSampleView:: OnDraw (CDC* pDC)
{
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//Select blue brush into device context.
CBrush brush (RGB (0, 0, 255));
CBrush* pOldBrush=pDC->SelectObject (&brush);
//draw ellipse in tracking rectangle.
Crect rcEllipse;
pDoc->m_tracker.GetTrueRect (rcEllipse);
pDC->Ellipse (rcEllipse);
//Draw tracking rectangle.
pDoc->m_tracker.Draw (pDC);
//Select blue brush out of device context.
pDC->Selectobject (pOldBrush);
}
最后,使用ClassWizard处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码
根据鼠标击键情况可以拖放、移动或者重置椭圆的大小。
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)
{
//Get pointer to document.
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//If clicked on ellipse, drag or resize it. Otherwise create a
//rubber-band rectangle nd create a new ellipse.
BOOL bResult=pDoc->m_tracker.HitTest (point)!=
CRectTracker::hitNothing;
//Tracker rectangle changed so update views.
if (bResult)
{
pDoc->m_tracker.Track (this,point,TRue);
pDoc->SetModifiedFlag ();
pDoc->UpdateAllViews (NULL);
}
else
pDoc->m-tracker.TrackRubberBand (this,point,TRUE);
CView:: onLButtonDown (nFlags,point);
}
响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。下例表明使用CRectTracker移动
和重置视窗中的蓝色椭圆的大小是很容易的事情。
首先,在文件档中声明一个CRectTracker数据成员:
class CSampleView : Public CView
{
…
public :
CrectTracker m_tracker;
…
};
其次,在文档类的构造函数中初始化CRectTracker 对象:
CSampleDoc:: CSampleDOC ()
{
//Initialize tracker position, size and style.
m_tracker.m_rect.SetRect (0, 0, 10, 10);
m_tracker.m_nStyle=CRectTracker:: resizeInside |
CRectTracker:: dottedLine;
}
然后,在OnDraw函数中画椭圆和踪迹矩形:
void CSampleView:: OnDraw (CDC* pDC)
{
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//Select blue brush into device context.
CBrush brush (RGB (0, 0, 255));
CBrush* pOldBrush=pDC->SelectObject (&brush);
//draw ellipse in tracking rectangle.
Crect rcEllipse;
pDoc->m_tracker.GetTrueRect (rcEllipse);
pDC->Ellipse (rcEllipse);
//Draw tracking rectangle.
pDoc->m_tracker.Draw (pDC);
//Select blue brush out of device context.
pDC->Selectobject (pOldBrush);
}
最后,使用ClassWizard处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码
根据鼠标击键情况可以拖放、移动或者重置椭圆的大小。
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)
{
//Get pointer to document.
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//If clicked on ellipse, drag or resize it. Otherwise create a
//rubber-band rectangle nd create a new ellipse.
BOOL bResult=pDoc->m_tracker.HitTest (point)!=
CRectTracker::hitNothing;
//Tracker rectangle changed so update views.
if (bResult)
{
pDoc->m_tracker.Track (this,point,TRue);
pDoc->SetModifiedFlag ();
pDoc->UpdateAllViews (NULL);
}
else
pDoc->m-tracker.TrackRubberBand (this,point,TRUE);
CView:: onLButtonDown (nFlags,point);
}
- 如何实现一个橡皮区矩形
- 单缓冲实现橡皮矩形 源代码
- 双缓冲实现橡皮矩形 源代码
- 2_3画橡皮矩形
- cf560B一个矩形如何能包含另外俩个矩形
- 如何判断一个点在矩形内
- 安卓-橡皮擦擦线完整实现
- C#如何实现画矩形图,饼状图
- 基于HTML5 画布功能canvas的绘画板:画线、画圆、画矩形、橡皮、改变线条
- ios 绘图 橡皮 的实现办法 自由批注橡皮的实现办法 缓存位图橡皮的实现办法 bitmap Quartz 2D 缓存位图
- 如何在DC上创建一个半透明的矩形
- 演示matplotlib中,如何在坐标系中画一个矩形
- 在地图上,如何对一个地区进行矩形划分
- Android如何判断若干个小矩形可不可以被放到一个大矩形中
- 使用bitmapData简单实现涂鸦中的橡皮功能(as3)
- 使用bitmapData简单实现涂鸦中的橡皮功能[Flex]
- C#实现一个矩形不断向下延伸完整源程序
- 实现CCLayer只显示一个矩形可见区域
- 当向列表框中添加多个项时如何防止闪烁
- 如何向编辑控件中添加文本
- 获取中文首字母的方法
- 如何访问预定义的GDI对象
- 如何获取GDI对象的属性信息
- 如何实现一个橡皮区矩形
- [学习SQL SERVER 2005系列]关于INSERT、UPDATE 或 DELETE的OUTPUT及OUTPUT...INTO...用法
- 如何更新翻转背景颜色的文本
- 如何创建一个具有特定点大小的字体
- 如何计算一个串的大小
- jBPM开发入门(2)
- 如何显示旋转文本
- 使用vs2005编译mozilla firefox
- 如何正确显示包含标签字符的串