Accueil > > > [WIN32][C][DEV-C++] SPLITALL GESTIONNAIRE DE DÉCOUPAGE / RECOLLAGE DE FICHIERS SIMPLE
[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;
}
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
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
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|