Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ncurses检测鼠标何时离开窗口_C++_Linux_Console_Ncurses_Xterm - Fatal编程技术网

C++ ncurses检测鼠标何时离开窗口

C++ ncurses检测鼠标何时离开窗口,c++,linux,console,ncurses,xterm,C++,Linux,Console,Ncurses,Xterm,当我研究鼠标与ncurses的接口时,我看到了许多选项,但我看不到任何检测鼠标何时离开程序窗口的方法。该窗口是终端仿真器的窗口,而不是ncurses窗口。这不在ncurses的鼠标界面中,但对于某些终端,您可以将其设置为发送xterm的请假并输入窗口控制序列,您的程序可以使用getch逐字节读取这些序列,或者使用define_key将响应关联为“功能键” 在“聚焦输入/聚焦输出”部分中列出: FocusIn/FocusOut可以与任何鼠标事件组合,因为它 使用不同的协议。设置后,它会导致xter

当我研究鼠标与ncurses的接口时,我看到了许多选项,但我看不到任何检测鼠标何时离开程序窗口的方法。该窗口是终端仿真器的窗口,而不是ncurses窗口。

这不在ncurses的鼠标界面中,但对于某些终端,您可以将其设置为发送xterm的请假并输入窗口控制序列,您的程序可以使用
getch
逐字节读取这些序列,或者使用
define_key
将响应关联为“功能键”

在“聚焦输入/聚焦输出”部分中列出:

FocusIn/FocusOut可以与任何鼠标事件组合,因为它 使用不同的协议。设置后,它会导致xterm发送
CSI
I
当终端获得焦点时,
CSI
O
当失去焦点时

这是由

CSI ? Pm h
          DEC Private Mode Set (DECSET).
...
            Ps = 1 0 0 4  -> Send FocusIn/FocusOut events, xterm.
比如说,

printf("\033[?1004h");
fflush(stdout);
(其他一些终端实现了这一点,但由于它们没有记录它们的行为,因此您必须进行实验,以确定这是否适用于您正在使用的终端)

在ncurses中,您可以将回答与以下内容关联,例如:


并且(如果启用了
keypad
),将程序中的这些值检测为
getch

的返回值。整个终端程序或应用程序,就像诅咒一样,都有小字符,到处都是。终端程序对一种叫做“老鼠”的奇怪生物一无所知。为了让终端程序知道这是什么,必须有一个字符序列,指示鼠标指针进入或离开终端窗口。回顾terminfo手册页,我找不到任何类似的东西,所以我不相信有这样的东西。@SamVarshavchik我意识到了转义序列是如何工作的。我也找不到任何东西,这就是我在这里问的原因。终端应用程序中对鼠标指针的支持似乎在其文档中相当缺乏。在terminfo的手册页中,我能找到的最接近的是提到了一个名为
req\u mouse\u pos
的序列,但它是什么,它的意思,似乎有些缺乏描述,谷歌搜索只找到了对同一手册页的引用。
#define KEY_FOCUS_IN     1001
#define KEY_FOCUS_OUT    1002

define_key("\033[I", KEY_FOCUS_IN);
define_key("\033[O", KEY_FOCUS_OUT);