资源描述:
《VC++拖放选中对象,介绍如何拖放选中的图形对象,编译.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、·VC++拖放选中对象,介绍如何拖放选中的图形对象,编译并运行本例程序,红色圆圈可以用鼠标随意拖动。实现方法和思路:当鼠标左键在图形区域被按下时,捕捉所有鼠标消息,并且响应鼠标移动消息,随时更新图形的位置,重画图形。程序编写方法如下:(1)利用AppWizard创建单文档的应用程序MoveSelOb,并且选择视图类的基类为CScrollView。(2)在视图类的头文件中增加4个变量,用来保存图形位置和鼠标捕捉情况,其代码如下:protected:constCSizem_sizeEllipse;CPointm_pointTopLeft;
2、CSizem_sizeOffset;BOOLm_bCaptured;(3)在视图类的构造函数中初始化变量,其代码如下:CMoveSelObView::CMoveSelObView():m_sizeEllipse(100,-100),m_pointTopLeft(0,0),m_sizeOffset(0,0){m_bCaptured=FALSE;}(4)在视图类的OnInitialUpdate函数中初始化视图的滚动范围。voidCMoveSelObView::OnInitialUpdate(){CScrollView::OnInitial
3、Update();//设置滚动范围CSizesizeTotal(800,1050);//8-by-10.5inchesCSizesizePage(sizeTotal.cx/2,sizeTotal.cy/2);CSizesizeLine(sizeTotal.cx/50,sizeTotal.cy/50);SetScrollSizes(MM_LOENGLISH,sizeTotal,sizePage,sizeLine);}(5)在视图类的OnDraw函数中绘图,其代码如下:voidCMoveSelObView::OnDraw(CDC*pDC)
4、{CMoveSelObDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//创建红色画刷CBrushbrushHatch(HS_DIAGCROSS,RGB(255,0,0));CPointpoint(0,0);//转换逻辑坐标到设备坐标pDC->LPtoDP(&point);pDC->SetBrushOrg(point);CBrush*pOldBrush=pDC->SelectObject(&brushHatch);//画红色圆圈pDC->Ellipse(CRect(m_pointTopLeft,m_
5、sizeEllipse));pDC->SelectObject(pOldBrush);//TODO:adddrawcodefornativedatahere}(6)响应WM_LBUTTONDOWN消息,其代码如下:voidCMoveSelObView::OnLButtonDown(UINTnFlags,CPointpoint){CRectrectEllipse(m_pointTopLeft,m_sizeEllipse);CRgncircle;CClientDCdc(this);OnPrepareDC(&dc);dc.LPtoDP(re
6、ctEllipse);circle.CreateEllipticRgnIndirect(rectEllipse);if(circle.PtInRegion(point)){//捕捉鼠标SetCapture();m_bCaptured=TRUE;CPointpointTopLeft(m_pointTopLeft);dc.LPtoDP(&pointTopLeft);m_sizeOffset=point-pointTopLeft;//设置光标形状为十字状::SetCursor(::LoadCursor(NULL,IDC_CROSS));}C
7、ScrollView::OnLButtonDown(nFlags,point);}(7)响应WM_LBUTTONUP消息,其代码如下:voidCMoveSelObView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(m_bCaptured){//释放鼠标捕捉::ReleaseCapture();m_bCaptured=FALSE;}CScrollView::OnLButtonUp(nFlags,
8、point);}(8)响应WM_MOUSEMOVE消息:voidCMoveSelObView::OnMouseMove(UINTnFlags,CPointpoint){if(m_bCaptured){//如果有图形被选中