FLTK:如何在停用的 Fl_Text_Editor 中启用滚动条

Posted

技术标签:

【中文标题】FLTK:如何在停用的 Fl_Text_Editor 中启用滚动条【英文标题】:FLTK: How to enable scrollbar in deactivated Fl_Text_Editor 【发布时间】:2015-01-07 11:52:20 【问题描述】:

在某些情况下,我们想让 Fl_Text_Editor 中的文本不可编辑(例如,当用户加载只读文件时。显然,在这些情况下也可以使用 Fl_Text_Display )

目前,我们通过在 Fl_Text_Editor 小部件上调用 deactivate() 来实现此目的,这会正确禁用小部件并使其变灰。但是,这似乎也禁用了滚动条,并且用户无法向下滚动小部件以阅读其余文本。

我试图覆盖 Fl_Text_Editor 的 deactivate 函数并在之后响应它的滚动条,但这不起作用。显然,当它的所有父母都处于活动状态时,一个小部件是活动的..

任何关于我如何仍然可以使用已停用 Fl_Text_Editor 的滚动条的想法将不胜感激。

【问题讨论】:

【参考方案1】:

由于 Fl_Text_Editor 和 Fl_Text_Display 之间的主要区别在于句柄函数,最简单的做法是创建自己的类来决定使用哪个句柄。尝试将以下内容添加到您的代码中

class TextEditor: public Fl_Text_Editor

   bool m_readonly;
   Fl_Color grey;
   Fl_Color normal;
public:
   TextEditor(int x, int y, int w, int h, const char* l = 0)
      :Fl_Text_Editor(x, y, w, h, l)
      , m_readonly(false)
   
      grey = FL_BACKGROUND_COLOR;
      normal = FL_BACKGROUND2_COLOR;
   

   int handle(int e)
   
      int rv = 0;
      if (m_readonly)
         rv = Fl_Text_Display::handle(e);
      else
         rv = Fl_Text_Editor::handle(e);
      return rv;
   

   void Readonly(bool in_set)
   
      m_readonly = in_set;
      color(m_readonly? grey: normal);
   
;

使用 TextEditor 代替 Fl_Text_Editor。如果您想停用,只需调用 Readonly(true);

设置颜色只是为了使显示看起来不可写而额外添加的。

【讨论】:

效果很好,并且比我的解决方案更优雅(覆盖 Fl_Text_Editor 的句柄事件并忽略关键事件)。 Tnx!

以上是关于FLTK:如何在停用的 Fl_Text_Editor 中启用滚动条的主要内容,如果未能解决你的问题,请参考以下文章

如何使用/在 Cygwin 中正确安装 FLTK?

如何在 MinGW 中使用 FLTK 1.1 dll?

如何在函数中调用 FLTK 代码?

如何在 Xcode 6 中安装 FLTK 项目模板?

如何使用代码块安装 fltk

如何在 Ubuntu 下使用 FLTK 编译