Divers outils windows : enregistrer-sous...

0/5 (5 avis)

Vue 5 649 fois - Téléchargée 207 fois

Description

Ce source montre l'utilisation de :
- Gestion de la fenêtre enregistrer sous
- Gestion de la fenêtre Sélectionner un répertoire
- Donner l'heure et la date courante
- Enlever les "/" d'une chaine de caractere date (peut servir pour d'autre séparateur)

Trinita,

Source / Exemple :


/*******************************************************/
/*						*/
/* Plusieurs Méthode Outils 				*/
/*						*/
/* LoadDirectory : 					*/
/* Fenetre de type Enregistrer Sous			*/
/*						*/
/* SelectDir     :					*/
/* Fenetre du type Sélectionner un dir 			*/
/*						*/
/* DateJour	  : 				*/
/* Retourne la date courante 01/01/2003			*/
/*						*/
/* ConvertDate	  :				*/
/* Converti la chaine date sans les caracteres '/'	                */
/*						*/
/* Créé le 01/12/2002	Par Trinita			                */
/* Modifié le 24/01/2003				*/
/* Version 1.0.4					*/
/*******************************************************/

#include <windows.h>
#include <shlobj.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "tools.h"

#define	MAIN_LEN		80
#define IDC_MAIN_TEXT	100

/* Fenêtre ENREGISTRER SOUS */
void LoadDirectory(HWND hDlgTools, char szFileName[MAIN_LEN+1])
{
                /* Déclaration des variables */
	OPENFILENAME ofn;
	
	/* Init des variables */				
	ZeroMemory(&ofn, sizeof(ofn));
	szFileName[0]=0;
					
	/* Déclaration de la structure de OPENFILENAME */
	ofn.lStructSize = sizeof(ofn); 
	ofn.hwndOwner = hDlgTools; 
	// ofn.hInstance =; 
	ofn.lpstrFilter = "Fichiers xls (*.xls)\0Tous (*.*)\0*.*"; 
	// ofn.lpstrCustomFilter; 
	// ofn.nMaxCustFilter; 
	// ofn.nFilterIndex; 
	ofn.lpstrFile = szFileName; 
	ofn.nMaxFile = MAIN_LEN+1; 
	// ofn.lpstrFileTitle = "Exportation"; 
	// ofn.nMaxFileTitle; 
	ofn.lpstrInitialDir = "c:\\"; 
	// ofn.lpstrTitle; 
	ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | 
                OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |   
                OFN_NOCHANGEDIR; 
	// ofn.nFileOffset; 
	// ofn.nFileExtension =; 
	ofn.lpstrDefExt = "xls"; 
	// ofn.lCustData; 
	// ofn.lpfnHook; 
	ofn.lpTemplateName ="Exportation"; 

	/* Ouverture de la fenetre de selection */
	if ( GetSaveFileName ( &ofn ) )
	{
		/* Récupération du nom de fichier */
   		SendMessage(GetDlgItem
                                (hDlgTools,IDC_MAIN_TEXT),WM_GETTEXT,sizeof
                                (szFileName),(LPARAM)
                                szFileName);
	}
}

/* Sélection d'un répertoire */
HWND hDlgTool;

int SelectDir( char szPath[MAX_PATH] )
{
	
	BROWSEINFO bi;
	ITEMIDLIST *il;
	char Buffer[MAX_PATH];

	bi.hwndOwner=hDlgTool;
	bi.pidlRoot=NULL;
	bi.pszDisplayName=&Buffer[0];
	bi.lpszTitle="Choisissez un répertoire :";
	bi.ulFlags=0;
	bi.lpfn=NULL;
	if( (il=SHBrowseForFolder(&bi)) ==NULL ) return 0;
	return SHGetPathFromIDList(il, &szPath[0]);
}

/* Donne la date du jour du PC */
/* Format CHAR 11 */
void DateJour (char DateCourante[11])
{
    
	SYSTEMTIME SystemTime;
	GetSystemTime(&SystemTime);  //Initialisation
	
	/* La structure
	SystemTime.wDay        		=> le jour
	SystemTime.wMonth     		=> le mois
	SystemTime.wYear      		=> l'année
	SystemTime.wHour       		=> l'heure
	SystemTime.wMinute    		=> les minutes
	SystemTime.wSecond  		=> les secondes
	SystemTime.wMilliseconds  	=> les milli-secondes

  • /
// Construction de la chaine de retour // %02d pour avoir le mois ou le jour sur deux caracteres char*JourCourant=new char; wsprintf(JourCourant,"%02d",SystemTime.wDay); strcpy ( DateCourante, JourCourant ); strcat ( DateCourante, "/" ); char*MoisCourant=new char; wsprintf(MoisCourant,"%02d",SystemTime.wMonth); strcat ( DateCourante, MoisCourant ); strcat ( DateCourante, "/" ); char*AnneeCourante=new char; wsprintf(AnneeCourante,"%d",SystemTime.wYear); strcat ( DateCourante, AnneeCourante ); return; } /* Converti une chaine char de type date <01/01/2002> au format <01012002> */ void ConvertDate ( char ChaineDate[11], char NewChaineDate[9]) { char *pointeur; char *separateur = { "/" }; char *buffer; buffer = strdup ( ChaineDate ); // premier appel, le jour pointeur = strtok( buffer, separateur ); strcpy ( NewChaineDate, pointeur ); // pour le mois et l'année while( pointeur != NULL ) { // Cherche les autres separateur pointeur = strtok( NULL, separateur ); if ( pointeur != NULL ) { strcat ( NewChaineDate, pointeur ); } } return ; } /********************************************************/ /* */ /* tools.h */ /* */ /********************************************************/ /* prototypage des fonctions tools */ void LoadDirectory ( HWND, char [] ); int SelectDir( char []); void DateJour (char []); void ConvertDate ( char [], char []);

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

je veux pas dire mais t'as pas bien regardé la. Le tools.h est en bas du code :

# /********************************************************/
# /* */
# /* tools.h */
# /* */
# /********************************************************/
# /* prototypage des fonctions tools */
# void LoadDirectory ( HWND, char [] );
# int SelectDir( char []);
# void DateJour (char []);
# void ConvertDate ( char [], char []);
Messages postés
15
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
3 décembre 2005

c'est "tools.h" qu'il manque !
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

il te faut mettre les librairies win32sdk :
Comdlg32.lib, Gdi32.lib, Kernel32.lib, User32.lib, shell32.lib, comctl32.lib.

Avec mon compilateur ça fonctionne tres bien... mais si j 'ai un peu de temps j'essai avec dev-c++

@+ Trinita,

PS : Merci pour l'optimisation de mon code..... :)
Messages postés
104
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
17 août 2009

Bonjour,

Joli code mais je n'arrive pas à le compiler avec Dev-C++ (GCC) y a t'il une librairie à mettre ou quelque chose du genre.

A bientôt
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Salut,
je reprends ta func void DateJour(char DateCourante[11])
On va l'optimiser. EN 1er virer les "new" qui font allouer et d&sallouer de la mémoire alors que le buffer est déjà fourni en param. Ensuite en C on se sert de pointeur pour se rapprocher le + possible de l'asm.
void DateJour (char *DateCourante)
{
SYSTEMTIME st;
char *c = DateCourante;
// ptr 4 octets en plac des new
GetSystemTime(&st);
if(st.wDay < 10) {
*c '0'; *(c+1) (char) (st.wDay + 48);
}
else ultoa(st.wDay, c, 10); // optimisable aussi
*(c+2) = '/'; c += 3;
if(st.wMonth < 10) {
*c '0'; *(c+1) (char) (st.wMonth + 48);
}
else ultoa(st.wMonth, c, 10);
*(c+2) = '/';
ultoa(st.wYear, c+3, 10);
}
On va faire idem pour ta ConvertDate()
void ConvertDate (char *psrc, char *pdst)
{
char *c psrc, *d pdst;
while(1) { // sans fin, controler sortie
if(*c !'/') *d++ *c;
if(*c++ == 0) return
}
}
ciao...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.