获取用户窗口鼠标位置问题

09313 2009-07-21 04:00:39
我想取得客户窗口鼠标的位置,代码如下:
POINT a;
GetCursorPos(&a);
ScreenToClient(hWnd,&a);
发现a的位置与实际有差为什么?在(0,0)位置时是没错,但是移动鼠标的位置就慢慢开始有偏差了。
求解????
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzd0216 2009-07-23
  • 打赏
  • 举报
回复
BOOL CGame::Get3DCoord(CTerrain* g_pTerrain,POINT Pt)
{
D3DVIEWPORT9 vp;
g_pDevice->GetViewport(&vp);
D3DXMATRIX proj;
g_pDevice->GetTransform(D3DTS_PROJECTION, &proj);
float px = ((( 2.0f*Pt.x) / vp.Width) - 1.0f) / proj(0, 0);
float py = (((-2.0f*Pt.y) / vp.Height) + 1.0f) / proj(1, 1);
Ray ray;
ray._origin = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
ray._direction = D3DXVECTOR3(px, py, 1.0f);
D3DXMATRIX matView,matInvView;
g_pDevice->GetTransform(D3DTS_VIEW,&matView);
D3DXMatrixInverse(&matInvView,0,&matView);
D3DXVec3TransformCoord(&ray._origin,&ray._origin,&matInvView);
D3DXVec3TransformNormal(&ray._direction,&ray._direction,&matInvView);
D3DXVec3Normalize(&ray._direction, &ray._direction);
BOOL hit;
DWORD index;
float tu,tv;
D3DXIntersect(g_pTerrain->GetMesh(),g_pFollowCamera->GetPos(),&ray._direction,&hit,&index,&tu,&tv,NULL,NULL,NULL);
if(hit)
{
g_pTerrain->GetTerrainVertex(&vMouseCross,index,tu,tv);
}
return hit;
}

是 获取问题吧
hemiya 2009-07-21
  • 打赏
  • 举报
回复
POINT a;
GetCursorPos(&a); // 相对于桌面左上角坐标
ScreenToClient(hWnd,&a); // 返回的是相对于窗口左上角的坐标
09313 2009-07-21
  • 打赏
  • 举报
回复
就是跟窗口的坐标有差,例如窗口坐标的(300,300)鼠标移到那里显示的确是(300-,300-)或(300+,300+)就有一个偏差
如果是分辨率问题要怎么解决?
xingzhe2001 2009-07-21
  • 打赏
  • 举报
回复
不知道你说得是跟谁有偏差
xingzhe2001 2009-07-21
  • 打赏
  • 举报
回复
你是说和d3d里面的ui对不上的情况么?
拼命先生A 2009-07-21
  • 打赏
  • 举报
回复
会不会是分辨率的问题?

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧