c++ - GetCursorPos 的问题

标签 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!

我做错了什么??

最佳答案

当您声明一个LPPOINT 时,您是在声明一个指向POINT 对象的指针。因此,当你写

LPPOINT cursorPos = 0;

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

GetCursorPos(cursorPos);

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

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

当您试图读取 xy 时,您正在读取一个 NULL 指针。这会导致未定义的行为,这里是崩溃。在另一种情况下,您还会遇到未定义的行为,而且恰好不会崩溃。

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

POINT cursorPos;

然后调用

GetCursorPos(&cursorPos);

然后读取位置为

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

希望这对您有所帮助!

关于c++ - GetCursorPos 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939688/

相关文章:

python - 使用python检测空闲时间

c++ - 在 C++ 代码中从另一个线程读取的性能影响

c++ - 导致运行时执行的 constexpr 仿函数中的成员

c++ - 我该如何解决这个错误?

php - 如何计算php文件中的行数?

c++ - 以编程方式在Windows上创建文件夹快捷方式

c++ - LLVM 自动 C++ 链接

windows - 使用自定义名称安装 Windows 服务

linux - shell cmd transfair windows cmd

winapi - 最后打开的文件位置可以直接修改吗?