如何在QNX中检测来自ncurses的屏幕调整大小事件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在QNX中检测来自ncurses的屏幕调整大小事件?相关的知识,希望对你有一定的参考价值。

我无法使用ncurses QNX Momentics配置接收有关更改终端大小的事件。我使用Putyy作为终端,数据通过COM端口传输。

我的问题是如何在使用远程终端时实现屏幕更改事件的接收?

FILE* fcons = fopen("/dev/ser1", "r+");
SCREEN* term = newterm("xterm-r5", fcons, fcons);
int y = 0, x = 0;
//if(y < 24 || x < 80)
//  resizeterm(24, 80);
flushinp();
main_scr = newwin(24, 80, 0, 0);
head_scr = subwin(main_scr, 3, 80, 0, 0);
prompt_scr = subwin(main_scr, 1, 9, 3, 2);
cursor_scr = newwin(1, 60, 3, 6);
output_scr = subwin(main_scr, 18, 76, 5, 2);
keypad(cursor_scr, TRUE);

int f = mousemask(ALL_MOUSE_EVENTS, NULL);

chtype temp_ch = 0;
while(KEY_RESIZE == temp_ch)
   temp_ch = wgetch(cursor_scr);
return 0;
答案

像这样的普通串行端口连接不会发送SIGWINCH。在其他配置中,例如telnet,这是由NAWS完成的(关于窗口大小的谈判 - 我不是see a duplicate)。您的应用程序可以通过执行resize程序执行的操作进行轮询,再加上一点,例如,

  • 保存光标位置
  • 将光标移动到一个非常远的右下角
  • 问终端光标到底在哪里
  • 等待响应,以获得实际的屏幕大小
  • 使用系统调用设置终端屏幕大小
  • 恢复光标位置
  • 发送SIGWINCH给自己

resize不同,这将在您的程序中完成,因此它必须保存/恢复光标位置(以避免混淆ncurses)。请记住,ncurses已将终端设置为原始模式,因此不需要部分初始化。

以上是关于如何在QNX中检测来自ncurses的屏幕调整大小事件?的主要内容,如果未能解决你的问题,请参考以下文章

Python Tkinter未检测到用于GUI大小调整的正确屏幕分辨率

如何在qt中检测屏幕分辨率?

如何在窗口调整大小时隐藏 Facebook 聊天框?

我如何在 c 中获得屏幕分辨率(操作系统 QNX 或 Linux)

在 Unity 中,如何检测窗口是不是正在调整大小以及窗口是不是已停止调整大小

如何在 Mac Catalyst 中检测窗口大小调整?