Описание функции
WM_DROPFILES
Сообщение выполняется при бросании файлов или папок на элементы окна программы.
Параметры
Указанные параметры передаются системой.wParam | Дескриптор структуры перетаскиваемых файлов |
lParam |
- |
Примечания
Смотрите функцию SetWindowCallback().Пример
EnableExplicit
Global hWin_0
#Window_0 = 0
Enumeration
#ed1
EndEnumeration
; https://www.purebasic.fr/english/viewtopic.php?p=565407#p565407
Procedure AddDropMain(Dropped)
Protected Count, i, Length, FileName$;, p.POINT, hWndCur
Count = DragQueryFile_(Dropped, -1, 0, 0)
; If DragQueryPoint_(Dropped, @p)
; hWndCur = WindowFromPoint_(PeekQ(@p))
; Debug hWndCur
; Debug GetDlgCtrlID_(hWndCur)
; Debug p\x
; Debug p\y
; EndIf
For i = 0 To Count - 1
Length = DragQueryFile_(Dropped, i, 0, 0)
FileName$ = Space(Length)
DragQueryFile_(dropped, i, FileName$, Length + 1)
If FileSize(FileName$) > -1 ; только файлы, игнор папок
AddGadgetItem(#ed1, i, FileName$)
; Select GetExtensionPart(FileName$) ; только указанные расширения
; Case "exe"
; AddGadgetItem(#ed1, i, FileName$)
; EndSelect
EndIf
Next
DragFinish_(Dropped)
EndProcedure
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_DROPFILES
AddDropMain(wParam)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
hWin_0 = OpenWindow(#Window_0, 0, 0, 560, 600, "WM_DROPFILES", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If hWin_0
EditorGadget(#ed1, 10, 10, 540, 580, #PB_Editor_WordWrap)
SetGadgetText(#ed1, "Событие WM_DROPFILES выполняется при бросании папrи/файла в окно")
ChangeWindowMessageFilter_(#WM_DROPFILES, #MSGFLT_ADD)
ChangeWindowMessageFilter_(#WM_COPYDATA, #MSGFLT_ADD)
ChangeWindowMessageFilter_(73, #MSGFLT_ADD)
SetWindowLongPtr_(hWin_0, #GWL_EXSTYLE, GetWindowLongPtr_(hWin_0, #GWL_EXSTYLE) | #WS_EX_ACCEPTFILES)
SetWindowCallback(@WindowCallback())
;-Основной цикл
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver
EndIf