the*_*G27 0 c++ windows directx winapi
我遇到了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
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
float posX = cursorPos->x; // no crash...
float posY = cursorPos->y; // no crash...
std::cout << posX << posY <<std::endl; // CRASH!
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??
当您声明一个时LPPOINT,您将声明一个指向POINT对象的指针.因此,当你写
LPPOINT cursorPos = 0;
Run Code Online (Sandbox Code Playgroud)
您正在创建一个名为cursorPos并将其设置为的指针NULL.电话
GetCursorPos(cursorPos);
Run Code Online (Sandbox Code Playgroud)
然后失败,因为GetCursorPos希望你提供一个指向POINT你要用信息填写的NULL指针,并且你已经提供了一个指针.因此,当你写作
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
Run Code Online (Sandbox Code Playgroud)
NULL在尝试阅读x和阅读时你正在读指针y.这会导致未定义的行为,这是一个崩溃.在另一种情况下,你也得到了未定义的行为,它恰好没有崩溃.
要解决此问题,请尝试声明一个实际POINT对象,如下所示:
POINT cursorPos;
Run Code Online (Sandbox Code Playgroud)
然后打电话
GetCursorPos(&cursorPos);
Run Code Online (Sandbox Code Playgroud)
然后把这个位置读作
square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |