oops, forgot to attach the patch...

2006/3/9, Reini Urban <[EMAIL PROTECTED]>:
> I simplified and fixed some code in the XS part of DragDrop.
> The second argument to the DropFiles event is now a proper
> Win32::GUI::DragDrop object with the HDROP handle as -handle.
>
> Unicode filenames not yet supported.
>
> And I wonder if we should not support a higher level interface, by filling
> the needed properties of this object on creation, with the files
> and the mousepoint automatically.
> Then none of the 4 DragDrop functions would be needed and the
> event would be much simplier to use.
>
> Now:
> sub Main_DropFiles {
>   my $win = shift; # dropped on which window
>   my @files;
>   if (ref $_[0] eq 'Win32::GUI::DragDrop') { # GUI 1.04
>     #my $pos = $_[0]->DragQueryPoint();
>     #my $l = $_[0]->DragQueryFile(0xFFFFFFFF);
>     #my $f0 = $_[0]->DragQueryFile(0);
>     @files = $_[0]->DragQueryFiles();
>     # and from here on the HDROP ressource behind the $_[0] object is 
> destroyed.
>   } else {
>     @files = Win32::GUI::DragDrop::GetDroppedFiles(shift); # Loft
>   }
>   return 0 unless @files;
>   .. do something with the files
> }
>
> Then:
> sub Main_DropFiles {
>   my $win = shift; # dropped on which window
>   my @files;
>   if (ref $_[0] eq 'Win32::GUI::DragDrop') { # GUI 1.04
>     @files = $_[0]->DragFiles;
>     $pos = $_[0]->DragPos; # pos stored in the perl object
>   } else {
>     @files = Win32::GUI::DragDrop::GetDroppedFiles(shift); # Loft
>   }
>   return 0 unless @files;
>   .. do something with the files
> }
>
> Now I will finish all the needed support functions for CustomDraw and
> make a simplier example without Win32::API.
>
> 2006/3/8, Reini Urban <[EMAIL PROTECTED]>:
> > Hi
> > I just finished adding DragDrop to Win32::GUI.
> >
> > I didn't like the Loft methods and it's Win32::API dependency,
> > so it's a good GUI.xs and Window.xs integration with the "DropFiles"
> > NEM and OEM events supported.
> > Attached is the generated pod and patch.
> >
> > A Window can use the -dropfiles => 0|1 option to accept dropping files,
> > or the DragAcceptFiles() method.
> > The event can be registered via <name>_DropFiles or via -onDropFiles.
> > Sample:
> > sub Main_DropFiles {
> >   # check if called as method or function
> >   if ($_[0] =~ /Win32::GUI::(Window|DialogBox)/) {
> >     shift;
> >   }
> >   # now the DragDrop handle should be on the stack. (not an object yet 
> > though)
> >   my $files = Win32::GUI::DragDrop::DragQueryFiles(shift);
> >   return 0 unless @$files;
> >   ...
> > }
> >
> > Some notes:
> > The DragDrop handle passed to the event is no object yet.
> > So only the function call is supported yet, not as method.
> >
> > sub win_DropFiles { $files = $_[0]->DragQueryFiles(); } # invalid!
> > I didn't care to stash the handle in XS yet. It's just a long.
> --
> Reini Urban
> http://phpwiki.org/
> http://spacemovie.mur.at/   http://helsinki.at/
>


--
Reini Urban
http://phpwiki.org/
http://spacemovie.mur.at/   http://helsinki.at/

Attachment: DragDrop.pod
Description: Binary data

Attachment: dragdrop.patch.gz
Description: GNU Zip compressed data

Reply via email to