FLTK:如何在停用 Fl_Text_Editor 中启用滚动条
FLTK: How to enable scrollbar in deactivated Fl_Text_Editor
在某些情况下,我们想让 Fl_Text_Editor 中的文本不可编辑(例如,当用户加载只读文件时。显然,在这些情况下也可以使用 Fl_Text_Display)
目前,我们通过在 Fl_Text_Editor 小部件上调用 deactivate() 来实现此目的,这会正确地禁用小部件并使其变灰。但是,这似乎也禁用了滚动条,用户无法向下滚动小部件来阅读剩余的文本。
我试图覆盖 Fl_Text_Editor 的停用功能并在之后重新激活其滚动条,但这没有用。显然,当一个小部件的所有父级都处于活动状态时,它就处于活动状态..
任何关于我如何仍然使用已停用 Fl_Text_Editor 的滚动条的想法将不胜感激。
由于 Fl_Text_Editor 和 Fl_Text_Display 之间的主要区别在于句柄函数,最简单的做法是创建自己的 class 来决定使用哪个句柄。尝试将以下内容添加到您的代码中
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 中的文本不可编辑(例如,当用户加载只读文件时。显然,在这些情况下也可以使用 Fl_Text_Display)
目前,我们通过在 Fl_Text_Editor 小部件上调用 deactivate() 来实现此目的,这会正确地禁用小部件并使其变灰。但是,这似乎也禁用了滚动条,用户无法向下滚动小部件来阅读剩余的文本。
我试图覆盖 Fl_Text_Editor 的停用功能并在之后重新激活其滚动条,但这没有用。显然,当一个小部件的所有父级都处于活动状态时,它就处于活动状态..
任何关于我如何仍然使用已停用 Fl_Text_Editor 的滚动条的想法将不胜感激。
由于 Fl_Text_Editor 和 Fl_Text_Display 之间的主要区别在于句柄函数,最简单的做法是创建自己的 class 来决定使用哪个句柄。尝试将以下内容添加到您的代码中
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);
设置颜色只是为了使显示看起来不可写而添加的额外内容。