我正在使用FLTK 1.3.3,我有一段看起来像这样的代码:
class MyWidget: public Fl_Widget
{
private:
virtual int handle(int) override;
void ParseClipboardText(const char *);
public:
// ...
};
int MyWidget::handle(int event)
{
if (event==FL_PASTE)
{
ParseClipboardText(Fl::event_text()); // May throw
return 1;
}
return Fl_Widget::handle(event);
}
问题是如果抛出异常,handle
不会返回,并且剪贴板文本似乎没有被释放(我无法再复制到剪贴板)。
我尝试了一种可行的解决方法但没有成功:
class MyWidget: public Fl_Widget
{
private:
std::string textBuffer;
private:
static void MyCallBack(Fl_Widget *,void *);
virtual int handle(int) override;
void ParseClipboardText(const std::string &);
public:
MyWidget();
};
MyWidget::MyWidget()
{
callback(&MyCallBack);
when(FL_WHEN_CHANGED);
// ...
}
int MyWidget::handle(int event)
{
if (event==FL_PASTE)
{
textBuffer= Fl::event_text();
set_changed();
return 1;
}
return Fl_Widget::handle(event);
}
void MyWidget::MyCallBack(Fl_Widget *pw,void *)
{
MyWidget *pmw= static_cast<MyWidget *>(pw);
pmw->ParseClipboardText(pmw->textBuffer);
}
有没有办法安排在handle
返回后立即调用回调函数?
答案 0 :(得分:0)
最简单的解决方案似乎涉及在redraw
中调用damage
(或更好handle
),然后在draw
方法中调用潜在投掷函数,{{1}已完成。
不发布剪贴板内容的问题发生在Windows下,但不发生在Linux下。