|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
[WIN32][C][DEV-C++] SPLITALL GESTIONNAIRE DE DÉCOUPAGE / RECOLLAGE DE FICHIERS SIMPLE
Information sur la source
Description
Voici un petit utilitaire sans grande prétention :) Le but de cet utilitaire est de diviser des fichiers en morceaux de taille voulu Les fonctionnalités / fonctionnement: - découpage / recollage de fichier de taille en ko - agencement dans une Listbox - utilisation d'une dialog comme fenêtre principal - gestion du drag and drop - gestion du répertoire de destination (attention le même pour tous les fichiers) j'ai essayé de commenter un maximum. Pour exécuter le programme renommer le fichier "SplitAll.ex" en "SplitAll.exe" Vos commentaires sont les bien venu :)
Source
- //------------------------------------------------------------------------------
- // Projet SplitAll : découpage de fichier + recollage
- // Auteur : Hanteville Nicolas
- // Fichier : main.c
- // Version : 0.1
- // Date de modification : 07/06/2007
- //------------------------------------------------------------------------------
- //------------------------------------------------------------------------------
- // gestion des includes
- //------------------------------------------------------------------------------
- #include "ressources.h"
- //------------------------------------------------------------------------------
- // nous renvoie le nom du fichier pour un chemin
- char *StripNomDest(char *dest)
- {
- //on se place a la fin de la chaine
- while(*dest) dest++;
-
- //on place le curseur au début du nom du fichier (situé aprèss le dernier / ou \)
- while(*dest != '\\' && *dest != '/') dest--;
- dest++;
- return dest;
- }
- //------------------------------------------------------------------------------
- //fonctions de threads
- //------------------------------------------------------------------------------
- //découpe
- DWORD WINAPI Decoupee(LPVOID lParam)
- {
- //nb items a traiter
- unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
- if (!max) return 0;
-
- unsigned int total = max;
- unsigned int i;
- DWORD copiee;
- char tmp[TAILLE_REP_FIC];
-
- GetWindowText(H_EDIT,tmp,TAILLE_REP_FIC);
- __int64 taille_fichier_sortie = _atoi64(tmp)*1024; //talle en koctet maximum par fichier
- __int64 taille_total;
- char item[TAILLE_REP_FIC];
- HWND Hsrc,Hdest;
- char buffer[taille_fichier_sortie];
-
- if (taille_fichier_sortie>0)
- {
-
- //on ouvre chacun des fichiers de la liste un par un
- while(max--){
- i=1;//numéro de nomage commence a 1
-
- //récupération du texte du 1er item
- SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
-
- //on ouvre le fichier
- Hsrc= CreateFile(item,FILE_SHARE_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
-
- if (Hsrc != INVALID_HANDLE_VALUE)
- {
- taille_total = GetFileSize(Hsrc,NULL);
-
- while (taille_total>0 && Hdest!=INVALID_HANDLE_VALUE)
- {
- ReadFile(Hsrc, buffer, taille_fichier_sortie,&copiee, 0);
-
- snprintf(tmp,TAILLE_REP_FIC,"%s\\%s.%03d",DEstDEfaultTmp,StripNomDest(item),i++);
-
- Hdest= CreateFile(tmp,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
- if (Hdest==INVALID_HANDLE_VALUE)
- MessageBox(0,tmp,"Erreur de copie!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
- else
- {
- WriteFile(Hdest,buffer,copiee,&copiee,0);
- }
- CloseHandle(Hdest);
-
- taille_total-=copiee;
- }
-
- }else
- MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
-
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)(total-max)*100/total, 0);
-
- CloseHandle(Hsrc);
-
- //on supprime le 1er item
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
- }
-
- //progression
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
- }else
- MessageBox(0,"Il faut indiquer une taille minimum de fichier","Erreur!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
- }
- //------------------------------------------------------------------------------
- //recoller
- DWORD WINAPI Recollee(LPVOID lParam)
- {
- //nb items
- unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
- if (!max) return 0;
- unsigned int total = max;
- char tmp[TAILLE_REP_FIC];
- char item[TAILLE_REP_FIC];
- DWORD copiee;
-
- //récupération du texte du 1er item
- SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
- snprintf(tmp,TAILLE_REP_FIC,"%s\\%s",DEstDEfaultTmp,StripNomDest(item));
- tmp[strlen(tmp)-4]=0; //on enlève l'extension S01
-
- //ouverture du fichier de destination
- HWND Hdest= CreateFile(tmp,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
-
- if (Hdest != INVALID_HANDLE_VALUE)
- {
- HWND Hsrc;
- __int64 taille_fic=0;
-
-
- char *buffer;
-
- //gestion automatique
- //si un seul fichier a recoler on récupère les items automatiquement
- if (max ==1)
- {
- int i=1;
-
- //progression
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)50, 0);
-
-
- do{
- //génération du nom du fichier
- sprintf(item,"%s.%03d",tmp,i);
-
- //on ouvre le fichier
- Hsrc= CreateFile(item,GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
-
- //si ok on continue sinon méssage de choix
- if (Hsrc != INVALID_HANDLE_VALUE)
- {
- //récupération de la taille du fichier
- taille_fic = GetFileSize(Hsrc,NULL);
-
- if (taille_fic>0)
- {
- buffer = malloc(taille_fic);
-
- //on copie le comptenu du fichier dans le nouveau fichier / a la suite
- ReadFile(Hsrc, buffer, taille_fic,&copiee,0);
- WriteFile(Hdest,buffer,copiee,&copiee,0);
-
- free(buffer);
- }
- }
-
- CloseHandle(Hsrc);
-
- i++;
- }while (Hsrc != INVALID_HANDLE_VALUE);
-
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)100, 0);
- //on supprime le 1er item
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
-
- }else
- {
- while (max--)
- {
-
- //récupération du texte du 1er item
- SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
-
- //on ouvre le fichier
- Hsrc= CreateFile(item,GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
-
- //si ok on continue sinon méssage de choix
- if (Hsrc != INVALID_HANDLE_VALUE)
- {
- //récupération de la taille du fichier
- taille_fic = GetFileSize(Hsrc,NULL);
-
- if (taille_fic>0)
- {
- buffer = malloc(taille_fic);
-
- //on copie le comptenu du fichier dans le nouveau fichier / a la suite
- ReadFile(Hsrc, buffer, taille_fic,&copiee,0);
- WriteFile(Hdest,buffer,copiee,&copiee,0);
-
- free(buffer);
- }else
- MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
-
- }else
- MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
- CloseHandle(Hsrc);
- //on supprime le 1er item
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
-
- //progression
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)(total-max)*100/total, 0);
-
- };
- }
- }else
- MessageBox(0,"Erreur : reconstitution de fichier impossible !!!","Erreur",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
-
- //progression
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
-
- CloseHandle(Hdest);
- }
- //------------------------------------------------------------------------------
- //gestion des appels et msg sur le fenêtre principale
- HRESULT DlgProc(HWND hwnd,UINT Msg,WPARAM Wparam,LPARAM lParam)
- {
- HDROP H_DropInfo;
- int nb,i;
- char *tmp;
- switch(Msg)
- {
- case WM_INITDIALOG:
- InitCommonControls();
-
- //récupération des handl généraux
- H_EDIT = GetDlgItem(hwnd,EDIT_TAILLE);
- H_LST = GetDlgItem(hwnd,LST);
- H_PROGRESS_BAR = GetDlgItem(hwnd,PROGRESS_BAR);
-
- //application d'une icone
- SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(Hinst, MAKEINTRESOURCE(ID_ICON)));
-
- //init barre de progression
- SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
- break;
- case WM_CLOSE:
- EndDialog(hwnd,0);
- //PostQuitMessage(0);
- break;
- case WM_COMMAND :
- if ((LOWORD(Wparam) == BT_SUP) && (HIWORD(Wparam) == BN_CLICKED))
- {
- //suppression de la sélection
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0),(LPARAM)0);
- }else if ((LOWORD(Wparam) == BT_PLUS) && (HIWORD(Wparam) == BN_CLICKED))
- {
- //emplacement du texte actuel
- int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
-
- if (nb>0)
- {
- tmp = malloc(TAILLE_REP_FIC);
-
- //récupération du texte sélectionné
- SendMessage(H_LST,LB_GETTEXT,(WPARAM)nb,(LPARAM)tmp);
-
- //suppression
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
-
- //insertion
- SendMessage(H_LST,LB_INSERTSTRING,(WPARAM)--nb,(LPARAM)tmp);
-
- //application de la sélection
- SendMessage(H_LST,LB_SETCURSEL ,(WPARAM)nb,(LPARAM)0);
-
- free(tmp);
- }
-
-
- }else if ((LOWORD(Wparam) == BT_MOINS) && (HIWORD(Wparam) == BN_CLICKED))
- {
- //emplacement du texte actuel
- int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
- int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
-
- if (nb>=0 && nb<(max-1))
- {
- tmp = malloc(TAILLE_REP_FIC);
- //récupération du texte sélectionné
- SendMessage(H_LST,LB_GETTEXT,(WPARAM)nb,(LPARAM)tmp);
-
- //suppression
- SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
-
- //insertion
- SendMessage(H_LST,LB_INSERTSTRING,(WPARAM)++nb,(LPARAM)tmp);
-
- //application de la sélection
- SendMessage(H_LST,LB_SETCURSEL ,(WPARAM)nb,(LPARAM)0);
-
- free(tmp);
- }
- }else if ((LOWORD(Wparam) == BT_RECOLLER) && (HIWORD(Wparam) == BN_CLICKED))
- {
- //recollage
- CreateThread(NULL, 0,Recollee,0,0,0);
-
- }else if ((LOWORD(Wparam) == BT_DECOUPE) && (HIWORD(Wparam) == BN_CLICKED))
- {
- //découpage
- CreateThread(NULL, 0,Decoupee,0,0,0);
- }
- break;
- case WM_DROPFILES:
-
- tmp = malloc(TAILLE_REP_FIC);
-
- //récupération de la liste des fichiers sélectionnés + traitemen
- H_DropInfo=(HDROP)Wparam;//récupération de la liste
-
- //traitement : nb de fichier en drag
- nb=DragQueryFile(H_DropInfo, 0xFFFFFFFF, NULL, 0 );
-
- //demander emplacement de copie
- BROWSEINFO browser;
- LPITEMIDLIST lip;
-
- browser.hwndOwner = hwnd;
- browser.pidlRoot = 0;
- browser.lpfn = 0;
- browser.ulFlags = BIF_NEWDIALOGSTYLE; //permet l'option de création d'un dossier
- browser.lParam = 0;
- browser.pszDisplayName = DEstDEfaultTmp; //résultat ici
- browser.lpszTitle = "Dossier de destination";
- lip = SHBrowseForFolder(&browser);
- if (lip != NULL)
- {
- SHGetPathFromIDList(lip,DEstDEfaultTmp);
-
- for (i=0;i<nb;i++)
- {
- DragQueryFile(H_DropInfo,i,tmp,DragQueryFile(H_DropInfo,i,0,0)+1 ); //récupération
- SendMessage(H_LST,LB_ADDSTRING,(WPARAM)0,(LPARAM)tmp);
- }
- DragFinish(H_DropInfo);//libération de la mémoire
- }else
- MessageBox(0,"Erreur : répertoire de destination non valide !!!","Erreur",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
- free(tmp);
- break;
- }
- return 0;
- }
- //------------------------------------------------------------------------------
- //fonction principal (main)
- int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hinstancePRECEDENTE, LPSTR CmdLine, int CmdShow)
- {
- Hinst = hInst;
-
- //création de la fenêtre
- DialogBox(0,MAKEINTRESOURCE(SplitAll),GetDesktopWindow(),(DLGPROC)DlgProc);
-
- return 0;
- }
//------------------------------------------------------------------------------
// Projet SplitAll : découpage de fichier + recollage
// Auteur : Hanteville Nicolas
// Fichier : main.c
// Version : 0.1
// Date de modification : 07/06/2007
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// gestion des includes
//------------------------------------------------------------------------------
#include "ressources.h"
//------------------------------------------------------------------------------
// nous renvoie le nom du fichier pour un chemin
char *StripNomDest(char *dest)
{
//on se place a la fin de la chaine
while(*dest) dest++;
//on place le curseur au début du nom du fichier (situé aprèss le dernier / ou \)
while(*dest != '\\' && *dest != '/') dest--;
dest++;
return dest;
}
//------------------------------------------------------------------------------
//fonctions de threads
//------------------------------------------------------------------------------
//découpe
DWORD WINAPI Decoupee(LPVOID lParam)
{
//nb items a traiter
unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
if (!max) return 0;
unsigned int total = max;
unsigned int i;
DWORD copiee;
char tmp[TAILLE_REP_FIC];
GetWindowText(H_EDIT,tmp,TAILLE_REP_FIC);
__int64 taille_fichier_sortie = _atoi64(tmp)*1024; //talle en koctet maximum par fichier
__int64 taille_total;
char item[TAILLE_REP_FIC];
HWND Hsrc,Hdest;
char buffer[taille_fichier_sortie];
if (taille_fichier_sortie>0)
{
//on ouvre chacun des fichiers de la liste un par un
while(max--){
i=1;//numéro de nomage commence a 1
//récupération du texte du 1er item
SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
//on ouvre le fichier
Hsrc= CreateFile(item,FILE_SHARE_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
if (Hsrc != INVALID_HANDLE_VALUE)
{
taille_total = GetFileSize(Hsrc,NULL);
while (taille_total>0 && Hdest!=INVALID_HANDLE_VALUE)
{
ReadFile(Hsrc, buffer, taille_fichier_sortie,&copiee, 0);
snprintf(tmp,TAILLE_REP_FIC,"%s\\%s.%03d",DEstDEfaultTmp,StripNomDest(item),i++);
Hdest= CreateFile(tmp,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
if (Hdest==INVALID_HANDLE_VALUE)
MessageBox(0,tmp,"Erreur de copie!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
else
{
WriteFile(Hdest,buffer,copiee,&copiee,0);
}
CloseHandle(Hdest);
taille_total-=copiee;
}
}else
MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)(total-max)*100/total, 0);
CloseHandle(Hsrc);
//on supprime le 1er item
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
}
//progression
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
}else
MessageBox(0,"Il faut indiquer une taille minimum de fichier","Erreur!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
}
//------------------------------------------------------------------------------
//recoller
DWORD WINAPI Recollee(LPVOID lParam)
{
//nb items
unsigned int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
if (!max) return 0;
unsigned int total = max;
char tmp[TAILLE_REP_FIC];
char item[TAILLE_REP_FIC];
DWORD copiee;
//récupération du texte du 1er item
SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
snprintf(tmp,TAILLE_REP_FIC,"%s\\%s",DEstDEfaultTmp,StripNomDest(item));
tmp[strlen(tmp)-4]=0; //on enlève l'extension S01
//ouverture du fichier de destination
HWND Hdest= CreateFile(tmp,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,0);
if (Hdest != INVALID_HANDLE_VALUE)
{
HWND Hsrc;
__int64 taille_fic=0;
char *buffer;
//gestion automatique
//si un seul fichier a recoler on récupère les items automatiquement
if (max ==1)
{
int i=1;
//progression
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)50, 0);
do{
//génération du nom du fichier
sprintf(item,"%s.%03d",tmp,i);
//on ouvre le fichier
Hsrc= CreateFile(item,GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
//si ok on continue sinon méssage de choix
if (Hsrc != INVALID_HANDLE_VALUE)
{
//récupération de la taille du fichier
taille_fic = GetFileSize(Hsrc,NULL);
if (taille_fic>0)
{
buffer = malloc(taille_fic);
//on copie le comptenu du fichier dans le nouveau fichier / a la suite
ReadFile(Hsrc, buffer, taille_fic,&copiee,0);
WriteFile(Hdest,buffer,copiee,&copiee,0);
free(buffer);
}
}
CloseHandle(Hsrc);
i++;
}while (Hsrc != INVALID_HANDLE_VALUE);
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)100, 0);
//on supprime le 1er item
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
}else
{
while (max--)
{
//récupération du texte du 1er item
SendMessage(H_LST,LB_GETTEXT,(WPARAM)0,(LPARAM)item);
//on ouvre le fichier
Hsrc= CreateFile(item,GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
//si ok on continue sinon méssage de choix
if (Hsrc != INVALID_HANDLE_VALUE)
{
//récupération de la taille du fichier
taille_fic = GetFileSize(Hsrc,NULL);
if (taille_fic>0)
{
buffer = malloc(taille_fic);
//on copie le comptenu du fichier dans le nouveau fichier / a la suite
ReadFile(Hsrc, buffer, taille_fic,&copiee,0);
WriteFile(Hdest,buffer,copiee,&copiee,0);
free(buffer);
}else
MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
}else
MessageBox(0,item,"Erreur Fichier passé!!!",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
CloseHandle(Hsrc);
//on supprime le 1er item
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)0,(LPARAM)0);
//progression
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)(total-max)*100/total, 0);
};
}
}else
MessageBox(0,"Erreur : reconstitution de fichier impossible !!!","Erreur",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
//progression
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
CloseHandle(Hdest);
}
//------------------------------------------------------------------------------
//gestion des appels et msg sur le fenêtre principale
HRESULT DlgProc(HWND hwnd,UINT Msg,WPARAM Wparam,LPARAM lParam)
{
HDROP H_DropInfo;
int nb,i;
char *tmp;
switch(Msg)
{
case WM_INITDIALOG:
InitCommonControls();
//récupération des handl généraux
H_EDIT = GetDlgItem(hwnd,EDIT_TAILLE);
H_LST = GetDlgItem(hwnd,LST);
H_PROGRESS_BAR = GetDlgItem(hwnd,PROGRESS_BAR);
//application d'une icone
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(Hinst, MAKEINTRESOURCE(ID_ICON)));
//init barre de progression
SendMessage(H_PROGRESS_BAR, PBM_SETPOS, (WPARAM)0, 0);
break;
case WM_CLOSE:
EndDialog(hwnd,0);
//PostQuitMessage(0);
break;
case WM_COMMAND :
if ((LOWORD(Wparam) == BT_SUP) && (HIWORD(Wparam) == BN_CLICKED))
{
//suppression de la sélection
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0),(LPARAM)0);
}else if ((LOWORD(Wparam) == BT_PLUS) && (HIWORD(Wparam) == BN_CLICKED))
{
//emplacement du texte actuel
int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
if (nb>0)
{
tmp = malloc(TAILLE_REP_FIC);
//récupération du texte sélectionné
SendMessage(H_LST,LB_GETTEXT,(WPARAM)nb,(LPARAM)tmp);
//suppression
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
//insertion
SendMessage(H_LST,LB_INSERTSTRING,(WPARAM)--nb,(LPARAM)tmp);
//application de la sélection
SendMessage(H_LST,LB_SETCURSEL ,(WPARAM)nb,(LPARAM)0);
free(tmp);
}
}else if ((LOWORD(Wparam) == BT_MOINS) && (HIWORD(Wparam) == BN_CLICKED))
{
//emplacement du texte actuel
int nb = SendMessage(H_LST,LB_GETCURSEL,(WPARAM)0,(LPARAM)0);
int max = SendMessage(H_LST,LB_GETCOUNT,(WPARAM)0,(LPARAM)0);
if (nb>=0 && nb<(max-1))
{
tmp = malloc(TAILLE_REP_FIC);
//récupération du texte sélectionné
SendMessage(H_LST,LB_GETTEXT,(WPARAM)nb,(LPARAM)tmp);
//suppression
SendMessage(H_LST,LB_DELETESTRING,(WPARAM)nb,(LPARAM)0);
//insertion
SendMessage(H_LST,LB_INSERTSTRING,(WPARAM)++nb,(LPARAM)tmp);
//application de la sélection
SendMessage(H_LST,LB_SETCURSEL ,(WPARAM)nb,(LPARAM)0);
free(tmp);
}
}else if ((LOWORD(Wparam) == BT_RECOLLER) && (HIWORD(Wparam) == BN_CLICKED))
{
//recollage
CreateThread(NULL, 0,Recollee,0,0,0);
}else if ((LOWORD(Wparam) == BT_DECOUPE) && (HIWORD(Wparam) == BN_CLICKED))
{
//découpage
CreateThread(NULL, 0,Decoupee,0,0,0);
}
break;
case WM_DROPFILES:
tmp = malloc(TAILLE_REP_FIC);
//récupération de la liste des fichiers sélectionnés + traitemen
H_DropInfo=(HDROP)Wparam;//récupération de la liste
//traitement : nb de fichier en drag
nb=DragQueryFile(H_DropInfo, 0xFFFFFFFF, NULL, 0 );
//demander emplacement de copie
BROWSEINFO browser;
LPITEMIDLIST lip;
browser.hwndOwner = hwnd;
browser.pidlRoot = 0;
browser.lpfn = 0;
browser.ulFlags = BIF_NEWDIALOGSTYLE; //permet l'option de création d'un dossier
browser.lParam = 0;
browser.pszDisplayName = DEstDEfaultTmp; //résultat ici
browser.lpszTitle = "Dossier de destination";
lip = SHBrowseForFolder(&browser);
if (lip != NULL)
{
SHGetPathFromIDList(lip,DEstDEfaultTmp);
for (i=0;i<nb;i++)
{
DragQueryFile(H_DropInfo,i,tmp,DragQueryFile(H_DropInfo,i,0,0)+1 ); //récupération
SendMessage(H_LST,LB_ADDSTRING,(WPARAM)0,(LPARAM)tmp);
}
DragFinish(H_DropInfo);//libération de la mémoire
}else
MessageBox(0,"Erreur : répertoire de destination non valide !!!","Erreur",MB_OK|MB_TOPMOST|MB_ICONINFORMATION);
free(tmp);
break;
}
return 0;
}
//------------------------------------------------------------------------------
//fonction principal (main)
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hinstancePRECEDENTE, LPSTR CmdLine, int CmdShow)
{
Hinst = hInst;
//création de la fenêtre
DialogBox(0,MAKEINTRESOURCE(SplitAll),GetDesktopWindow(),(DLGPROC)DlgProc);
return 0;
}
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 10 juin 2007 19:20:07 :
- correction de fin de programme utilisation de : EndDialog()
- 10 juin 2007 19:22:12 :
- ...
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
drag&drop sur l'executable [ par crazyh0rse ]
je voudrais faire un drag&drop sur l'icone de l'executable et recuperé le nom des fichier dropé.j'arrive a géré le drag&dr
Drag Drop [ par said01 ]
Bonjour,Au momoent d'un drag&Drop depuis l'explorateur windows vers ma treeview, je souhaite détéctcter le présence de la sour
Drag and Drop [ par marc_pl ]
Bonjour, je suis en train d'écrire un programme qui recherche des fichiers sur un réseau. Il se compose d'une boite de dialogue contenant 2
Problème entre Tabctrl CListCtrl et le Drag and drop [MFC] [ par MasterShadows ]
Salut à tous et à toutes;voilà mon problème; je veux faire une clistctrl en drag and drop en utilisant les MFC (cadre d'un cours);
Nom de fichier dans un listbox [ par gaillus ]
Bonjour à tous,Je voudrais faire afficher dans une listebox des noms de fichier de type audio afin de pouvoir en selectionner un et de le lire.J'
Hook drag and drop [ par kakai ]
J’ai un grand besoin d’aide. <P class=MsoNormal style
problème d'agffichage [ par anubis52100 ]
je compren pas rein safiche dans ma listbox!!!j'ai créer une variable asocié a ma listbox et a une éditebox et rein ne safiche dedan j'
ListBox et fichier texte [ par lomat62 ]
voila je cherche une méthode qui permet d'afficher le contenu d'un fichier texte dans une listbox. cette liste doit s'afficher suite a un clik ef
Ourvri un fichier sous C via un "drag&drop" de l utilisateur [ par pif56 ]
Bonjour tout le monde,Je suis nouveau sur le forum, mais pas sur le site. Alors aujourd'hui est venu le jour de ma premiere question!Voila, j ecris un
Drag & drop sur exe [ par Galmiza ]
Salut tout le monde !J'ai un problème avec les arguments passé à un exe suite à un drag and drop.Lorsque le nombre de fichiers glissés vers l'exe est
|
Téléchargements
Logiciels à télécharger sur le même thème :
|