【问题标题】:PDCurses getmaxxy function always returns the same valuesPDCurses getmaxxy 函数总是返回相同的值
【发布时间】:2023-07-06 22:47:01
【问题描述】:

环境:

  • PDCurses 最新版本
  • Windows 10
  • Visual Studio 2015 更新 2

问题

PDCurses 提供了一个函数getmaxxy 来获取屏幕的最大x 和y 坐标。这会在启动时返回正确的值,但如果我用鼠标调整窗口大小然后再次调用getmaxxy,我会返回相同的值。

这是 pdcurses 中的错误/限制吗?是否有特定于 Windows 的方法来获取此信息?

我也尝试过这个特定于 Windows 的解决方案,它也总是返回启动值:Getting terminal size in c for windows?

【问题讨论】:

  • 从未使用过该库我不知道这是否正确,但对我来说getmaxxy 听起来像是一个函数,它将为您提供可能的最大窗口大小而不是当前窗口大小。你能检查一下吗?
  • 它正确返回程序第一次启动时控制台的大小。无论您将窗口放大还是缩小,它都不会改变。

标签: c++ console ncurses pdcurses


【解决方案1】:

阅读源代码,

  • WINDOW_maxx_maxy 成员仅在创建窗口(包括复制窗口)时设置。
  • stdscr是一个窗口

如果你调整了屏幕大小,那么你应该告诉 PDCurses 新的大小,使用resize_term(一个改编自 ncurses 的函数),例如,

resize_term(new_lines, new_cols);

会重新创建标准窗口,例如 stdscr

不管怎样,PDCurses 提供了这些函数来与 ncurses 兼容:

【讨论】:

  • 我明白了,所以我需要使用操作系统特定的代码来检测窗口是否已调整大小,并弄清楚要告诉 ncurses/pdcurses 什么,听起来像。
  • ncurses 有一个 SIGWINCH 处理程序,并在读取 KEY_RESIZE 后更新屏幕尺寸,但 pcurses 没有任何内容 - 需要一些工作。
【解决方案2】:

只需检查KEY_RESIZE,如果出现,请致电resize_term(0, 0)。您可以在演示中看到几个这样的示例(在 testcurs、rain 和 worm 中)。如果您不检查键盘输入,可以使用is_termresized()

resize_term() 实际上是两个不同的函数——以零作为参数,它响应用户发起的调整大小;对于非零,它会尝试将窗口实际调整为给定大小。通常,给定平台上只有一种或另一种功能(或两者都不可用)。 SDL 允许两者。

【讨论】:

  • 我相信在 windows/win32 构建 KEY_RESIZE 不起作用,对吗?
最近更新 更多