CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在视图中用鼠标拖动直线控件的原理是什么?

楼主jackadandy(锋行天下)2005-07-22 19:01:15 在 VC/MFC / 基础类 提问

我在视图中动态创建了一个直线控件(通过按钮控件),我想通过鼠标拖动它。  
  实现这个的原理是什么?  
  先把控件删除,然后在不停的创建。。。。  
  还是。。。。。  
  问题点数:20、回复次数:2Top

1 楼loveghb(温柔的毒药)回复于 2005-07-23 11:46:58 得分 20

晕死,如此简单的问题没人回答  
  直线控件响应WM_MOUSEDOWN、WM_MOUSEMOVE、WM_MOUSEUP消息,WM_MOUSEDOWN的时候设置标志,并捕获鼠标,然后WM_MOUSEMOVE的时候移动直线控件  
  Top

2 楼jackadandy(锋行天下)回复于 2005-07-25 09:29:24 得分 0

现在是鼠标有时能拖动控件,有时候拖动不了。怎么回事啊?  
  void   CDisplayviewView::OnLButtonDown(UINT   nFlags,   CPoint   point)    
  {  
   
  //get   the   position   of   mouse  
                    CClientDC   dc(this);  
  OnPrepareDC(&dc);  
  dc.DPtoLP(&point);  
   
   
  if(((point.x>=rect1.left)&&(point.x<=rect1.right))&&((point.y>=rect1.top)&&(point.y<=rect1.bottom)))  
  {  
  darrow1=1;  
  SetCapture();  
  }  
  else  
  if   (((point.x>=rect2.left)&&(point.x<=rect2.right))&&((point.y>=rect2.top)&&(point.y<=rect2.bottom)))  
  {  
  darrow2=1;  
  SetCapture();  
   
  }  
  }  
   
  void   CDisplayviewView::OnLButtonUp(UINT   nFlags,   CPoint   point)  
  {  
  if((darrow1==1)||(darrow2==1))  
  {  
        if   (GetCapture()   !=   this)  
        return;   //   If   this   window   (view)   didn't   capture   the   mouse,  
        //   then   the   user   isn't   drawing   in   this   window.  
        darrow1=0;  
        darrow2=0;  
        ReleaseCapture();  
   
  }  
  }  
   
   
  void   CDisplayviewView::OnMouseMove(UINT   nFlags,CPoint   point)    
  {  
  CRect   rect;  
   
  if   (GetCapture()   !=   this)  
  return;   //   If   this   window   (view)   didn't   capture   the   mouse,  
  //   then   the   user   isn't   drawing   in   this   window.  
   
  //get   the   position   of   mouse  
                    CClientDC   dc(this);  
  OnPrepareDC(&dc);  
  dc.DPtoLP(&point);  
   
  if(darrow1==1)  
  {  
  rect1.left=point.x;  
  rect1.right=point.x+1;  
   
  dc.LPtoDP(&point);  
  rect.left=point.x;  
  rect.right=point.x+1;  
  rect.top=rect1.top;  
  rect.bottom=rect1.bottom;  
  p_Radio1->MoveWindow(&rect,TRUE);//movewindow用设备坐标  
  }  
  else  
  if(darrow2==1)  
  {  
  rect2.left=point.x;  
  rect2.right=point.x+1;  
        dc.LPtoDP(&point);  
  rect.left=point.x;  
  rect.right=point.x+1;  
  rect.top=rect2.top;  
  rect.bottom=rect2.bottom;  
  p_Radio2->MoveWindow(&rect,TRUE);  
  }  
   
  }  
  其中rect1,rect2为两个直线控件创建时的位置。Top

相关问题

  • 在视图中用鼠标拖动直线控件的原理是什么?
  • 双视图拖动使控件位置变化的问题!
  • 求直线控件
  • 控件拖动的问题?!!!
  • 用鼠标拖动控件
  • treeview树状视图控件问题
  • 列表视图控件的用法
  • 直线控件的问题
  • ----如何实现拖动控件----
  • 关于拖动image控件的问题。

关键词

  • 控件
  • 鼠标
  • dc
  • top
  • 直线控件
  • 拖动
  • rect
  • point
  • movewindow
  • 创建

得分解答快速导航

  • 帖主:jackadandy
  • loveghb

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo