⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index050.htm

📁 一本不错的VC编程的参考书
💻 HTM
字号:
<html>
<style type="text/css"><!--
.p9 {  font-family: "宋体"; font-size: 9pt}a        {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<body background="../di2001.jpg">
<h3 align="center"><font COLOR="#AOAO99"></font></h3>
<table width="100%" border="1" cellspacing="1">
<tr><td><p align="center"><font color="#FF0000">如何实现一个橡皮区矩形</font></td></tr>
<tr><td><p>
</Br>
CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand 响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。<Br>
下例表明使用CRectTracker移动和重置视窗中的蓝色椭圆的大小是很容易的事情。<Br>
</Br>
首先,在文件档中声明一个CRectTracker数据成员:<Br>
class CSampleView : Public CView<Br>
{<Br>
&nbsp;…<Br>
&nbsp;public :<Br>
&nbsp;CrectTracker m_tracker<Br>
&nbsp;…<Br>
}<Br>
</Br>
其次,在文档类的构造函数中初始化CRectTracker 对象:<Br>
CSampleDoc:: CSampleDOC ()<Br>
{<Br>
&nbsp;//Initialize tracker position, size and style.<Br>
&nbsp;m_tracker.m_rect.SetRect (0, 0, 10, 10)<Br>
&nbsp;m_tracker.m_nStyle=CRectTracker:: resizeInside | CRectTracker ::dottedLine<Br>
}<Br>
</Br>
然后,在OnDraw函数中画椭圆和踪迹矩形:<Br>
void CSampleView:: OnDraw (CDC* pDC)<Br>
{<Br>
&nbsp;CSampleDoc* pDoc=GetDocument ()<Br>
&nbsp;ASSERT_VALID (pDoc)<Br>
</Br>
&nbsp;//Select blue brush into device context.<Br>
&nbsp;CBrush brush (RGB (0, 0, 255))<Br>
&nbsp;CBrush* pOldBrush=pDC->SelectObject (&brush)<Br>
</Br>
&nbsp;//draw ellipse in tracking rectangle.<Br>
&nbsp;Crect rcEllipse<Br>
&nbsp;pDoc->m_tracker.GetTrueRect (rcEllipse)<Br>
&nbsp;pDC->Ellipse (rcEllipse)<Br>
</Br>
&nbsp;//Draw tracking rectangle.<Br>
&nbsp;pDoc->m_tracker.Draw (pDC)<Br>
&nbsp;//Select blue brush out of device context.<Br>
&nbsp;pDC->Selectobject (pOldBrush)<Br>
}<Br>
</Br>
最后,使用ClassWizard处理WM_LBUTTONDOWN消息,并增加下述代码。该段代码根据鼠标击键情况可以拖放、移动或者重置椭圆的大小。<Br>
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)<Br>
{<Br>
&nbsp;//Get pointer to document.<Br>
&nbsp;CSampleDoc* pDoc=GetDocument ()<Br>
&nbsp;ASSERT_VALID (pDoc)<Br>
</Br>
&nbsp;//If clicked on ellipse, drag or resize it.Otherwise create a<Br>
&nbsp;//rubber-band rectangle nd create a new ellipse.<Br>
&nbsp;BOOL bResult=pDoc->m_tracker.HitTest (point)!= CRectTracker::hitNothing<Br>
</Br>
&nbsp;//Tracker rectangle changed so update views.<Br>
&nbsp;if (bResult)<Br>
&nbsp;{<Br>
&nbsp;pDoc->m_tracker.Track (this,point,TRue)<Br>
&nbsp;pDoc->SetModifiedFlag ()<Br>
&nbsp;pDoc->UpdateAllViews (NULL)<Br>
&nbsp;}<Br>
</Br>
&nbsp;else<Br>
&nbsp;pDoc->m-tracker.TrackRubberBand(this,point,TRUE)<Br>
&nbsp;CView:: onLButtonDown (nFlags,point)<Br>
}<Br>
</Br>
</p></td></tr>
</table>
</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -