From: Johan L. <jp...@bo...> - 2001-05-10 16:57:36
|
Wohoo! I got it to work! :) It took some XS hacking though. Nothing fancy, mostly copy-paste and common sense. I added the WM_DROPFILES message to the WindowMsgLoop so that it throws an event DropFiles() with the drop handle in question. And once in Perl it was piece a cake to call the shell32.dll functions DragQueryFile and DragFinish to actually get the files. Cool. This is fun! Some code: GUI.xs, line 1839: ---------- case WM_DROPFILES: if(GetObjectName(NOTXSCALL hwnd, Name)) { /* * (@)EVENT:DropFiles(DROP_HANDLE) * Sent when the window receives dropped files. * (@)APPLIES_TO:Window, DialogBox */ strcat(Name, "_DropFiles"); PerlResult = DoEvent_Long(NOTXSCALL Name, UINT(wParam)); } break; ---------- http://www.bahnhof.se/~johanl/perl/Win32GUI/ - AdHoc.pm Perl subs for dealing with the shell32.dll calls handling the drop operation (among other things). - dragdrop.pl Working demo program (if you rebuild the XS code). The actual drag-drop code is this simple in a Perl application: ---------- Win32::GUI::AdHoc::windowDragAcceptFiles($winMain, 1); sub winMain_DropFiles { my ($handleDrop) = @_; print join("\n", Win32::GUI::AdHoc::windowGetDroppedFiles($handleDrop)) . "\n\n"; return(1); } ---------- I guess a more complete solution would include drag-drop to e.g. a RichEdit or Textfield control etc. but I'm not sure what the implications are. I'm not sure how to continue with this. For my personal use, I'm probably gonna create a Win32::GUI::DragDrop module or something (using my XS mod), but maybe this belongs in the next release of Win32::GUI after a code review (after all, I relly don't _know_ these things). Aldo? /J -- Johan Lindström, Sourcerer, Boss Casinos Ltd, Antigua jp...@bo... |