GetCursorPos的问题

时间:2014-01-05 21:55:02

标签: c++ windows winapi directx

我遇到了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!

我做错了什么?

1 个答案:

答案 0 :(得分:6)

当您声明LPPOINT时,您将声明指向POINT对象的指针。因此,当你写

LPPOINT cursorPos = 0;

您正在创建一个名为cursorPos的指针,并将其设置为NULL。电话

GetCursorPos(cursorPos);

然后失败,因为GetCursorPos希望您提供指向要填写信息的POINT的指针,并且您提供了NULL指针。因此,当你写

square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash

您在尝试阅读NULLx时正在阅读y指针。这会导致未定义的行为,这是一个崩溃。在另一种情况下,您还会获得未定义的行为,而且它恰好不会崩溃。

要解决此问题,请尝试声明一个实际的POINT对象,如下所示:

POINT cursorPos;

然后调用

GetCursorPos(&cursorPos);

然后将位置读为

square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));

希望这有帮助!