IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Création IHM en C


Sujet :

C

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Je sais qu'il n'est pas possible pour toi de voir l'erreur, je voulais juste être sûr de ma méthode.

    A présent, j'ai bien mon texte qui s'affiche lors de l'appuie des boutons.

    Le problème est que si j'appuie sur le bouton "BASE" puis sur celui "RESSOURCE", le texte de l'autre ne s'enlève pas.

    Je ne sais pas s'il y a une possibilité, je vais essayer de faire jouer les "if" ...

    Merci encore.

    EDIT : j'ai réussi en ajoutant dans les "if" la mise à zéro des "Edit". Je me lance maintenant dans le parsing du fichier

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai bien avancé dans mon projet mais j'arrive au plus dur ...

    Tout d'abord, je voudrais que lorsque l'on clique sur un bouton "VALIDER", cela recherche dans le dossier sélectionné précédemment les sous dossiers contenant soit la lettre A, soit la lettre B (selon le bouton sélectionné, A ou B).

    J'ai donc essayé de faire des "if", mais je n'ai pas trouvé de méthodes exploitables pour la recherche par mot ou lettre ... Si vous connaissez quelque chose, je suis preneur.

  3. #23
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Regarde ce lien : https://docs.microsoft.com/en-us/win...in-a-directory

    dans ton cas, c'est cette partie qui t'intéressera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
    pour ton "pb", avant de rechercher les dossiers :
    si bouton_A_selectionne alors valeur_cherchee = 'A'
    sinon valeur_cherchee = 'B'

    et dans ta boucle de recherche tu regardes si cFileName contient valeur_cherchee

    sans doute du récursif à prévoir pour les sous-sous-dossiers



    par contre, pas trop compris ton truc des boutons A et B : pourquoi ne pas utiliser une radiobox ou des checkbox ?

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Voici un bout de mon code pour essayer de vous montrer rapidement ce que j'ai fais lors de l'activation des boutons :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    // Message envoyé par Windows quand une commande utilisateur a été actionnée
     
    case WM_COMMAND:
     
     
    // Si le bouton BASE est actionné, on veut afficher "Base choisie !"
     
    		if(LOWORD(wParam) == ID_BASE) { 
     
    //Permet d'afficher le message dans la barre d'édit de Base
     
    			SendMessage(hEditD, WM_SETTEXT, 0, (long)"Base choisie !");
     
    //On mets l'édit de "RESSOURCE" à 0
     
    			hEditE = 0;
     
    //Variable qui contient le nom de dossier à chercher
     
    			support ="BASE";
     
     
     
    		}
     
    // Si le bouton RESSOURCE est actionné, on veut afficher "Ressources choisies !"
     
    		if(LOWORD(wParam) == ID_RESSOURCE){
     
    //Permet d'afficher le message dans la barre d'édit de Ressource
     
    		SendMessage(hEditE, WM_SETTEXT, 0, (long)"Ressources choisies !");
     
     
     
    //On mets l'édit de "BASE" à 0
     
    		hEditD = 0;
     
     
    		support ="RES";
     
    }
     
     
    //même chose ensuite
     
     
    		if(LOWORD(wParam) == ID_VL) { 
     
    			SendMessage(hEditJ, WM_SETTEXT, 0, (long)"Type VL choisi !");
    			hEditT=0;
    		}
     
    		if(LOWORD(wParam) == ID_Air_Air) { 
     
    			SendMessage(hEditT, WM_SETTEXT, 0, (long)"Type Air-Air choisi !");
    			hEditJ=0;
    		}
     
     
     
    //IDM_QUIT : permet de demander à la fenêtre de se fermer en lui envoyant un message WM_CLOSE avec la fonction PostMessage
     
     
    		if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
     
     
     
    // Sélection du dossier que l'on veut analyser :
     
     
    		if(LOWORD(wParam) == SELECTDOSSIER){
     
    			TCHAR rep[MAX_PATH+1];
     
    			if(rechercheRepertoire(NULL,rep,_T("Choix du répertoire")))
     
    	//On enregistre le chemin du répertoire dans la variable rep et on l'affiche dans hEdit
     
    				SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)rep);
    				strncpy(params.cheminDossier, (char *) rep, strlen(((char *)rep)));
    		}
     
    		if(LOWORD(wParam) == VALIDER)
     
    		{
     
    			sprintf(bufferCheminDossier, params.cheminDossier);
    			strcat(bufferCheminDossier, "\\*");
     
     
    // On vérifie qu'après validation, le chemin n'est pas vide
     
     
    			if(strlen(params.cheminDossier)==0){
     
    				 if(strlen(params.cheminDossier)==0){
    					msgboxID = MessageBox(NULL, "Erreur lors de la génération du code : Le champ contenant le chemin absolu de la bassine est vide", "Erreur", MB_ICONWARNING | MB_OK);
    				 }
     
    			}
     
    			else {
     
     
    					if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     
    					{
     
    					_tprintf(TEXT("RES<DIR>\n"), ffd.cFileName);
     
     
    					}
    				}
     
    				PostQuitMessage(0);
     
    }
                return 0;


    Puis le bout correspondant à la création de la rechercheRepertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    int CALLBACK rechercheRepertoireCallback(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData){
    	TCHAR szPath[MAX_PATH+1];
     
     
    		switch(uMsg){
     
    			case BFFM_INITIALIZED:
     
    		SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData);
    		break;
     
    			case BFFM_SELCHANGED:
     
    		if(SHGetPathFromIDList((LPITEMIDLIST) lp, szPath)){
    			SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szPath);
    		}
    		break;
    	}
    	return 0;
    }
     
    BOOL rechercheRepertoire(HWND hwnd, LPTSTR lpszFolder, LPTSTR lpszTitle){
    	BROWSEINFO bi;
    	LPITEMIDLIST pidl;
    	bi.hwndOwner = hwnd;
    	bi.pidlRoot = NULL;
    	bi.pszDisplayName = NULL;
    	bi.lpszTitle = lpszTitle;
    	bi.ulFlags = BIF_STATUSTEXT;
    	bi.lpfn = rechercheRepertoireCallback;
    	bi.lParam = (LPARAM)lpszFolder;
    	pidl = SHBrowseForFolder(&bi);
    	if( pidl){
    		if (SHGetPathFromIDList(pidl, lpszFolder)){
    			return TRUE;
    		}
    	}
    	return FALSE;
    }

    Pour les boutons, à vrai dire j'ai fais ce qui marchait le mieux, j'avais eu quelques problèmes avec les CHECKBOX, j'ignore pourquoi ...

    D'après ce que vous m'avez donné, ainsi que les liens que j'ai pu trouvé, j'ai du mal à comprendre comment l'adapter à mon code.

    Je rappel mon idée : lorsque le bouton VALIDER est activé, cela doit rechercher dans le dossier sélectionné, les sous dossiers dont la variable support est comprises dans le nom de ces sous dossiers.

  5. #25
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Citation Envoyé par Perot Voir le message
    D'après ce que vous m'avez donné, ainsi que les liens que j'ai pu trouvé, j'ai du mal à comprendre comment l'adapter à mon code.
    1. il te faut faire une méthode qui te récupère la liste des dossiers
    2. dans ton code quand tu cliques sur le bouton, tu appelles cette méthode et tu fais ensuite ton traitement sur cette liste


    Pour le point 1, il te faut utiliser cette partie (je te laisse regarder le reste du code dans la doc pour le type et l'alimentation des diverses variables) :
    Comme tu vois, le code boucle sur les dossiers et fichiers d'un dossier donné et affiche chaque ligne
    tu dois remplacer les _tprintf par "alimentation de ta liste"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
       // Find the first file in the directory.
     
       hFind = FindFirstFile(szDir, &ffd);
     
       if (INVALID_HANDLE_VALUE == hFind) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
          return dwError;
       } 
     
       // List all the files in the directory with some info about them.
     
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
          else
          {
             filesize.LowPart = ffd.nFileSizeLow;
             filesize.HighPart = ffd.nFileSizeHigh;
             _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
          }
       }
       while (FindNextFile(hFind, &ffd) != 0);
     
       dwError = GetLastError();
       if (dwError != ERROR_NO_MORE_FILES) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
       }
     
       FindClose(hFind);

    Comme tu as dit que tu ne voulais que les dossiers, dans le code ci-dessus, tu peux enlever/commenter le else :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             // On est sur un dossier
             // Si tu as besoin des sous-dossiers à ce dossier, alors appeler FindFirstFile sur ce dossier  (d'où l'appel récursif que je parlais avant)
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
          // pas de gestion du else car on ne s'intéresse pas à ce qui n'est pas un dossier
          //else
          //{
          //   filesize.LowPart = ffd.nFileSizeLow;
          //   filesize.HighPart = ffd.nFileSizeHigh;
          //   _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
          //}
       }
       while (FindNextFile(hFind, &ffd) != 0);

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Voici ce que j'ai fais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    // Message envoyé par Windows quand une commande utilisateur a été actionnée
     
    case WM_COMMAND:
     
     
    // Si le bouton BASE est actionné, on veut afficher "Base choisie !"
     
    		if(LOWORD(wParam) == ID_BASE) { 
     
    //Permet d'afficher le message dans la barre d'édit de Base
     
    			SendMessage(hEditD, WM_SETTEXT, 0, (long)"Base choisie !");
     
    //On mets l'édit de "RESSOURCE" à 0
     
    			hEditE = 0;
     
    //Variable qui contient le nom de dossier à chercher
     
    			support ="BASE";
     
     
     
    		}
     
    // Si le bouton RESSOURCE est actionné, on veut afficher "Ressources choisies !"
     
    		if(LOWORD(wParam) == ID_RESSOURCE){
     
    //Permet d'afficher le message dans la barre d'édit de Ressource
     
    		SendMessage(hEditE, WM_SETTEXT, 0, (long)"Ressources choisies !");
     
     
     
    //On mets l'édit de "BASE" à 0
     
    		hEditD = 0;
     
     
    		support ="RES";
     
    }
     
     
     
    //IDM_QUIT : permet de demander à la fenêtre de se fermer en lui envoyant un message WM_CLOSE avec la fonction PostMessage
     
     
    		if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
     
     
     
    // Sélection du dossier que l'on veut analyser :
     
     
    		if(LOWORD(wParam) == SELECTDOSSIER){
     
     
     
    			if(rechercheRepertoire(NULL,rep,_T("Choix du répertoire")))
     
    	//On enregistre le chemin du répertoire dans la variable rep et on l'affiche dans hEdit
     
    				SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)rep);
    				strncpy(params.cheminDossier, (char *) rep, strlen(((char *)rep)));
    		}
     
    		if(LOWORD(wParam) == VALIDER)
     
    		{
     
    			sprintf(bufferCheminDossier, params.cheminDossier);
    			strcat(bufferCheminDossier, "\\*");
     
     
    // On vérifie qu'après validation, le chemin n'est pas vide
     
     
    					if(strlen(params.cheminDossier)==0)
     
    					{
     
     
    								 if(strlen(params.cheminDossier)==0)
     
    								 {
     
    								msgboxID = MessageBox(NULL, "Erreur lors de la génération du code : Le champ contenant le chemin absolu de la bassine est vide", "Erreur", MB_ICONWARNING | MB_OK);
     
    								 }
     
    					}
     
    		        else {
     
    					hFind = FindFirstFile(rep, &ffd);
     
     
    							if (INVALID_HANDLE_VALUE == hFind) 
     
    							{
     
    								DisplayErrorBox(TEXT("FindFirstFile"));
     
    								return dwError;
     
    							}
     
     
    							do {
     
    									if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     
    									{
     
    										_tprintf(TEXT("support =  %s  <DIR>\n"), ffd.cFileName);
     
     
    									}
     
    								}
     
    							while (FindNextFile(hFind, &ffd) !=0);
     
    							dwError = GetLastError();
     
    							if (dwError != ERROR_NO_MORE_FILES)
     
    							{
    								DisplayErrorBox(TEXT("FindFirstFile"));
     
    							}
     
    							FindClose(hFind);
    							return dwError;
    							}
     
     
    							PostQuitMessage(0);
     
    }
     
                return 0;
    Avec les variables :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    // Titre et sous titre de l'interface : 
     
    char titre[] = "Génération Applicatifs";
    char selectDossier[] = "Choissisez la bassine : ";
    char selectSupport[] = "Choisissez le type de support :";
    char selectApplicatif[] = "Choisissez le type d'applicatif :";
    char cheminDossier[] = "Chemin absolu du fichier : ";
    char choixBase[] = "Vous avez choisis d'analyser la base";
    char choixRessource[] = "Vous avez choisis d'analyser les ressources";
     
    // déclaration du buffer pour le chemin du dossier cherché
     
    char bufferCheminDossier[TAILLE_CHEMIN];
    CHAR szFile[TAILLE_CHEMIN]={0};
     
    //variable pour la recherche des sous-dossiers :
     
    WIN32_FIND_DATA ffd;
    LARGE_INTEGER filesize;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    size_t length_of_arg;
    void DisplayErrorBox(LPTSTR lpszFunction);
    DWORD dwError=0;
    TCHAR rep[MAX_PATH+1];
    Malheureusement je n'ai pas pu essayer car j'ai l'erreur suivante : LNK2019 : unresolved external symbol _DisplayErrorBox referenced in function _MainWndProc

    MainWndProc étant la procédure de ma fenêtre principale.

    J'ai essayé de définir dans une de mes bibliothèques _UNICODE, mais aucun changement.

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    regarde cette page en anglais Microsoft, Listing the Files in a Directory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    void DisplayErrorBox(LPTSTR lpszFunction) 
    { 
        // Retrieve the system error message for the last-error code
     
        LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
        DWORD dw = GetLastError(); 
     
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
     
        // Display the error message and clean up
     
        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
            (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR)); 
        StringCchPrintf((LPTSTR)lpDisplayBuf, 
            LocalSize(lpDisplayBuf) / sizeof(TCHAR),
            TEXT("%s failed with error %d: %s"), 
            lpszFunction, dw, lpMsgBuf); 
        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 
     
        LocalFree(lpMsgBuf);
        LocalFree(lpDisplayBuf);
    }

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Je l'avais mise, mais pas au bon endroit ...

    J'ai donc pu compiler, lorsque j'appuie sur "VALIDER", rien ne s'affiche.


    Je pense qu'au niveau de mon _tprintf, ce n'est pas bon, je vais essayer d'autres syntaxes.

    EDIT : Pour la variable support, je l'ai définie en tant que pointeur plus haut.

  9. #29
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Citation Envoyé par Perot Voir le message
    J'ai donc pu compiler, lorsque j'appuie sur "VALIDER", rien ne s'affiche.


    Je pense qu'au niveau de mon _tprintf, ce n'est pas bon, je vais essayer d'autres syntaxes.
    les _tprintf , printf, ... affichent le texte dans la console

    or ici, tu es en graphique, donc pas de console (sauf si tu la gères aussi), ici il faut que tu dises où afficher le résultat (listbox, grid, messagebox, static, fichier, ...)


    fais une méthode qui en entrée a le dossier de ton choix et en sortie ta liste
    car ton WM_COMMAND commence à être gros et tu risques d'avoir du mal à lire le code

    ça doit ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case WM_COMMAND :
       switch (LOWORD(wParam))
       {
          case action_01 : traitement_action_01 ( liste parametres ); break;
          case action_02 : traitement_action_02 ( liste parametres ); break;
          ...
       }

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    D'accord, je vais essayer.

    Par contre, j'ai du mal à voir, dans le code du lien, à quel moment je dois utiliser ma variable "support" pour rechercher les sous dossier contenant cette variable.

    EDIT : j'ai adapté mon code comme expliqué précédemment, switch ...

  11. #31
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    ton code doit ressembler à quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
       switch (uMsg)
      {
      case WM_COMMAND:
        {
           OnCommand(hwnd,LOWORD(wParam),HIWORD(wParam), lParam);
           return 0;
        }
     
      case WM_CREATE:
        {
           // tout dépend de si la fenêtre est issue d'une ressource ou non
           // afin de savoir s'il faut créer ici ou non les widgets
           return 0;
        }
     
      case WM_DESTROY:
        PostQuitMessage(0);    // pour fermer
        return 0;
     
      case WM_SIZE:
        ...
      break;
     
      default:
        return DefDlgProc(hwnd,uMsg,wParam,lParam);  
      }
    }
     
    //=============================================================================
    void OnCommand(const HWND hwnd, int id, int notifycode, const HWND hCntrl)
    {
       switch (id)
       {
          case action_01:        Traitement_action_01 (  parametres_action_01); break;
          case action_02:        Traitement_action_02 (  parametres_action_02); break;
          ....
        }
    }
    Si "action_01" est le bouton "valider", alors dans Traitement_action_01 tu cherches si bouton A ou bouton B est sélectionné
    puis tu appelles ta fonction de recherche de sous dossiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void Traitement_action_01 (....)
    {
       // récupération bouton A ou bouton B sélectionné
       ...
     
       // récupération du dossier de base
       ...
     
       // construction de la liste des sous-dossiers
       Recherche_sous_dossiers (szDossier_de_base, ...);
     
       // Traitement de ta liste
       // affichage, écriture dans un fichier, ...
     
    }
    Le code ne compile pas, mais c'est pour que tu aies une idée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    void Recherche_sous_dossiers ( TCHAR szDossier_in[MAX_PATH], ...)  // je te laisse définir le format de sortie (ne sachant pas quel format tu souhaites)
    {
       hFind = FindFirstFile(szDir, &ffd);
     
       if (INVALID_HANDLE_VALUE == hFind) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
          return dwError;
       } 
     
       // List all the files in the directory with some info about them.
     
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             // on est sur un dossier => on traite
             // il faut que tu remplaces la ligne ci-dessous par l'alimentation de ta "liste"
             // tu peux même ajouter ici ton filtre sur la valeur du bouton sélectionné
             // si tu veux tester, tu peux mettre   MessageBox (NULL, ffd.cFileName, "Information", MB_OK);
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
          //else
          //{
          //   filesize.LowPart = ffd.nFileSizeLow;
          //   filesize.HighPart = ffd.nFileSizeHigh;
          //   _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
          //}
       }
       while (FindNextFile(hFind, &ffd) != 0);
     
       dwError = GetLastError();
       if (dwError != ERROR_NO_MORE_FILES) 
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
       }
     
       FindClose(hFind);
    }

  12. #32
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aide.

    Je n'ai pas pu faire totalement comme tu l'a montré car j'ai eu une erreur pour lParam dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OnCommand(hwnd,LOWORD(wParam),HIWORD(wParam), lParam);

    Ensuite, que veux tu dire par "alimentation de ta liste" ? C'est vraiment cette ligne avec le _tprintf que j'ai du mal à exploiter. Notamment le "ffd" dont j'ignore l'utilité.

    Enfin, d'après ce que j'ai compris, le _tprintf ne m'est pas vraiment utile.

    Quoi qu'il en soit, je vais essayer de faire quelque chose avec toutes ces explications.


    EDIT :


    J'ai essayé d'utiliser "strstr", trouvé sur internet, pour rechercher une chaîne de caractère dans le nom du dossier.

    J'ai donc écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     
    {
     
                          printf ("%s\n", strstr(ffd.cFileName, support));
                          SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM).....);
     
    }

    Le problème est que le ffd.cFileName contient le nom du dossier de "base", le premier sélectionné (donc égal à la variable que j'ai noté rep) ... Je n'ai rien changé du code posté précédemment, hormis les lignes ci-dessus.

  13. #33
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Citation Envoyé par Perot Voir le message
    Ensuite, que veux tu dire par "alimentation de ta liste" ?
    dans tes messages précédents, tu disais :
    Citation Envoyé par Perot Voir le message
    Tout d'abord, je voudrais que lorsque l'on clique sur un bouton "VALIDER", cela recherche dans le dossier sélectionné précédemment les sous dossiers contenant soit la lettre A, soit la lettre B (selon le bouton sélectionné, A ou B).
    donc je comprends que tu souhaites trouver tous les sous dossiers d'un dossier donné (en ajoutant un filtre sur A ou B)
    => comment comptes tu stocker ces sous dossiers ?
    pour ma part, tu dois utiliser une liste ou un tableau
    ou tu souhaites seulement le 1er dossier trouvé ?


    Citation Envoyé par Perot Voir le message
    C'est vraiment cette ligne avec le _tprintf que j'ai du mal à exploiter. Notamment le "ffd" dont j'ignore l'utilité.

    Enfin, d'après ce que j'ai compris, le _tprintf ne m'est pas vraiment utile.
    le _tprintf est donné dans les doc à titre d'exemple afin tu vois le résultat affiché dans la console
    c'est assez rare d'avoir un exemple 100% graphique

    le ffd sert seulement à récupérer une structure de données sur l'élément en cours (voir doc : https://docs.microsoft.com/en-us/win...n32_find_dataa )

  14. #34
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    D'accord je vois.

    En fait, dans le dossier sélectionné, il n'y aura qu'un seul sous-dossier trouvé.

    L'idée est donc de trouvé ce sous-dossier, avec soit le filtre de A, soit le filtre provenant de B (via la variable que j'ai appelé support).

    C'est ce que j'ai essayé de faire avec strstr, mais je suis bloqué avec le cFileName qui ne renvoit pas le nom d'un sous-dossier.

    Et le mieux serait d'avoir également le chemin de ce sous-dossier... pour la suite du projet.

  15. #35
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    J'ai créé un dossier TEST sous C:\
    et 2 sous dossiers AA et BB sous TEST

    pour l'exemple, je laisse les _tprintf, mais libre à toi de mettre autre chose
    je pars avec ton principe qu'il n'y a qu'un seul dossier qui répond au critère de recherche (si tu as plusieurs dossiers répondant au critère de recherche, alors le code ci-dessous va tous les retourner)


    avec ce code ( szDir valant : "C:\\TEST\\*", dans ton cas, szDir = params.cheminDossier\\*) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
       WIN32_FIND_DATA ffd;
       hFind = FindFirstFile(szDir, &ffd);
     
       if (INVALID_HANDLE_VALUE == hFind)
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
          return dwError;
       }
     
       // List all the files in the directory with some info about them.
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
       }
       while (FindNextFile(hFind, &ffd) != 0);
     
       dwError = GetLastError();
       if (dwError != ERROR_NO_MORE_FILES)
       {
          DisplayErrorBox(TEXT("FindFirstFile"));
       }
     
       FindClose(hFind);
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .  <DIR>
    .. <DIR>
    AA  <DIR>
    BB  <DIR>
    tu dois modifier cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
    tu remplaces par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          	 if (strstr (ffd.cFileName, "A"))    // on cherche les sous-dossiers contenant la lettre "A"  
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
    si tu veux le chemin complet : tu concatènes szDir (sans le \\*, donc tu stockes le szDir dans une autre variable avant de concaténer avec \\*) avec ffd.cFileName


    dans ton code, j'ai vu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    support ="BASE";
    support ="RES";
    ça compile ?

  16. #36
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    J'ai mieux à quoi correspondait les choses ...

    Voici mon code : (une partie)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    					case VALIDER : 
     
     
     
    							sprintf(bufferCheminDossier, params.cheminDossier);
    							strcat(bufferCheminDossier, "\\*");
     
    							// On vérifie qu'après validation, le chemin n'est pas vide
     
     
    								if(strlen(params.cheminDossier)==0)
     
    								{
     
     
    											 if(strlen(params.cheminDossier)==0)
     
    											 {
     
    													msgboxID = MessageBox(NULL, "Erreur lors de la génération du code : Le champ contenant le chemin absolu de la bassine est vide", "Erreur", MB_ICONWARNING | MB_OK);
     
    											}
     
    								}else { 
     
     
    			                           sprintf(bufferCheminSousDossier, params.cheminDossier);
    									   hFind = FindFirstFile(bufferCheminDossier, &ffd);
     
     
    										if (INVALID_HANDLE_VALUE == hFind) 
     
    										{
     
    											DisplayErrorBox(TEXT("FindFirstFile"));
    											return dwError;
     
    										}
     
     
    										do {
     
    												if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     
    												{
     
    													if (strstr(ffd.cFileName, support)) 
     
    													{
     
    														strcat(bufferCheminSousDossier, "\\");
    														strcat(bufferCheminSousDossier, ffd.cFileName);
    														MessageBox(NULL, bufferCheminSousDossier, "Chemin absolu du dossier sélectionné", MB_OK);
     
     
     
     
    													}else {
     
    														MessageBox(NULL, "Il n'existe aucun dossier qui correspond à la demande", "Erreur", MB_ICONWARNING | MB_OK);
     
    													}
     
     
    												}
     
    											}
     
    										while (FindNextFile(hFind, &ffd) !=0);
     
     
    											dwError = GetLastError();
     
    												if (dwError != ERROR_NO_MORE_FILES)
     
    												{
    													DisplayErrorBox(TEXT("FindFirstFile"));
    													msgboxID = MessageBox(NULL, "Erreur", "Erreur", MB_ICONWARNING | MB_OK);
     
    												}
     
     
    							FindClose(hFind);
    							return dwError;
     
     
    								}
    Cela fonctionne bien, avec la variable support initialisée lors de l'appuie des boutons.

    j'ai juste un petit problème, lorsque j'appuie sur "VALIDER", j'ai d'abord le message "Il n'existe aucun dossier qui correspond à la demande", j'appuie sur OK, il s'affiche encore trois fois, puis à la 4 ème fois, j'ai bien mon chemin de sous-dossier qui s'affiche.

  17. #37
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Tu peux déjà améliorer cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		if(strlen(params.cheminDossier)==0)
    		{
    			if(strlen(params.cheminDossier)==0)
    			{
    				msgboxID = MessageBox(NULL, "Erreur lors de la génération du code : Le champ contenant le chemin absolu de la bassine est vide", "Erreur", MB_ICONWARNING | MB_OK);
    			}
     		}else {

    Citation Envoyé par Perot Voir le message
    j'ai juste un petit problème, lorsque j'appuie sur "VALIDER", j'ai d'abord le message "Il n'existe aucun dossier qui correspond à la demande", j'appuie sur OK, il s'affiche encore trois fois, puis à la 4 ème fois, j'ai bien mon chemin de sous-dossier qui s'affiche.
    c'est la boucle do while qui te fait ça : tu auras X fois le message tant qu'il ne trouve pas ton dossier

    solution :
    mettre un flag "Trouve = 0" avant la boucle

    dans ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (strstr(ffd.cFileName, support)) 
    {
    	Trouve = 1;
    	strcat(bufferCheminSousDossier, "\\");
    	strcat(bufferCheminSousDossier, ffd.cFileName);
    	MessageBox(NULL, bufferCheminSousDossier, "Chemin absolu du dossier sélectionné", MB_OK);
    }
    et après le while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Trouve == 0)
    {
    	MessageBox(NULL, "Il n'existe aucun dossier qui correspond à la demande", "Erreur", MB_ICONWARNING | MB_OK);
    }
    et faire attention avec le NULL dans le 1er paramètre de MessageBox : si tu laisses NULL, alors tu as encore accès à la fenêtre derrière, même sans cliquer sur OK de la MessageBox
    il faut mettre le hWnd de la fenêtre parent pour empêcher cela

  18. #38
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Très bien, cela fonctionne parfaitement. Je tiens à te remercier fortement, n'ayant aucune connaissance dans le langage C (au départ), tu m'aide énormément.

    A présent, je me lance vers le gros objectif de l'IHM. Je vais essayer de faire un switch pour les 4 derniers boutons ...

    Après avoir récupérer le chemin du dossier dans bufferCheminDossier, il faut que je puisse filtrer dans dans ce dossier, les fichiers qui contiennent à l'intérieur un code compris entre des balises <A> et </A>.

    Après avoir filtrer cela, il faut que ce code soit inscrit dans un nouveau fichier qui sera créé.

    Je commence par faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (strstr(ffd.cFileName, support)) 
     
    			{
     
    			strcat(bufferCheminSousDossier, "\\");
    		        strcat(bufferCheminSousDossier, ffd.cFileName);
    			MessageBox(NULL, bufferCheminSousDossier, "Chemin absolu du dossier sélectionné", MB_OK);
     
    //Si les boutons "type applicatif" sont activés : 
     
                                             switch (LOWORD(wParam)
                                             {
     
                                                               case 9 : 
     
                                                                          MessageBox(NULL, "TEST","TEST", MB_OK);
     }
    Avec dans ressource.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    #define ID_A 5
    #define ID_A && ID_B 9
    #define ID_A && ID_C 10
    #define ID_B && ID_C 11
    #define ID_B && ID_D 12
    En fait, j'ai quatre boutons que j'appelle A, B, C, D

    Il y a quatre possibilités : soit appuyer sur A et C, B et C, A et D, B et D

    Au départ, j'ai essayé de mettre un case avec ID_A && ID_B, mais lorsque je mets un deuxième case avec ID_A && ID_C, il y a conflit. Je me suis donc dit que si je les définissait comme ci-dessus, cela pouvait peut-être marcher ...

    Cela ne fonctionne pas, aucun texte n'est affiché.

  19. #39
    Membre éclairé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 204
    Points : 839
    Points
    839
    Par défaut
    Citation Envoyé par Perot Voir le message
    Après avoir récupérer le chemin du dossier dans bufferCheminDossier, il faut que je puisse filtrer dans dans ce dossier, les fichiers qui contiennent à l'intérieur un code compris entre des balises <A> et </A>.

    Après avoir filtrer cela, il faut que ce code soit inscrit dans un nouveau fichier qui sera créé.
    si tu débutes en C, cette partie va être un peu plus compliquée => dans un 1ere temps regarde les docs pour ouvrir et lire des fichiers et entraine toi

    pour trouver les fichiers, il faut que tu réutilises cette partie, mais ici ce sera le "else"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       do
       {
          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
          {
             // On est sur un dossier
             // Si tu as besoin des sous-dossiers à ce dossier, alors appeler FindFirstFile sur ce dossier  (d'où l'appel récursif que je parlais avant)
             _tprintf(TEXT("  %s   <DIR>\n"), ffd.cFileName);
          }
          else
          {
             // On est sur un fichier
             filesize.LowPart = ffd.nFileSizeLow;
             filesize.HighPart = ffd.nFileSizeHigh;
             _tprintf(TEXT("  %s   %ld bytes\n"), ffd.cFileName, filesize.QuadPart);
     
             // ajouter ici le code pour ouvrir, lire et chercher si le fichier contient ton texte
          }
       }
       while (FindNextFile(hFind, &ffd) != 0);

  20. #40
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2021
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Effectivement pour lister les fichiers j'avais l'intention de reprendre le lien de Microsoft.

    Par contre, au niveau de mon switch posté ci-dessus, tu penses que c'est une bonne idée ?

    Je me suis dit qu'avec des "if", cela allait être illisible.

    EDIT : pour l'instant je vais faire avec les "if", car avec le switch cela me créé trop de problème

    Voici ce que j'ai fais pour le premier cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    // Si A et C sont choisis
     
     
    if (hEditJ !=0 && hEditI !=0)
     
    {
     
     
    hFind2 = FindFirstFile(bufferCheminSousDossier, &ffd);
     
    if (INVALID_HANDLE_VALUE == hFind2)
     
    				{
     
    					DisplayErrorBox(TEXT("FindFirstFile"));
    					return dwError;
     
    				}
     
     
    				do {
     
    						if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     
    						{
     
    							Trouve =1;
    							MessageBox(NULL, ffd.cFileName , "test", MB_ICONWARNING | MB_OK);
     
    							//FILE *fopen(char *chemin, char *mode);
    							//FILE *fp =fopen(bufferCheminSousDossier,"r");
     
    						}
     
    						else 
     
    						{
    							filesize.LowPart = ffd.nFileSizeLow;
    							filesize.HighPart = ffd.nFileSizeHigh;
    							MessageBox(NULL, ffd.cFileName , "test", MB_ICONWARNING | MB_OK);
     
    						}
    					}
     
     
     
    				while (FindNextFile(hFind, &ffd) !=0);
     
     
    					if (Trouve == 0)
     
     
    					{
    						MessageBox(NULL, "Il n'existe aucun fichier qui correspond à la demande", "Erreur", MB_ICONWARNING | MB_OK);
     
    					}
     
     
    					dwError = GetLastError();
     
    						if (dwError != ERROR_NO_MORE_FILES)
     
    						{
    							DisplayErrorBox(TEXT("FindFirstFile"));
    							msgboxID = MessageBox(NULL, "Erreur", "Erreur", MB_ICONWARNING | MB_OK);
     
    						}
     
    						FindClose(hFind);
    						return dwError;
     
     
     
     
     
    }
    Le résultat est que j'ai seulement d'affiché le nom du fichier dans le deuxième MESSAGE BOX ...

    De plus, il faut que cela aille chercher tous les fichiers, à travers d'autres sous-dossiers.


    J'ai regardé sur internet, j'ai trouvé "fopen" pour ouvrir un fichier et "fputs" pour ne sélectionner que certains caractères. En ce qui concerne l'API Windows spécifiquement, je n'ai encore rien trouvé pour l'instant.

    Je continue mes recherches.

Discussions similaires

  1. Modélisation 1ère étape de la création d'IHM Leonardi
    Par Lucas Panny dans le forum W4 Express
    Réponses: 2
    Dernier message: 26/07/2007, 09h29
  2. [OpenOffice][Texte] Création d'une TOC sans IHM
    Par lekekoo dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 25/05/2007, 16h09
  3. création d'IHM java en XML
    Par sglon dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 10/04/2007, 05h43
  4. IHM : création Dataset typé
    Par cDotNet dans le forum Windows Forms
    Réponses: 9
    Dernier message: 29/01/2007, 17h29
  5. Conseils/docs sur la création d'ihm
    Par hellbilly dans le forum Windows
    Réponses: 3
    Dernier message: 19/09/2005, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo