No *_*one 3 c windows mouse console winapi
我正在编写一个与鼠标交互的 Win32 控制台应用程序。我用来ReadConsoleInput像这样获取相对于窗口的鼠标移动。这是我的问题的简化版本:
int main(void)
{
    HANDLE hStdin;
    DWORD cNumRead;
    INPUT_RECORD irInBuf[128];
    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    SetConsoleMode(hStdin, ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_INPUT);
    while (1)
    {
        mouse_position_changed = 0;
        ReadConsoleInput(hStdin, irInBuf, 128, &cNumRead);
        /* input handler here: changes the cursor position if the mouse position changed;
             clears screen if mouse position changed;
             sets mouse_position_changed (self-explanatory).
             (this part of the code is irrelevant to the quesiton at hand) */
        if (!mouse_position_changed)
            putchar('0');
    }
}
(我已经删除了大部分代码,包括错误检查。这是我正在做的事情的一个简单的、淡化版本;它的规模比让 0 逃离光标要大得多。)
我希望每当移动鼠标时都会清除屏幕并将光标设置为鼠标坐标。这部分正在工作。
我想在鼠标不0移动时打印屏幕。这将产生 0 逃离鼠标光标的效果。这是行不通的,因为在收到输入之前会阻塞。ReadConsoleInput
0直到收到更多输入后才会打印。除非用户不断敲击键盘,否则不会打印任何内容,因为每当移动鼠标时,屏幕都会被清除。
我希望即使没有输入,循环也能继续。ReadConsoleInput等待读取输入,这意味着循环将暂停,直到按下键盘或移动鼠标。
我正在寻找 的替代方案ReadConsoleInput,或者使其成为非阻塞的方法。
这全部记录在ReadConsoleInput中。您可以使用GetNumberOfConsoleInputEvents确定是否有控制台输入。您可以使用PeekConsoleInput确定控制台输入事件的类型。
所以GetNumberOfConsoleInputEvents就是您所需要的。
您还可以将WaitForSingleObject与控制台句柄一起使用来等待下一个可用输入。这也记录在ReadConsoleInput中
| 归档时间: | 
 | 
| 查看次数: | 4934 次 | 
| 最近记录: |