IDropTarget obsługa drag & drop

dział ogólny

IDropTarget obsługa drag & drop

Nowy postprzez ronaldo » środa, 20 kwietnia 2011, 09:32

Witam,
to jest mój pierwszy post na tym forum.
Korzystałem już z wyszukiwarki, ale nic nie znalazłem.
Poszukuję przykładu użycia interfejsu IDropTarget w C++, znalazłem sporo przykładów w Pascalu, jednak nie wychodzi mi przeniesienie tego na C++.
Czy ktoś jest w stanie mi pomóc? :roll:
Avatar użytkownika
ronaldo
Bladawiec
Bladawiec
 
Posty: 1
Dołączył(a): poniedziałek, 18 kwietnia 2011, 13:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 5
Gadu Gadu: 0
    Windows VistaInternet Explorer 8

Re: IDropTarget obsługa drag & drop

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 10:26

(...) jednak nie wychodzi mi przeniesienie tego na C++.

Jeśli nie wychodzi, to pokaż, co tam masz. Zasadniczo używanie COM-a wymaga nieco większego skilla, więc jeśli VCL ma jakieś opakowanie na interfejsy IDropTarget i IDataObject, to użyj go.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: IDropTarget obsługa drag & drop

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 12:39

Przykład w C++, ale mocno skomplikowany:


Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: IDropTarget obsługa drag & drop

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 13:36

Nie wiem do czego jest Tobie potrzebny ten interfejs IDropTarget, więc pokaże jak można w VCL zrobić przeciąganie plików np. z pulpitu, Exploratora Windows, testowałem też w Total Commander:

Potrzebne elementy umieszczamy na formularzu: Memo1 (TMemo), ListBox1 (TListBox), ApplicationEvents1 (TApplicationEvents).

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
 Memo1->Lines->LoadFromFile(ListBox1->Items->Strings[ListBox1->ItemIndex]);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 DragAcceptFiles(Memo1->Handle, True);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 DragAcceptFiles(Memo1->Handle, False);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
 if(Msg.message == WM_DROPFILES)
 {
  ListBox1->Items->Clear();
  Memo1->Lines->Clear();

  int fileCount = DragQueryFile((HANDLE)Msg.wParam, 0xFFFFFFFF, NULL, 0);
  if(fileCount == 1)
  {
   wchar_t *wFileName;
   int iFLength = DragQueryFile((HANDLE)Msg.wParam, 0, NULL, 0) + 1;
   wFileName = new wchar_t[iFLength];

   DragQueryFile((HANDLE)Msg.wParam, 0, wFileName, iFLength);

   ListBox1->Items->Add(wFileName);

   Memo1->Lines->LoadFromFile(wFileName);

   delete wFileName;
  }
  else
  {
   for(int c = 0; c < fileCount; c++)
   {
        wchar_t * wFileName;
        int iFLength = DragQueryFile((HANDLE)Msg.wParam, c, NULL, 0) + 1;
        wFileName = new wchar_t[iFLength];

        DragQueryFile((HANDLE)Msg.wParam, c, wFileName, iFLength);

        ListBox1->Items->Add(wFileName);

        delete wFileName;
   }
  }
 }
}
//---------------------------------------------------------------------------



Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 51 gości

cron