ondropfiles开始持久功能



使用wxperl我想在将文件拖动到窗口后启动持久功能。这是我的droptarget代码:

package FilesDropTarget;
use strict;
use Wx qw[:allclasses];
use base qw(Wx::FileDropTarget);
sub new {
  my $class = shift;
  my $caller = shift;
  my $fref = shift;
  my $this = $class->SUPER::new( @_ );
  $this->{caller} = $caller;
  $this->{fref} = $fref;
  return $this;
}
sub OnDropFiles {
  my( $this, $x, $y, $files ) = @_;
  &{$this->{fref}}($this->{caller},@$files);
  return 1;
}

通过

使用此模块
$frame->{TextControl}->SetDropTarget( FilesDropTarget->new($frame,&runner) );

(ondropfiles将删除文件作为参数调用函数& runner()。一切都很好,除了在函数& runner()正常工作时阻止了Windows上的拖放窗口,这可能是一个持久的操作。 OnDropFiles返回1后,拖动源窗口再次可用。

是否有机会在& runner()完成之前将拖放源毫无疑问?

不要立即调用该功能,而是将其推迟到下一个事件循环迭代为止。如果3.x callafter()由wxperl包裹,则应使用它。如果没有,请使用通常的wxEVT_IDLE技巧手动模拟它:让此事件的处理程序检查标志并在函数设置(并重置它)的情况下调用函数,然后将此标志设置在您的OnDropFiles()中。

相关内容

  • 没有找到相关文章

最新更新