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

Windows Discussion :

oulala .. j'ai besoin d'aide en WIN API.. et autre


Sujet :

Windows

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut oulala .. j'ai besoin d'aide en WIN API.. et autre
    Bonjour bonjour,

    je viens vous poser pleinnn de questions.

    Alors voilà ces temps ci pour mon stage je fais un ptit programme en API WIN32.... tout allait bien..Mis à part qq problemes.. dois je séparer en plusieurs posts?

    Bon je mets des numéros... merci aux modos de séparer le tout si jamais je fais pas comme il faut... ( ou de me dire de refaire..)

    d'abord je mets les questions urgentes, le reste je peux les contourner...( si jepose les questions c'est que j'ai pas mal cherché déjà hein...)


    1/ Ouvrir une feuille csv dans excel à partir de mon programme....

    2/ Créer un graphique en C++ c'est possible? ( j'ai pensé à avoir une forme dont je ferait varier la hauteur, et que je copierais avec une certaine distance entre les plots mais je ne suis pas sure.. ni de comment faire ni si c'est une bonne idée, si il ne vaut mieux pas une courbe...)

    3/ Ahah alors ça je sais pas.. c'est expliqué entre fenetre et une boite de dialogue..mais entre deux boites de dialogue je ne vois pas... je vous explique mon pbm:
    Dans une boite de Dialogue 1 je récupere deux valeurs ( chacune dans une Edit Box différente)... puis j'appelle la boite suivante... dans la boite suivante je dois lancer ma fonction principale ( traitement de données) , et lui assigner les deux nombres comme parametres.... et là ... ben j'y arrive pas..

    4/ Enregistrer un fichier, en ajoutant à la fin du fichier la date et l'heure...

    5/ Pouvoir ouvrir un fichier ( qui n'a pas toujours le meme nom, ça serait un char , ou par exemple le dernier fichier enregistré, oui... donc un char )

    6/ ahahhaah ouiiiii j'allais oublier cette question...huhuuhu
    Bon j'ai bien lu les tutos sur internet ... mais pour une ouverture multiple de fichiers....

    J'arrive à séparer le c:\\Dossier1\Dossier2\ MonFichier.txt MonFichier2.txt, mais imaginons que mon Dossier 2 s'écrive Dossier 2.. ben là ma méthode de recherche ne fonctionne pas.. est ce qu'il est possible de chercher tous les mots finissants par .txt ? Où ma méthode de recherche est fausse?
    Autre probleme... mettre OFN_EXPLORER ça fait une bien plus belle fenetre... mais si je le mets en meme temps que la multi selection... ben je ne récupere que: c:\\Dossier1\Dossier2 ... pas un seul fichier enregistré dans mon szFile.... ( et c'est pas un pbm de buffer, enfin je pense pas...)
    Dernier pbm sur le meme sujet... j e n'arrive pas à récuperer juste les fichiers selectionnés avec les ofn.lpstrTitle et ofn.lpstrFileTitle - euh je dis ça de mémoire.. pas sure pour les lpstr..si c'est la formulation exacte ou pas..- ça serait quand meme plus simple...

    7/ Avez vous un exemple d'utilisation de threading... parceque je dois en faire et c'est un peu flou pour moi... ( je traite mes données avec une fonction.. et j'aimerais afficher dans une listbox les fichiers traités au fur et à mesure).

    8/ Probleme d'image... a plus neurone dans cerveau ce soir.. j'arrive plus à changer l'icone de mes boites de dialogue... et dans une de mes boites de dialogue, appelée par une autre, j'ai deux images à afficher et ça veut pas

    Bon pour les questions par urgente je repasserais en fait lol sinon vous allez me taper

    Bon ben voilà.. j'espère ne pas vous avoir fait trop peur.. que je ne pose pas des questions trop trop débiles, et que vous allez pouvoir m'aider...

    message bien long, donc je ne surchargerais pas avec mon code.. si vous voulez le voir pour mieux comprendre ce que je raconte, demandez je vous le passerais..

    Merciiiiiiiiiiiii et bonne soirée à vous

  2. #2
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Question 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WinExec("\"C:\\Program Files\\Microsoft Office\\OFFICE11\\excel\" \"classeur1.csv\"", SW_SHOW);
    n'oublie pas les guillemets (\") pour tenir compte de la présence d'espace dans les noms de fichiers.
    Customises le chemin excel en fonction de ton install ou vérifie que le répertoire de Office est dans le path

  3. #3
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Question 2 :
    En C++ tout est possible c'est une simple question de temps à passer

    Pour faire un graphique, tout dépend du type de graphique : une courbe de points, un graphe style histo ou camembert, une photo ?

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    merci pour tes réponses ça fait plaisir!

    Euh ben je pensais à la base à une courbe... et pourquoi pas à un graph...mais le plus rapide sera le mieux..

  5. #5
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Question 3:
    Là encore je botte en touche. Quel comportement erroné obtiens tu ?
    Du devrais poster un bout de code pour voir ce que tu fais avec tes dialogues

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    voilà le code concernant la demande 3

    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
    
    BOOL APIENTRY DlgValProc(HWND hDlg4,UINT uMsg4,WPARAM wParam4,LPARAM lParam4)
    {
    
    
        switch (uMsg4)
        {
    
    	case WM_INITDIALOG:
    		{
    			SetDlgItemInt(hDlg4,IDC_level_val,5,NULL);
    			SetDlgItemInt(hDlg4,IDC_stromf_val,3,NULL);
    			return TRUE;
    		}
    		 
    		case WM_COMMAND:
    		
    
    		if (LOWORD(wParam4) == IDC_okval)
    		{
    			
    			UINT valeur = GetDlgItemInt(hParent, IDC_level_val, NULL, FALSE);
    			UINT valeur2 = GetDlgItemInt(hParent2, IDC_Strom_funke, NULL, FALSE);
    			EndDialog(hDlg4,0);
    			
    			DialogBox(hinst, "DIALOG5" ,hwnd, (DLGPROC)DlgprocessProc);
    			
    			return 0;
    
    			
    		}
    					
    		if (LOWORD(wParam4) == IDC_Cancelval)
    		{
    			EndDialog(hDlg4,0);
    			BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    			DialogBox(hinst, "DIALOG1" ,hwnd, (DLGPROC)DlgProc);
    			return 0;
    		}
    
    	    
    		if (LOWORD(wParam4) == IDCANCEL)
    		{			
    			EndDialog(hDlg4,0);
    			BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    			DialogBox(hinst, "DIALOG1" ,hwnd, (DLGPROC)DlgProc);
    			return TRUE;
    			
    		}
    
    		default:
    			return FALSE;
    	}
    }
        
    
    
    BOOL APIENTRY DlgprocessProc(HWND hDlg5,UINT uMsg5,WPARAM wParam5,LPARAM lParam5)
    {
    	
    	
        switch (uMsg5)
        {
    		
          case WM_INITDIALOG:
    		
    		 return TRUE;
    
          case WM_COMMAND:
    
    	// la je voudrais récupérer les valeurs de valeur et valeur2
          // et les mettres comme parametres de ma fonction: Traitement_Données();
    			
    
    		  while(LOWORD(wParam5) != IDC_Cancelprocess && LOWORD(wParam5) != IDCANCEL && R==0)
    		  {
    
    			  
    
    			// effectuer le traitement
    			Traitement_Donnees(wParam6,lParam6);
    
    			
    			// afficher la liste des fichiers traites petit a petit
    
    				
    		  }
    		  
    
    		if (LOWORD(wParam5) == IDC_Cancelprocess )
            {
    			// revenir a la box de debut et arreter le calcul - Utiliser un thread
    			EndDialog(hDlg5,0);
    			BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    			DialogBox(hinst, "DIALOG1" ,hwnd, (DLGPROC)DlgProc);
    			 return 0;
            }
    		
            if (LOWORD(wParam5) == IDCANCEL)
            {
    			// revenir a la box de debut et arreter le calcul- Utiliser un thread
                EndDialog(hDlg5,0);
    			BOOL APIENTRY DlgProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
    			DialogBox(hinst, "DIALOG1" ,hwnd, (DLGPROC)DlgProc);
                return TRUE;
    			
            }
    
          default:
             return FALSE;
        }
    }

  7. #7
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Pour obtenir la date et heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <time.h>
    ...
        struct tm   *newTime;
        time_t      szClock;
        // Get time in seconds
        time( &szClock );
        // Convert time to struct tm form 
        newTime = localtime( &szClock );
    Ensuite utilise sprintf pour fabriquer un nom de fichier qui contient des infos issues de la structure newTime
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char fileName[128]
    sprintf(fileName, "fic%d_%d", newTime->tm_mday, newTime->tm_hour);

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    ah oui je ne peux pas tester ce soir.. j'ai pas le logiciel at home.. mais je teste ça demain et je te tiens au courant ( euh.. je te tutoies.. ça ne te déranges pas?)

    En tout cas merci beaucoup.

    Et si tu veux voir mon code en entier pour comprendre mieux ceux dont je parle hésites pas à demander, je te le donnerais en mp.

  9. #9
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Pour la question 3 (voir l'extrait de code ci-dessus) :

    La procédure de dialogue (DlgProc) passée en dernier argument à DialogBox est traitée de façon événementielle. Chaque message est passé à cette fonction qui doit le traiter et retourner la main à Windows. Tu places une boucle while sur un argument d'une dlgproc. Cela ne pourra pas fonctionner parce que la fonction est censée être appelée puis rendre la main pour chaque message.

    Je pense qu'il faut d'abord remettre à plat l'architecture de cette appli avant de commencer à la coder

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    euh ma fenetre principale est une dialog box...

    ah et oui le while c'est en attendant que je comprenne les tread..

  11. #11
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    question 5: je ne comprends pas la question

    question 6:
    Tu utilise visiblement la fonction GetOpenFileName avec le flag OFN_ALLOWMULTISELECT pour avoir la sélection multiple. Il y a effectivement un piège avec ce flag, j'ai retrouvé une note MS :
    OFN_ALLOWMULTISELECT Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.
    If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the file names of the selected files. The nFileOffset member is the offset, in bytes or characters, to the first file name, and the nFileExtension member is not used. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. This format enables the Explorer-style dialog boxes to return long file names that include spaces. For old-style dialog boxes, the directory and file name strings are separated by spaces and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file names.
    Bon en gros, pour les gens fachés avec la langue de Shakespeare :
    Si j'utilise OFN_EXPLORER (c'est moins ringuard) je reçois les noms de fichiers séparés les un des autres par des zéro. Le répertoire est en plus séparé du nom de fichier par un zéro. La ribambelle se termine par deux char à zéro.
    Suis-je clair ?

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    oui oui tu es clair, surtout que ça je le sais.. ça te fais qqch comme:

    "c:\\Dossier1\Dossier2\0Fichier1.txt\0Fichier2.txt\00"

    sauf que moi si je récupere mon szFile... et que j'ai utilisé OFN_EXPLORER ben ça s'arrete à "c:\\Dossier1\Dossier2"

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    question 5:

    ben euh... je crée un fichier en y ajoutant la date et l'heure derrière, je suppose que ça s'appelle toujours un char? ( j'ai un doute là... )

    et je veux après l'avoir créé.. l'ouvrir.. sauf que je peux pas appeler l'ouverture d'un nom de fichier fixe, je dois appeler une variable..

    soit c'est tres simple et basique, et je suis méga fatiguée...

    soit effectivement j'ai jamais vu lol désolée.. je ne suis plus tres claire avec la fatigue.

    compris ou pas?

  14. #14
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Question 7:
    Je ne suis pas certain que te lancer dans les threads soit une bonne idée.

    Néanmoins voici une intro pour t'aider à démarrer si tu y tiens :
    http://msdn2.microsoft.com/en-us/library/ms682516.aspx

    Dans le main, la fonction CreateThread crée un thread en donnant l'adresse de la fonction qui sera exécutée par le thread (ici ThreadProc). Ensuite on utilise WaitForMultipleObjects si on veut attendre la fin des threads. Si on n'en n'a qu'un à attendre : WaitForSingleObject est plus simple à manipuler. Sinon on n'est pas obligé d'attendre : il vit sa vie.

    Dans le code, HeapAlloc est une sorte de malloc mais à la cave de Windows.

    Ne pas regarder dans la fonction ThreadProc : il ont fait assez compliqué mais il n'y a rien d'important concernant les threads.

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    ok... donc si je ne me lance pas dans les threads je fais comment?

    monsieur qui a réponse à tout ! ( merci merci merci .. tu m'aides trop ! )

  16. #16
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Pour le post #13 je pense que simplement, après avoir appelé sprintf pour fabriquer un nom de fichier qui contient la date (voir post #7), on peut utiliser la variable pour ouvrir le fichier :
    par exemple

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    ok.... c'est donc que je suis bien fatiguée...

    huhu merci encore

  18. #18
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Pour GetOpenFileName, essaie ce code :
    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
    	OPENFILENAME ofn;
    	char szFile[260];
    	HWND hwnd = NULL;
    
    	ZeroMemory(&ofn, sizeof(ofn));
    	ofn.lStructSize = sizeof(ofn);
    	ofn.hwndOwner = hwnd;
    	ofn.lpstrFile = szFile;
    	//
    	// lpstrFile[0] = '\0' pour que GetOpenFileName n'utilise 
    	// pas le contenu de szFile pour s'initialiser.
    	//
    	ofn.lpstrFile[0] = '\0';
    	ofn.nMaxFile = sizeof(szFile);
    	ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    	ofn.nFilterIndex = 1;
    	ofn.lpstrFileTitle = NULL;
    	ofn.nMaxFileTitle = 0;
    	ofn.lpstrInitialDir = NULL;
    	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ALLOWMULTISELECT;
    
    	if (GetOpenFileName(&ofn)==TRUE) {
    
    		for( char* pos = szFile ; *pos != '\0' ; pos += strlen(pos) + 1 )
    			MessageBox(NULL, pos, "", MB_OK);
    
    	}
    Si je sélectionne un seul fichier j'ai le nom complet de ce fichier.
    Si j'en sélectionne plusieurs, j'ai d'abord le répertoire, ensuite un par un les fichiers (sans le répertoire).
    Tordu mais c'est du MS

  19. #19
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 183
    Par défaut
    hiiiii merciiiiii ....

    op op op je prend tout ça et je vais tester ça aujourd'hui...

    j'essaierais de passer sur le forum une fois dans la journée qd meme si jamais j'ai un soucis... sinon ce soir.

    merci encore!!!!

  20. #20
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Ne pas oublier de lire et étudier l'excellent tutoriel de Bob et CGI qui quoiqu'un peu ancien n'a pas pris une seule ride.

    Tutoriel API Windows

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Besoin d'aide pour l'API CreateThread
    Par yann458 dans le forum Windows
    Réponses: 1
    Dernier message: 23/11/2012, 10h26
  2. Besoin d'aide pour Tedit, Button, et autres
    Par Teemy dans le forum Débuter
    Réponses: 1
    Dernier message: 28/12/2009, 08h37
  3. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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