我在使用 GetCursorPos 时遇到问题。我使用 directx 在光标所在的位置绘制一个正方形,但我的代码不起作用,我也不知道为什么...
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
square->setPosition(D3DXVECTOR2(40.0f,60.0f)); // as a test: works fine...
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
我也试过这个:
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
float posX = cursorPos->x; // no crash...
float posY = cursorPos->y; // no crash...
std::cout << posX << posY <<std::endl; // CRASH!
我做错了什么??
最佳答案
当您声明一个LPPOINT
时,您是在声明一个指向POINT
对象的指针。因此,当你写
LPPOINT cursorPos = 0;
您正在创建一个名为 cursorPos
的指针并将其设置为 NULL
。呼唤
GetCursorPos(cursorPos);
然后失败,因为 GetCursorPos
期望您提供一个指向要用信息填充的 POINT
的指针,并且您提供了一个 NULL
指针。因此,当你写
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
当您试图读取 x
和 y
时,您正在读取一个 NULL
指针。这会导致未定义的行为,这里是崩溃。在另一种情况下,您还会遇到未定义的行为,而且恰好不会崩溃。
要解决此问题,请尝试声明一个实际的 POINT
对象,如下所示:
POINT cursorPos;
然后调用
GetCursorPos(&cursorPos);
然后读取位置为
square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));
希望这对您有所帮助!
关于c++ - GetCursorPos 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939688/