今天花了点时间修改了函数新加了四个条件判断.
- //主:窗口映射模式必须为系统默认
- //将窗口坐标转换成屏幕坐标,已完成.
- //函数思路:我们先计算出十字坐标的原点(0,0),也就是窗口坐标的中心点(width/2,hight/2)
- //找到原点后,判断:原点右上角是第一象限;左上角是第二象限;左下角是第三象限;右下角是第四象限
- //判断出象限后就可以计算出它在十字坐标上的位置(坐标)
- //新增了四个判断;和上面大致相同
- //计算方法:ptx(鼠标所在位置) 减去 Cpt(原点),再将Y轴坐标乘-1得到相反数.
- //完成
- void SetCoordinate(float &ptx,float &pty) //窗口坐标转换成屏幕坐标(十字坐标)
- {
- POINT Cpt; //原点
- Cpt.x=640/2; //必要的话,可以用::GetClientRect()函数来获得窗口宽、高
- Cpt.y=480/2;
- if(ptx>Cpt.x && pty>Cpt.y) //第一象限坐标转换
- {
- ptx-=Cpt.x;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx<Cpt.x && pty>Cpt.y) //第二象限坐标转换
- {
- ptx-=Cpt.x;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx<Cpt.x && pty<Cpt.y) //第三象限坐标转换
- {
- ptx-=Cpt.x;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx>Cpt.x && pty<Cpt.y) //第四象限坐标转换
- {
- ptx-=Cpt.x;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx==Cpt.x && pty<Cpt.y) //点在Y正半轴上:补充判断
- {
- ptx=0.0f;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx==Cpt.x && pty>Cpt.y) //点在Y负半轴上:补充判断
- {
- ptx=0.0f;
- pty=(pty-Cpt.y)*-1.0f;
- }
- else if(ptx>Cpt.x && pty==Cpt.y) //点在X正半轴上:补充判断
- {
- ptx-=Cpt.x;
- pty=0.0f;
- }
- else if(ptx<Cpt.x && pty==Cpt.y) //点在X负半轴上:补充判断
- {
- ptx-=Cpt.x;
- pty=0.0f;
- }
- else if(ptx==Cpt.x && pty==Cpt.y) //原点(0,0)
- {
- ptx-=Cpt.x;
- ptx-=Cpt.y;
- //ptx=0.0f;
- //pty=0.0f;
- }
- ptx=ptx/10.0f;
- pty=pty/10.0f;
- }