DX中将窗口坐标转换成屏幕坐标,自己写的函数

 今天花了点时间修改了函数新加了四个条件判断.

Code:
  1. //主:窗口映射模式必须为系统默认
  2. //将窗口坐标转换成屏幕坐标,已完成.
  3. //函数思路:我们先计算出十字坐标的原点(0,0),也就是窗口坐标的中心点(width/2,hight/2)  
  4. //找到原点后,判断:原点右上角是第一象限;左上角是第二象限;左下角是第三象限;右下角是第四象限  
  5. //判断出象限后就可以计算出它在十字坐标上的位置(坐标)  
  6. //新增了四个判断;和上面大致相同
  7. //计算方法:ptx(鼠标所在位置) 减去 Cpt(原点),再将Y轴坐标乘-1得到相反数.  
  8. //完成  
  9. void SetCoordinate(float &ptx,float &pty)   //窗口坐标转换成屏幕坐标(十字坐标)  
  10. {  
  11.     POINT Cpt;  //原点  
  12.     Cpt.x=640/2;        //必要的话,可以用::GetClientRect()函数来获得窗口宽、高  
  13.     Cpt.y=480/2;  
  14.     if(ptx>Cpt.x && pty>Cpt.y)      //第一象限坐标转换  
  15.     {  
  16.         ptx-=Cpt.x;  
  17.         pty=(pty-Cpt.y)*-1.0f;  
  18.     }  
  19.     else if(ptx<Cpt.x && pty>Cpt.y) //第二象限坐标转换  
  20.     {  
  21.         ptx-=Cpt.x;  
  22.         pty=(pty-Cpt.y)*-1.0f;  
  23.     }  
  24.     else if(ptx<Cpt.x && pty<Cpt.y) //第三象限坐标转换  
  25.     {  
  26.         ptx-=Cpt.x;  
  27.         pty=(pty-Cpt.y)*-1.0f;  
  28.     }  
  29.     else if(ptx>Cpt.x && pty<Cpt.y) //第四象限坐标转换  
  30.     {  
  31.         ptx-=Cpt.x;  
  32.         pty=(pty-Cpt.y)*-1.0f;  
  33.     }  
  34.     else if(ptx==Cpt.x && pty<Cpt.y)    //点在Y正半轴上:补充判断  
  35.     {  
  36.         ptx=0.0f;  
  37.         pty=(pty-Cpt.y)*-1.0f;  
  38.     }  
  39.     else if(ptx==Cpt.x && pty>Cpt.y)    //点在Y负半轴上:补充判断  
  40.     {  
  41.         ptx=0.0f;  
  42.         pty=(pty-Cpt.y)*-1.0f;  
  43.     }  
  44.     else if(ptx>Cpt.x && pty==Cpt.y)    //点在X正半轴上:补充判断  
  45.     {  
  46.         ptx-=Cpt.x;  
  47.         pty=0.0f;  
  48.     }  
  49.     else if(ptx<Cpt.x && pty==Cpt.y)    //点在X负半轴上:补充判断  
  50.     {  
  51.         ptx-=Cpt.x;  
  52.         pty=0.0f;  
  53.     }  
  54.     else if(ptx==Cpt.x && pty==Cpt.y)                               //原点(0,0)  
  55.     {  
  56.         ptx-=Cpt.x;  
  57.         ptx-=Cpt.y;  
  58.         //ptx=0.0f;  
  59.         //pty=0.0f;  
  60.     }  
  61.     ptx=ptx/10.0f;  
  62.     pty=pty/10.0f;  
  63. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值