如何设置Fl_Text_Editor的大小?
How to set a size of Fl_Text_Editor?
此时此刻,我的目标是用C++写一个简单的文本编辑器。由于我需要我的文本框位于 window 的 内部 ,因此当我更改 window 大小时,它也必须更改它的大小。这是我的代码:
int main(int argc, char **argv) {
{ window_main = new Fl_Double_Window(624, 644, "Text editor");
window_main->labelfont(1);
window_main->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
{ File = new Fl_Menu_Button(0, 0, 69, 20, "File");
File->labelfont(13);
File->menu(menu_File);
} // Fl_Menu_Button* File
{ File_text = new Fl_Text_Editor(5, 25, 0, 615);
Fl_Group::current()->resizable(File_text);
} // Fl_Text_Editor* File_text
window_main->size_range(0, 0, 1280, 660);
window_main->end();
} // Fl_Double_Window* window_main
File_text->resize(5, 25, Fl::w - 5, Fl::h - 25);
window_main->show(argc, argv);
return Fl::run();
}
但是我没有在这个class中找到调整大小的函数Fl_Text_Editorclass。
你能帮帮我吗?
调用 size_range() 使得 window 可调整大小作为副作用(它只告诉 FLTK window 的大小范围是什么),你仍然会需要调用 resizable() 方法。
我修改了您的示例以获得一段有效的代码:
#include <FL/Fl.H>
#include <FL/Fl_Menu_Button.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Text_Editor.H>
#include <FL/Fl_Text_Buffer.H>
#include <FL/Fl_File_Chooser.H>
Fl_Text_Buffer *buf;
void cb(Fl_Widget *w, void *data) {
Fl_File_Chooser *chooser = new Fl_File_Chooser(
".", "*.{txt,cpp,c}", Fl_File_Chooser::SINGLE, "MyDialog");
chooser->show();
while (chooser->shown())
Fl::wait();
buf->loadfile(chooser->value());
}
int main(int argc, char **argv) {
buf = new Fl_Text_Buffer;
Fl_Menu_Item menu_File[] = { {"New", 0, cb, nullptr}, nullptr };
Fl_Double_Window *window_main = new Fl_Double_Window(624, 644, "Text editor");
window_main->labelfont(1);
window_main->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
Fl_Menu_Button *File = new Fl_Menu_Button(0, 0, 69, 20, "File");
File->labelfont(13);
File->menu(menu_File);
Fl_Text_Editor *File_text = new Fl_Text_Editor(5, 25, window_main->w() - 10, 615);
File_text->buffer(buf);
window_main->size_range(0, 0, 1280, 660);
window_main->resizable(File_text); // <-- here
window_main->end();
window_main->show(argc, argv);
return Fl::run();
}
此外,我建议 OP 设置 size_range() 的最小值而不是最大值。通常,window 内容需要最小尺寸,但用户可以在屏幕尺寸允许的情况下随意放大 window。因此,我会将 size_range()
语句更改为:
window_main->size_range(400, 300); // set minimum window size
此时此刻,我的目标是用C++写一个简单的文本编辑器。由于我需要我的文本框位于 window 的 内部 ,因此当我更改 window 大小时,它也必须更改它的大小。这是我的代码:
int main(int argc, char **argv) {
{ window_main = new Fl_Double_Window(624, 644, "Text editor");
window_main->labelfont(1);
window_main->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
{ File = new Fl_Menu_Button(0, 0, 69, 20, "File");
File->labelfont(13);
File->menu(menu_File);
} // Fl_Menu_Button* File
{ File_text = new Fl_Text_Editor(5, 25, 0, 615);
Fl_Group::current()->resizable(File_text);
} // Fl_Text_Editor* File_text
window_main->size_range(0, 0, 1280, 660);
window_main->end();
} // Fl_Double_Window* window_main
File_text->resize(5, 25, Fl::w - 5, Fl::h - 25);
window_main->show(argc, argv);
return Fl::run();
}
但是我没有在这个class中找到调整大小的函数Fl_Text_Editorclass。
你能帮帮我吗?
调用 size_range() 使得 window 可调整大小作为副作用(它只告诉 FLTK window 的大小范围是什么),你仍然会需要调用 resizable() 方法。
我修改了您的示例以获得一段有效的代码:
#include <FL/Fl.H>
#include <FL/Fl_Menu_Button.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Text_Editor.H>
#include <FL/Fl_Text_Buffer.H>
#include <FL/Fl_File_Chooser.H>
Fl_Text_Buffer *buf;
void cb(Fl_Widget *w, void *data) {
Fl_File_Chooser *chooser = new Fl_File_Chooser(
".", "*.{txt,cpp,c}", Fl_File_Chooser::SINGLE, "MyDialog");
chooser->show();
while (chooser->shown())
Fl::wait();
buf->loadfile(chooser->value());
}
int main(int argc, char **argv) {
buf = new Fl_Text_Buffer;
Fl_Menu_Item menu_File[] = { {"New", 0, cb, nullptr}, nullptr };
Fl_Double_Window *window_main = new Fl_Double_Window(624, 644, "Text editor");
window_main->labelfont(1);
window_main->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
Fl_Menu_Button *File = new Fl_Menu_Button(0, 0, 69, 20, "File");
File->labelfont(13);
File->menu(menu_File);
Fl_Text_Editor *File_text = new Fl_Text_Editor(5, 25, window_main->w() - 10, 615);
File_text->buffer(buf);
window_main->size_range(0, 0, 1280, 660);
window_main->resizable(File_text); // <-- here
window_main->end();
window_main->show(argc, argv);
return Fl::run();
}
此外,我建议 OP 设置 size_range() 的最小值而不是最大值。通常,window 内容需要最小尺寸,但用户可以在屏幕尺寸允许的情况下随意放大 window。因此,我会将 size_range()
语句更改为:
window_main->size_range(400, 300); // set minimum window size