CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

ScrollBox滚动之后,怎么获得一个固定点的逻辑坐标?

楼主vdragon(紫龙)2003-12-04 19:32:40 在 C++ Builder / VCL组件使用和开发 提问

我放一个Label到ScrollBox上,我的窗口滚动了之后,label->Left    
  的值会跟着改变,用逻辑坐标标识Label的左上点会解决这个问题,可是我用    
  了逻辑坐标后,label->left仍然在滚动之后会变,老大们帮我看看是不是映射方法有误  
   
  void   __fastcall   ScrollBox1::Label1Click(TObject   *Sender)    
  {    
      HDC   dc=::GetDC(ScrollBox1->Handle);  
      dc.SetMapMode(MM_TWIPS);    
      TPoint   p;    
      p.x=Label1->Left;    
      p.y=Label1->Top;    
      DPtoLP(FrmDraw->Canvas->Handle,&p,1);//我设想的应该是,经过这个变换之后,p   成了逻辑坐标,应该不会变了,可是还是变化的    
   
      Label1->Caption=p.x   +","   +p.y;    
  }    
  当一个窗口有滚动条的话,该怎么正确计算各点逻辑坐标?    
   
       
       
           
   
  问题点数:0、回复次数:1Top

1 楼vdragon(紫龙)回复于 2003-12-04 19:37:58 得分 0

下面是我找到一个VC的文档  
        坐标间转换:在以上的函数中point参数对应的都是窗口的设备坐标,我们应该将设备坐标和逻辑坐标相区别,在图32_g1由于窗口使   用了滚动条,所以传入的设备坐标是对应于当前窗口左上角的坐标,没有考虑是否滚动,而逻辑坐标必须考虑滚动后对应的坐标。看得出同一点在滚动后的坐标值是不同的,这一规则同样适用于改变了映射方   式的窗口,假设你将映射方式设置为每点为0.01毫米,那么设备坐标所对应的逻辑坐标也需要重新计算。进行这种转换需要写一段代   码,所幸的是系统提供了进行转换的功能DC的DPtoLP,LPtoDP,下面给出代码完成由设备坐标到逻辑坐标的转换。  
   
  CPoint   CYourView::FromDP(CPoint   point)  
  {  
  CClientDC   dc(this);  
  CPoint   ptRet=point;  
  dc.PrepareDC();//必须先准备DC,这在使用滚动时让DC重新计算坐标  
   
  //如果你作图设置了不同的映射方式,则在下面需要设置  
  dc.SetMapMode(...)  
  //  
  dc.DPtoLP(&ptRet);//DP->LP进行转换  
  return   ptRet;  
  }  
   
  怎么按照这个方法在CB里实现逻辑坐标的转换呢,在  
  CB里   dc.PrepareDC()是用不了的....  
  Top

相关问题

  • 逻辑坐标和设备坐标?
  • 逻辑坐标和实际坐标
  • 求救,sos! 坐标转换!逻辑坐标,物理坐标,设备坐标!
  • ===========*坐标转换!逻辑坐标,物理坐标,设备坐标!*===============急!!!!
  • 设备坐标,逻辑坐标,物理坐标到底是怎么回事?
  • 逻辑坐标,设备坐标,物理坐标到底是怎么一回事
  • 请教设备坐标和逻辑坐标的概念!
  • 求教逻辑坐标和设备坐标的区别
  • 关于设备坐标和逻辑坐标的问题
  • 请问逻辑坐标和设备坐标

关键词

  • 坐标
  • 逻辑
  • 映射
  • 转换
  • dc
  • scrollbox
  • 滚动
  • ptret
  • dptolp
  • 设备

得分解答快速导航

  • 帖主:vdragon

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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