API win32

API win32 - C - Programmation

Marsh Posté le 24-09-2005 à 21:08:43    

Salut à tous
 
Voilà je viens de finir mon code (je débute) pour trouver des nombres premiers (algorythme tout simple, mais c'est pas la question :p)
 

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.     // Définition des variables
  6.     int nombre;
  7.     int racine,nb,verif,non_premier,total,pcent,start;
  8.     int pcent_old=0;
  9.     int atteindre=9000;
  10.     float division;
  11.    
  12.     //################################
  13.     nombre = 3; // Nombre de départ  #
  14.     //################################
  15.    
  16.     start = 1;
  17.     total = 0;
  18.    
  19.     FILE *fp = fopen("premiers.txt", "w" );
  20.    
  21.     printf ("Recherche des nombres premiers jusqu'a %d \n\n", atteindre);
  22.     while (nombre < atteindre){
  23.      
  24.        // Part du principe que le nombre est premier
  25.        non_premier = 0;
  26.        nb = 2 ;
  27.      
  28.        //Calcule la racine entière du nombre
  29.        racine = sqrt(nombre);
  30.      
  31.        while (nb != racine+1){
  32.              division = ((float)nombre/(float)nb);
  33.              verif = (int)division;
  34.              if (division == verif){
  35.                 non_premier = non_premier+1;
  36.              }
  37.              nb = nb+1;
  38.        }
  39.      
  40.        // Si le nombre est premier
  41.        if (non_premier == 0){
  42.           total = total+1;           
  43.          
  44.                 // Ecrit le nombre premier dans le fichier
  45.                 fprintf(fp, "%d\n", nombre);
  46.        }
  47.        pcent = 100/atteindre*nombre;
  48.        printf ("%d", pcent);
  49.        if (pcent != pcent_old){
  50.           pcent_old = pcent;
  51.           printf ("Travail en cours: %d%             %d nombres premiers trouvés\n", pcent, total);
  52.        }
  53.           nombre = nombre+2;
  54.     }
  55.     fclose(fp);
  56.     return 0;
  57. }


 
Voilà je voudrais (tout simplement :d) savoir comment faire pour créer une boite de dialogue (en utilisant l'API win32 => windows.h) et afficher les sastistiques en temps réel (nombres premiers trouvés, sur combien de nombres, pourcentage) sans utiliser de graphique ni quoi que ce soit de trop dur, je veux juste afficher une ou deux variables qui se réactualise en temps réel...
 
J'ai un peu cherché sur le web, mais les explications fournies sont bien trop complexes pour un débutant tel que je suis :(
 
Bonne soirée ;)


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 21:08:43   

Reply

Marsh Posté le 24-09-2005 à 21:20:53    

Reply

Marsh Posté le 24-09-2005 à 21:21:09    

MessageBox ne doit pas être trop dur à utiliser, après les boites de dialogue complètes c'est plus compliquer (il faut des fonctions callback si je me souviens bien...)

Reply

Marsh Posté le 24-09-2005 à 21:39:54    

bin ouais, fo definir le template de ta boite de dialog (dans l'editeur a VS, egnre), pis apres fo definir la callback qui gere les messages
 
c'est du bonheur a tartiner

Reply

Marsh Posté le 24-09-2005 à 21:41:13    

ok merci beaucoup je vais voir ca, mais ca m'insipire pas trop ce que tu dis chrisbk :p


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 21:45:24    

bah heuh

Code :
  1. #include "resource.h"
  2. ...
  3. BOOL CALLBACK maProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  4. {
  5.     switch(msg) {
  6.        case WM_COMMAND:
  7.           switch(LOWORD(wParam)) {
  8.                   case IDOK:
  9.                   case IDCANCEL:
  10.                        EndDialog(hWnd, 1);
  11.                    break;
  12.           }
  13.        }
  14.    return FALSE;
  15. }
  16. ...
  17. DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MADIALOG), NULL, maProc,0);


 
Superbe non ?
 
tapé de tete, donc y'a ptet des couilles. Cherche la doc msdn sur DialogBoxParam et heuh, joue avec l'editeur de dialog a VS
 

Reply

Marsh Posté le 24-09-2005 à 22:04:00    

J'avoue que je comprend rien, quelqu'un aurait pas MSN pour m'expliquer comment marche les fenetres parce que je capte rien du tout là !!!


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 22:05:21    

Ou à la limite (je sais que c'est interdit mais ca m'aiderai beaucoup beaucoup), si quelqu'un pouvait me faire une toute pitite portion de code qui pourait ressembler à une msgbox comme on en fesait en VBS avec des variables qui change dans la fenetre ca serait vraiment génial :d


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 22:05:50    

kmeleon1 a écrit :

Voilà je viens de finir mon code (je débute) pour trouver des nombres premiers (algorythme tout simple, mais c'est pas la question :p)


Pas mal d'erreurs dans ce code...


main.c: In function `main_':

 

main.c:31: warning: passing arg 1 of `sqrt' as floating rather than integer due to prototype
main.c:36: warning: comparing floating point with == or != is unsafe
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format
main.c:53: warning: repeated ` ' flag in format

 

main.c:53: warning: conversion lacks type at end of format


Le problème de la ligne 53 est le '%' tout seul qui est une erreur. Tu dois mettre "%%" pour afficher '%'

 

Il est curieux d'impliquer les nombres flottants dans un algorithme destiné à trouver des nombres premiers dont la définition s'appuie exclusivement sur des nombres entiers et des divisions du même sexe.

Citation :


Voilà je voudrais (tout simplement :d) savoir comment faire pour créer une boite de dialogue (en utilisant l'API win32 => windows.h) et afficher les sastistiques en temps réel (nombres premiers trouvés, sur combien de nombres, pourcentage) sans utiliser de graphique ni quoi que ce soit de trop dur, je veux juste afficher une ou deux variables qui se réactualise en temps réel...


La programmation Windows, ça ne s'improvise pas. C'est tout un art, et il y a pas mal de concepts à comprendre (qui n'ont rien à voir avec le langage C) comme la programmation par évènements.

 

Je te conseille de commencer par apprendre le C standard (ligne de commande, mode texte dit 'console'), et une fois que tu maitriseras le C, tu pourras te lancer dans la programmation Windows par l'API Win32. L'aspect 'présentation' n'est pas le plus important quand on commence la programmation. On peut, pendant très longtemps, se contenter du mode texte, et il existe même des applications très puissantes qui n'ont aucun effet sur la console. Bien sûr, si tu es un drogué du clickodrome, je comprends que ça te démange. Si c'est le cas, sache que le C est le dernier des langages pour programmer efficacement (rapidement) du GUI. Voir plutôt Python ou Ruby, voire Delphi/Kylix (pas très portable...)

 

Si tu tiens à programmer du GUI en C, une surcouche portable comme GTK+ peut grandement simplifier le travail.

 

Pour en revenir à ton code. Il fonctionne à peu près (à part que 2 est premier)

 

Après légère mise au point et réorganisation des variables (réduction de la porté, modularisation), les valeurs trouvées sont conformes à

 

http://noe-education.org/D11102.php


#include <stdio.h>
#include <math.h>
#include <float.h>

 

#define FNAME "../data/primes.txt"

 

int main (void)
{
   FILE *fp = fopen (FNAME, "r" );

 

  if (fp != NULL)
   {
      int const atteindre = 9000;
      int nombre = 2;           /* Nombre de depart  */
      int total = 0;
#if 0
      int pcent_old = 0;
#endif
      printf ("Recherche des nombres premiers jusqu'a %d \n\n", atteindre);

 

     while (nombre < atteindre)
      {
         int racine;
         int nb = 2;
         /* Part du principe que le nombre est premier */
         int non_premier = 0;

 

        /* Calcule la racine entière du nombre */
         racine = sqrt ((double) nombre);

 

        while (nb != racine + 1)
         {
            double division = (double) nombre / nb;
            {
               int verif = division;
               if ((division - verif) < FLT_EPSILON)
               {
                  non_premier++;
               }
            }
            nb++;
         }

 

        /* Si le nombre est premier */
         if (non_premier == 0)
         {
            total++;

 

           /* Ecrit le nombre premier dans le fichier */
            {
               int premier;
               int n = fscanf (fp, "%d", &premier);

 

              if (n == EOF)
               {
                  printf ("EOF\n" );
                  break;
               }
               
               if (premier != nombre)
               {
                  printf ("erreur : %d au lieu de %d\n", nombre, premier);
                  break;
               }
            }
         }
#if 0
         {
            int pcent;
            pcent = 100 / atteindre * nombre;
            printf ("%d", pcent);

 

           if (pcent != pcent_old)
            {
               pcent_old = pcent;
               printf ("Travail en cours: %d%%             %d nombres premiers trouvés\n", pcent, total);
            }
         }
#endif
         nombre += 2;
      }

 

     fclose (fp);
   }
   else
   {
      perror (FNAME);
   }
   return 0;
}


Message édité par Emmanuel Delahaye le 03-02-2007 à 23:37:07

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-09-2005 à 22:11:19    

Emmanuel je pense pas franchement que mettre à jour à l'écran quelques variables dans une ptite boîte de dialogue ca nécessite d'etre normalien et d'avoir fait la Polytechnic School of London (respect :))
 
Si j'ai un code qui m'affiche et réactualise la variable a et b, moi je suis content je m'en inspire et je fais plus chier personne :p (j'ai bien fait comme ca pour le php, bon c'est pas du super haut niveau mais c'est déjà pas mal).


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 22:11:19   

Reply

Marsh Posté le 24-09-2005 à 22:43:44    

kmeleon1 a écrit :

Emmanuel je pense pas franchement que mettre à jour à l'écran quelques variables dans une ptite boîte de dialogue ca nécessite d'etre normalien et d'avoir fait la Polytechnic School of London (respect :))


Je n'ai pas dit ça. J'ai simplement rappelé le fait que ça ne s'improvisait pas en bidouillant sur un coin de table. Maintenant, tu en fais ce que tu veux...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-09-2005 à 22:51:32    

soit pas si guindé, on est pas mal a avoir appris en bricolant sur un coin de table, plus tard on peut remettre ca d'aplomb

Reply

Marsh Posté le 24-09-2005 à 22:52:56    

je t'aime bien toi !


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 23:01:03    

en meme temps, il a raison le manu ! win32 c'est pas pour le péquin moyen ! ça se mérite, un tel pouvoir entre les mains !

Reply

Marsh Posté le 24-09-2005 à 23:02:23    

Personnellement j'préfère avoir le pouvoir de faire tourner une apps sous linux que sous windaube... enfin bon c'est une affaire de gout :d


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 24-09-2005 à 23:20:28    

kmeleon1 a écrit :

Personnellement j'préfère avoir le pouvoir de faire tourner une apps sous linux que sous windaube... enfin bon c'est une affaire de gout :d


Alors qu'est-ce que tu viens nous p*ter les c***ll*s avec Win32 ? Amuse toi avec X.11 et KDE... Ou GTK+ qui permet de faire la même chose (à peu près) sous les deux systèmes (et d'autres).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-09-2005 à 23:24:37    

Emmanuel Delahaye a écrit :

Alors qu'est-ce que tu viens nous p*ter les c***ll*s avec Win32 ? Amuse toi avec X.11 et KDE... Ou GTK+ qui permet de faire la même chose (à peu près) sous les deux systèmes (et d'autres).


 
ah la je suis d'accord, kmeleon retourne sur ton os paleolithique et continu a te battre contre les trilobites :o

Reply

Marsh Posté le 24-09-2005 à 23:27:28    

je crois que manu a calmé léon :o

Reply

Marsh Posté le 24-09-2005 à 23:28:00    

excellent jeu de mot [:icon9]

Reply

Marsh Posté le 24-09-2005 à 23:29:18    

Je profite de l opportunite de cette aimable discussion, pour signaler l existence de PyQt, qui est multiplateforme (windows, unix, OSX) et qui dechire du slip, vraiment.

Reply

Marsh Posté le 24-09-2005 à 23:30:29    

manatane a écrit :

Je profite de l opportunite de cette aimable discussion, pour signaler l existence de PyQt, qui est multiplateforme (windows, unix, OSX) et qui dechire du slip, vraiment.


PyQT c'est QT pour Python [:vague nocturne]

Reply

Marsh Posté le 24-09-2005 à 23:30:37    

HORS SUJET §§§§

Reply

Marsh Posté le 24-09-2005 à 23:35:59    

Harkonnen a écrit :

PyQT c'est QT pour Python [:vague nocturne]


[:a_bon]

Reply

Marsh Posté le 24-09-2005 à 23:37:45    

Harkonnen a écrit :

je crois que manu a calmé léon :o


[:rofl]


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-09-2005 à 10:12:30    

Oui mais moi j'veux faire cette apps sous windows :d !!!


---------------
.:: Kmeleon ::.
Reply

Marsh Posté le 25-09-2005 à 10:15:56    

kmeleon1 a écrit :

Oui mais moi j'veux faire cette apps sous windows :d !!!


Dans ce cas, retour à la case départ : apprendre la programmations GUI sous Windows. Un bon livre : Le Petzold édition 5 (En bibliothèque, car introuvable en librairie).
 
Apparement, existe encore à la vente en anglais...
 
http://www.charlespetzold.com/pw5/

Message cité 2 fois
Message édité par Emmanuel Delahaye le 25-09-2005 à 10:17:57

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-09-2005 à 10:23:47    

Emmanuel Delahaye a écrit :

Dans ce cas, retour à la case départ : apprendre la programmations GUI sous Windows. Un bon livre : Le Petzold édition 5 (En bibliothèque, car introuvable en librairie).
 
Apparement, existe encore à la vente en anglais...
 
http://www.charlespetzold.com/pw5/


Dans ce cas je conseillerai d'apprendre la programmation graphique et pas seulement la prog win32.
Genre apprendre wxWidgets ou QT ou au pire GTK (mais c'est du C). Win32 j'en ai fait bcp autrefois, ça permet de faire des softs très compacts et très réactifs car tu ne mets que le strict nécessaire. Par contre niveau portabilité c'est 0 et qd microsoft changera son API pour passer en .Net natif, tes connaissances --> poubelle.
 
Donc commence direct par un wrapper, C++ si possible car l'héritage s'applique merveilleusement bien dans ce cas. Genre pour la boite de dialogue du dérive de "Dialog" (une classe standard) et tu redefinie juste les méthodes qui faut, plus besoin de DefaultWinProc ou autres...

Reply

Marsh Posté le 03-02-2007 à 19:12:20    

Emmanuel Delahaye a écrit :

Un bon livre : Le Petzold édition 5 (En bibliothèque, car introuvable en librairie).


 
Disponible chez Hachette et donc sur commande dans toute librairie qui se respecte (http://larenaissance.site.voila.fr) pour 49€ (ISBN: 2100064797 - EAN13: 9782100064793 - Code Hachette: 6442446)


Message édité par Sve@r le 03-02-2007 à 19:14:02

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 19:27:47    

t'as pas l'impression de déterrer un topic vieux de 2 ans là ? :o
ceci dit, merci pour ce déterrage, ça m'a permis de me repayer une bonne tranche de rire comme seul le regretté chrisbk savait nous en offrir :D
 
:sweat:

Reply

Marsh Posté le 03-02-2007 à 19:36:12    

Harkonnen a écrit :

t'as pas l'impression de déterrer un topic vieux de 2 ans là ? :o


Ah ? Il y a prescription sur les topic ???? :sol:  
 
En fait je cherchais un autre topic et je suis tombé sur celui-là. De toute façon l'info, elle, est récente (je bosse aussi dans la librairie donnée en URL, que j'ai d'ailleurs fait visiter à Elmoricq, et j'ai donc accès à des outils de recherche privés chez les éditeurs en question)...
 

Harkonnen a écrit :

ceci dit, merci pour ce déterrage, ça m'a permis de me repayer une bonne tranche de rire comme seul le regretté chrisbk savait nous en offrir :D
 
:sweat:


Oui, j'ai lu ses posts en détail... :(

Message cité 1 fois
Message édité par Sve@r le 03-02-2007 à 19:37:36

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-02-2007 à 23:39:40    

Sve@r a écrit :

Ah ? Il y a prescription sur les topic ???? :sol:  
 
En fait je cherchais un autre topic et je suis tombé sur celui-là. De toute façon l'info, elle, est récente (je bosse aussi dans la librairie donnée en URL, que j'ai d'ailleurs fait visiter à Elmoricq, et j'ai donc accès à des outils de recherche privés chez les éditeurs en question)...
 
 
Oui, j'ai lu ses posts en détail... :(


Ce topic appartient a l'histoire...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed