GLISSER DES FICHIERS SUR VOTRE APPLI [WIN32] [UTILISATION WIN32 OU MFC EXPLICITÉ

Signaler
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25814-glisser-des-fichiers-sur-votre-appli-win32-utilisation-win32-ou-mfc-explicite

victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
Voici une version 100% compatible Dev-C++ que j'ai corrigé :
#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";


void recupNomFichierDragDrop(HDROP* leDrop, char* listeResult)
{
HDROP hDropInfo=*leDrop;
int nb,taille,i;
taille=0;
nb=0;
nb=DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0 );
/*if(nb==0)
PB1("un appel inutil à la fonction BVisuel::recupNomFichierDragDrop");*/
char fic[500];
for( i = 0; i < nb; i++ )
{
taille=DragQueryFile(hDropInfo, i, NULL, 0 )+1;
DragQueryFile(hDropInfo, i, fic, taille );
strcat(listeResult,"\n");
strcat(listeResult,fic);
}
DragFinish(hDropInfo); //vidage de la mem...
*leDrop=hDropInfo; //TOCHECK : transmistion de param...
}

void OnDropFiles(HDROP hDropInfo)
{
char listeFicSrces[5000];
recupNomFichierDragDrop(&hDropInfo, listeFicSrces);
MessageBox(NULL,listeFicSrces,"Liste :",MB_OK|MB_ICONINFORMATION);
}



int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;

hwnd = CreateWindowEx (
WS_EX_ACCEPTFILES,szClassName,"Drop Files",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,
hThisInstance,NULL);

ShowWindow (hwnd, nFunsterStil);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DROPFILES:
OnDropFiles((HDROP) wParam);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
une version sans mes bibli !!!!
compilée sous devC++
personnellement je la trouve très lourde en ressource & pas pratique car non dynamique.... & sans protection
mais bon, ça a résolu 2 demandes sur msn alors... la voici
___________________________________________
#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";

void recupNomFichierDragDrop(HDROP* leDrop, char** listeResult);
void OnDropFiles(HDROP hDropInfo)
{
char listeFicSrces[50000];
recupNomFichierDragDrop(&hDropInfo, &listeFicSrces);
MessageBox(NULL,listeFicSrces,"liste fic drag n drop",MB_OK|MB_ICONINFORMATION);
}


void recupNomFichierDragDrop(HDROP* leDrop, char** listeResult)
{
HDROP hDropInfo=*leDrop;
int nb,taille,i;
taille=0;
nb=0;
nb=DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0 );
if(nb==0)
PB1("un appel inutil à la fonction BVisuel::recupNomFichierDragDrop");
char fic[500];
for( i = 0; i < nb; i++ )
{
taille=DragQueryFile(hDropInfo, i, NULL, 0 )+1;
DragQueryFile(hDropInfo, i, fic, taille );
strcat(*listeResult,"\n");
strcat(*listeResult,fic);
}
DragFinish(hDropInfo); //vidage de la mem...
*leDrop=hDropInfo; //TOCHECK : transmistion de param...
}


int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))
return 0;

hwnd = CreateWindowEx (
WS_EX_ACCEPTFILES,szClassName,"Windows App",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,
hThisInstance,NULL);

ShowWindow (hwnd, nFunsterStil);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DROPFILES:
MessageBox(hwnd,"Vous avez glissé un ou plusiers fichier(s) !!!","Info",MB_OK|MB_ICONINFORMATION);
OnDropFiles((HDROP) wParam);
break;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
avec pr seul include : BFichier
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
TRAITE_EXCEPTION_B;
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
ah....
CT po ça
BFichier est OK

C l'appel à simplifier


=>


try
{
BLBString listeFicSrces;
BString nomFic=BFichier::recupNomFichierDragDrop(&hDropInfo,"erreur de drop", NULL, &listeFicSrces,false,false);
BVisuel::informe(listeFicSrces.toString());
}