滚动时鼠标光标位置偏差

时间:2015-02-02 14:16:54

标签: c++ winapi console mouse

我正在尝试为编程类编写一个小项目。这是一个简单的图形库,只使用ascii字符,在Windows控制台上工作(我使用的是win7 64bit)。当我尝试添加鼠标处理时会出现问题。这是代码

void importantMouseThings()
{
    DWORD numEvents = 0;
    DWORD numEventsRead = 0;

    GetNumberOfConsoleInputEvents( cgWindow::inputHandle, &numEvents);
    if (numEvents != 0)
    {
        INPUT_RECORD *eventBuffer = new INPUT_RECORD[numEvents];
        ReadConsoleInput(cgWindow::inputHandle, eventBuffer, numEvents, &numEventsRead);

        for (DWORD i = 0; i < numEventsRead; i++)
        {
            if (eventBuffer[i].EventType == MOUSE_EVENT)
            {
                int mousex = eventBuffer[i].Event.MouseEvent.dwMousePosition.X;
                int mousey = eventBuffer[i].Event.MouseEvent.dwMousePosition.Y;
                std::cout << mousex << " " << mousey << std::endl;
            }
        }

        delete[] eventBuffer;
    }
}

问题是当我将光标移动到控制台窗口的左上角时,cout写入“0 0”,但是当我使用滚轮(我的意思是当我向下或向上滚动)时,值会变为“20 14” ”。当我调用另一个鼠标事件时,只需稍微移动光标,值就会返回到返回状态“0 0”。

也许我只是不知道dwMousePosition是什么,也许它是控制台窗口的东西(窗口和缓冲区大小都设置为80x80,因此没有可见的滚动条)。

编辑:  Okey,我刚才意识到,价值变化取决于窗口位置。因此,如果窗口位于屏幕的左侧,则X发散非常小,并且随着我向右移动窗口而增大。任何想法,有什么不对?

0 个答案:

没有答案