使用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()
中。