POINT p;
RECT rec;
::GetClientRect(hWnd, &rec);
LONG windowWidth = rec.right, windowHeight = rec.bottom;
::GetCursorPos(&p);//get position on screen
::ScreenToClient(hWnd,&p);//convert POINT to position in window
// 2d vector math
float x=0.0f,y=0.0f; // vector
x= static_cast<float>(p.x - (windowWidth>>1)); // problem...
y= static_cast<float>(p.y - (windowHeight>>1));
char buf[100];
sprintf_s(buf, "x: %d, y: %d\n", x,y); // create string to print
OutputDebugStringA(buf); // print to debut window
当我将x和y打印到控制台时,它给了我疯狂的数字。看起来长时间投掷会丢失一些数据,但为什么呢?不应该有任何问题。
打印:
x:0,y:1080795136
答案 0 :(得分:5)
sprintf_s(buf, "x: %d, y: %d\n", x,y);
应该是
sprintf_s(buf, "x: %f, y: %f\n", x,y);
因为x
和y
是float
类型,而不是整数。
答案 1 :(得分:3)
如果你使用%d格式并传递一个浮点数(实际上是作为double传递),难怪你会得到垃圾。你可能会变得更糟。尝试%f格式,或转换为%d预期的int。
答案 2 :(得分:3)
只需修改为
sprintf_s(buf, "x: %f, y: %f\n", x,y);
因为你正在使用花车
答案 3 :(得分:2)
可能是因为您在sprintf_s调用中使用了%d吗?尝试使用%f代替,看看是否存在问题。