Описание функции


WM_DROPFILES

Сообщение выполняется при бросании файлов или папок на элементы окна программы.

Параметры

Указанные параметры передаются системой.
wParam Дескриптор структуры перетаскиваемых файлов
lParam -

Примечания

Смотрите функцию SetWindowCallback().
Используется DragQueryFile_() для получения количества файлов и путей. Используйте DragQueryPoint_() для получения координат точки, в которой была отпущена кнопка мыши при бросании файлов.
Окно должно иметь стиль #WS_EX_ACCEPTFILES.
Функции ChangeWindowMessageFilter_() используются, чтобы перетаскивать в окно даже в случаях если программа запущена от администратора.

Пример

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