0
        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 打印到控制台时,它给了我疯狂的数字。似乎将 long 转换为 float 会丢失一些数据,但为什么呢?它不应该有任何问题。

它打印:
x:0,y:1080795136

4

4 回答 4

5
 sprintf_s(buf, "x: %d, y: %d\n", x,y); 

应该

 sprintf_s(buf, "x: %f, y: %f\n", x,y); 

因为xandyfloat类型,而不是整数。

于 2013-06-03T23:11:22.027 回答
3

只需修改为

sprintf_s(buf, "x: %f, y: %f\n", x,y);

因为你正在使用花车

于 2013-06-03T23:16:44.523 回答
3

如果你使用 %d 格式并传递一个浮点数(实际上是作为双精度传递的),难怪你会得到垃圾。你可能会变得更糟。尝试 %f 格式,或转换为 %d 期望的 int。

于 2013-06-03T23:11:25.933 回答
2

可能是因为您在 sprintf_s 调用中使用了 %d 吗?尝试改用 %f 看看是否是问题所在。

于 2013-06-03T23:11:09.510 回答