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

标签 c++ fltk

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

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

我试图重写 Fl_Text_Editor 的停用功能并在之后重新激活它的滚动条,但这没有用。显然,当一个小部件的所有父级都处于事件状态时,它就处于事件状态。

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

最佳答案

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

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

关于c++ - FLTK:如何在停用的 Fl_Text_Editor 中启用滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818917/

相关文章:

C++ 多线程返回值

c++ - 如何在 C 和 C++ 中实现装饰器

c++ - 如何使用用户给定的值创建一个表(使用 scanf)?

c - 如何解决 OpenCV libjpeg 和 fltkjpeg 之间的库冲突?

c++ - 在 C++ 程序中有时间等待

c++ - 如果一个函数定义有一个类模板类型的参数并且没有使用它(它的成员)那么它是否被实例化?

c++ - 长期绘制密集粒子系统的良好且安全的语言是什么?

c++ - FLTK fl_line 和 fl_point 不起作用

c++ - FLTK Hello World 字体异常

C++ FLTK图像重绘