Cursor Position c++ GetCursorPos method
Cursor Position c++ GetCursorPos method
在下面的代码中,我想要鼠标光标在屏幕上的位置,但无论我将光标移动到哪里,我都会从下面的第二个星号或粗体(不确定)部分得到相同的输出(无论光标在哪里):-197298293 343277548。如果有人有更好的方法来获取光标位置或修复我的代码,请提供帮助。(顺便说一句,"HANDLE csbiHandle;CONSOLE_SCREEN_BUFFER_INFO csbi;"不是必需的。它们在我以前的方法中使用过,但也失败了)
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <cstdio>
#include <stdio.h>
#ifndef MOUSE_HWHEELED
#define MOUSE_HWHEELED 0x0008
#endif
using namespace std;
int main()
{
LPPOINT point;
HANDLE csbiHandle;
CONSOLE_SCREEN_BUFFER_INFO csbi;
int counter = 0;
DWORD cNumRead, i,fdwMode, fdwSaveOldMode;
INPUT_RECORD irInputBuffer[128];
HANDLE stdHandle;
stdHandle = GetStdHandle(STD_INPUT_HANDLE);
MOUSE_EVENT_RECORD mer;
cout << "|-------------|" << endl
<< "| A |" << endl
<< "|-------------|" << endl;
while(counter++<1000)
{
buttonpress:
ReadConsoleInput(stdHandle, irInputBuffer,128, &cNumRead);
**GetCursorPos(point);**
for(i=0; i<cNumRead; i++)
{
switch(irInputBuffer[i].EventType)
{
case MOUSE_EVENT:
{
mer = irInputBuffer[i].Event.MouseEvent;
if(mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
cout << "left button press" << endl;
**cout << point->x << " " << point->y << endl;**
}
else
{
goto buttonpress;
}
break;
}
default:{
printf("unknownn");
break;}
}
}
}
return 0;
}
您可以很幸运,您的程序没有立即崩溃。GetCursorPos
函数获取一个LPPOINT
作为参数,但这并不意味着您应该声明该类型的变量。相反,你应该这样做:
POINT point;
if (GetCursorPos(&point)) {
cout << point.x << "," << point.y << "n";
}
原因是,在调用时,你的LPPOINT是一个指向"某个地方"的指针,没有人能说出它指向哪里。因此,它很可能指向只读内存,而Windows很好地检查了这一点,不向该内存写入,而是返回FALSE
。您没有检查函数调用的返回值,因此无法知道它是否成功。
您正在向GetCursorPos()方法传递一个未初始化的指针。这是未定义行为的典型案例。这通常会导致崩溃,但在您的情况下则有所不同。不知道为什么你一直在读同样的值:最重要的是不应该这样做。
正确的方法是将一个有效的指针传递到此函数中。它可以通过将指针传递到本地或全局POINT变量,也可以通过在堆中分配POINT变量来完成。
这是适当的局部变量的情况:
POINT cursor;
GetCursorPos(&cursor);
// examine (cursor) position here
下面是堆分配变量的情况:
LPPOINT pCursor = new POINT;
if (pCursor != NULL) {
GetCursorPos(pCursor);
// examine and handle (*pCursor) position here
delete pCursor;
}
相关文章:
- 通过 get-Method 访问变量在类外不起作用
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- C++ 中的函数 GetCursorPos() 和 SetCursorPos() 存在一些问题
- 如何在 c++ 中理解这样的代码 [request->headers().Method()->value().getStringView())]
- g++ [[noreturn]] on a virtual method
- 错误"pure virtual method called",当此方法已被覆盖时
- 如何修复此错误? "Method 'str' could not be resolved"
- 使用 -march 编译会导致线程说"pure virtual method called"
- QMetaObject::invokeMethod: no such method QTextCursor::MoveO
- ":"(单个冒号)在"Klass:method(p)"中是什么意思?
- LuaJIT 和 C++ - 调用 Table.Method() 在 loadstring/pcall 中不起作用
- 如何在源文件中定义类并将其声明在标题文件中(而不必使用`class :: method'语法定义类方法)
- C++ 使用 .chain().method() 链接成员函数 vers ->chained(0->method()
- OpenCV InputArray and getMat method
- Eclipse "implement method"函数不适用于模板类
- Typedef for static method
- cuda convnet equvilent method from opencv gpu::convolve
- (*it)->method() vs (**it).method
- std::stringstream and the str method
- Cursor Position c++ GetCursorPos method