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

时间:2015-01-07 11:52:20

标签: c++ fltk

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

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

我试图覆盖Fl_Text_Editor的停用功能,然后反应其滚动条,但这并没有奏效。显然,当一个小部件的所有父节点也处于活动状态时,它处于活动状态。

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

1 个答案:

答案 0 :(得分:2)

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

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);

设置颜色只是增加额外的一项,使显示看起来不可写。