Petit problème de saisie

snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 24 sept. 2007 à 23:57
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011 - 15 mai 2008 à 08:58
Bonjours ou bon soir à tous,
voila j'ais fait un bou de code en win32 et il marche.
il marche ?non.
il y a un petit  truc qui ne marche pas, quand je m'es mon nom dans l'espace login et que j'appuye sur valider sa m'envois le message :
LOGIN OU PASS ERRORE.

le code:


<hr />

#include <conio.h>
#include
#include <fstream>
#include <windows.h>
#include <string.h>
using namespace std;
#define   IDB_Valide         100 //  bouton Valider
#define   IDE_EDIT            109 // contrôle EDIT
#define   IDE_EDIT1           110 // contrôle EDIT
fstream f;//Le filestream utilisé pour les manipulations de fichiers
char login[] = "effacer ceci et tapé votre login";
   char pass[] = "effacer ceci et tapé votre pass";
           
HWND hWnd;
// Boutons :
        
HWND hwndButtonValider;
// EDIT
HWND hWndEdit1;
HWND hWndEdit;
const HBRUSH hCouleur_BTNFACE = CreateSolidBrush (RGB(210,220,230));
// Création d'une fonte pour la personnalisation des boutons et du contrôle static.
HINSTANCE hInst;LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM) ;

char szClassName[ ] = "Fenêtre Windows simple avec boutons";
CREATESTRUCT Parent;
char szTextStatic1[500];
// Fonction WinMain ; point d'entrée du code.
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpcmdLine,
                    int nCmdShow)
{ hInst = hThisInstance;
// Fenêtre  
 HWND hWnd;
 MSG  msg;
 WNDCLASSEX wincl;
    wincl.cbSize = sizeof(WNDCLASSEX);
 wincl.style = CS_HREDRAW | CS_VREDRAW; // Style de la classe
 wincl.lpfnWndProc = WndProc; // Procédure utilisé par la classe szAppName
 wincl.cbWndExtra = 0;  // Non utilisé pour l'instant
 wincl.cbClsExtra = 0;  // Non utilisé pour l'instant
 wincl.hInstance = hThisInstance;
 wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.hbrBackground = hCouleur_BTNFACE;
 wincl.lpszMenuName = NULL; // Pas de menu.
 wincl.lpszClassName = szClassName;
 // Enregistrement de la classe de la fenêtre
 if(!RegisterClassEx(&wincl))
 {
  MessageBox (NULL,"Classe non enregistrée",szClassName,MB_OK);
  return 0;
 }
 hWnd = CreateWindowEx (0,szClassName, "Etude des contrôles dans une fenêtre simple",
 WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE|WS_MAXIMIZEBOX,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hThisInstance,
         NULL);
     
 ShowWindow (hWnd, SW_MAXIMIZE); 
 UpdateWindow(hWnd);
 // Boucle de traitement des messages :
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);}
 return msg.wParam;}// Fin de la fonction WinMain() ------------------------------------------------

// Procédure de traitement des messages de la fenêtre

LRESULT CALLBACK  WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
 case WM_CREATE : // -------------------------------------------------------
        {
hwndButtonValider =  CreateWindowEx(0, "BUTTON", "Valider",
                  WS_CHILD |BS_PUSHBUTTON |WS_VISIBLE ,
                              460, 70,  100, 30,   hWnd,  (HMENU) IDB_Valide,
         Parent.hInstance, NULL );  // Arg 11 : Méthode de base.
  

   // Création des contrôles EDIT

   char szTexte[12] = "CLASSE EDIT";

    
   hWndEdit =               CreateWindowEx(0, "EDIT", szTexte,
                                  WS_CHILD | ES_LEFT| WS_BORDER |WS_VISIBLE,
                                  350, 10, 320,  20,hWnd, (HMENU)IDE_EDIT  ,
                                  (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),  NULL);

   hWndEdit1 =             CreateWindowEx(0, "EDIT", "",
                                  WS_CHILD | ES_LEFT| WS_BORDER | WS_VISIBLE,
                                  350, 40, 320,  20,hWnd, (HMENU)IDE_EDIT1   ,
                                  (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),  NULL);
    SetWindowText ( hWndEdit ,login);
   SetWindowText ( hWndEdit1 , pass);}
    case WM_COMMAND : // ------------------------------------------------------
         { // click sur le bouton Valider de la fenêtre :       if (LOWORD(wParam) IDB_Valide && HIWORD(wParam) BN_CLICKED)

    { 
    
    int ff;//Le nombre de caractères de l'espace tampon.
    char *cf;//L'espace tampon qui va stocker les données des fichiers
    char txt[]="login.txt";//La chaine à ouvrire

    f.open(txt, ios::in | fstream::binary);//Ouvrir le fichier en lecteur
    f.seekg(0, ios::end);//Trouver la fin du fichier
    ff = f.tellg();//Lire le nombre d'octets
    f.seekg(0, ios::beg);//Revenir au début
    cf = new char [ff+1];//Redimensionner l'espace tampon avant
    f.read(cf, ff); //d'accueilir les données
    cf[f.gcount()] = 0;
    f.close();//Sans oublier de fermer le filestream
    fstream r;//idem que login
int fx;//idem
char *rf;//idem
char ts[]="code.txt";//idem

 

r.open(ts, ios::in | fstream::binary);//idem
r.seekg(0, ios::end);//idem
fx = r.tellg();//idem
r.seekg(0, ios::beg);//idem
rf = new char [fx+1];//idem
r.read(rf, fx);//idem
rf[r.gcount()] = 0;
r.close();
//saisie du login  
 if(strcmp(login, cf))
{
 int faux= MessageBox(hWnd, "LOGIN OU PASS ERRORE" ,szClassName, MB_YESNO ); 
      return 0;}
                  else{}
    }
                return 0;} // Fin traitement WM-COMMAND / proc---------------------------
case WM_CLOSE:  // --------------------------------------------------------
       {
       int nQuit = MessageBox(hWnd, "Vous voulez réellement quitter",
                       szClassName, MB_YESNO | MB_ICONQUESTION);
                       if(nQuit == IDNO) {return 0;}
                       DestroyWindow( hWnd );
            break; } // fin case WM_CLOSE -------------------------------------------------
            case WM_DESTROY : //-------------------------------------------------------
           {
  PostQuitMessage(0);
   return 0;} }
return DefWindowProc(hWnd,message,wParam,lParam);
} // Fin de la procédure de traitement des messages de la fenêtre
LRESULT CALLBACK ProcEnfant1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{
         switch (message)
 {
case WM_SYSCOMMAND :

  switch(wParam)

  {case SC_CLOSE :
                 return 0;
                  default :
        return DefWindowProc(hWnd,message,wParam,lParam);}
           return 0;}
           return DefWindowProc(hWnd,message,wParam,lParam);
}

<hr />
alore j'ais mit mon nom a la place de:
<hr />
char login[] = "effacer ceci et tapé votre login";
char login[] = "Wolf";
<hr />et la sa marche.
mais quend je le change a l'endroit ou il faut écrire,même si je mais un autre nom, sa marche alors que sa ne devrais pas.
POUR QUOI NE PREND T'IL PAS MA SAISIE ?
ps: dsl pour les fauts et le code je ne l'ais pas écris en entier,j'ais prie des bous de code parci par la donc il y a des truc que je ne comprends pas .
Mais sa vien gentilement
merci d'avence pour vos réponse.
A++

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 sept. 2007 à 09:18
http://brunews.com/brunews/download/CP5.zip


http://brunews.com/brunews/download/CP5Sources.zip

C'est du code COMPLET qu'il faut prendre chez Petzold.
On ne fait pas du Win32 en C par tatonnement, c'est pas du VB.

ciao...
BruNews, MVP VC++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
25 sept. 2007 à 09:33
Une fois de plus, télécharger Visual C++ Express 2005 (gratuit) et utilisez les fichiers de ressources plutot que de vous faire chier avec tout ce code.
Non seulement ca va soulager votre code mais en plus ca vous evitera des erreurs. 

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 sept. 2007 à 09:53
Il faut ajouter à ceci qu'une ressource compilée sera chargée énormément plus vite qu'une série d'appels CreateWindow.

ciao...
BruNews, MVP VC++
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
25 sept. 2007 à 12:41
Merci pour ces conseil mais vc je ni comprends rien alors que dev-C++ oui .
 BruNews merci pour les fichiers sources.
A++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
25 sept. 2007 à 14:14
A titre de conseil, si tu souhaites faire de la programmation ton métier, autant te metter directement dans le bain avec Visual Studio qui est incontournable.
Crois moi il est pas du tout compliqué a utiliser surtout si tu as l'habitude des soft miscrosoft. Ca reste très intuitif et ergonomique.
Télécharge le et si besoin nous t'aiderons si tu n'arrives pas a l'utiliser.

Shell
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
25 sept. 2007 à 19:16
salut,
je l'ais déja télécharger,
mais il est très différant de DEV-C++ et j'ais commencer avc ça, alors je ne comprends rien à vc.
mais j'ais commencer un peux à l'étudier.
juste pour ma question peux tu me donner la commande à fair car je veux quand même le terminer.
merci d'avence.
a++
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
26 sept. 2007 à 15:59
Salut
Pour ton probleme, il faut que tu fasses plusieurs choses:
Déjà tout ton traitement pour comparer ton login se fait UNIQUEMENT à la création de ta fenêtre (message : WM_CREATE).
Capte le message lors que tu appuies sur le bouton     case IDB_Valide :

Et avant de comparer les deux chaines de caractère il faut que tu recupères la nouvelle chaine de caractère de ton edit avec la fonction : GetDlgItemText(hWnd,IDE_EDIT1,login,strlen(login));

Et dernière petite chose pourquoi lorsque la comparaison est fausse tu lances une dialogue box avec les bontons oui ET non?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 sept. 2007 à 16:08
GetDlgItemText(hWnd, IDE_EDIT1, login, strlen(login));
NIET !!!

dernier param est la taille du buffer 'login' et non la strlen contenue au moment de l'appel.

ciao...
BruNews, MVP VC++
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
26 sept. 2007 à 18:53
ok meci mais j'ai trouve en cour de rout .
j'ai fais comme sa :
<hr />           SetFocus(hWndEdit);
                        char szTexte[10];
  GetWindowText(hWndEdit,szTexte,sizeof(szTexte));
            

<hr />
merci encors .

a++
0
snpier wolf Messages postés 216 Date d'inscription samedi 11 août 2007 Statut Membre Dernière intervention 30 mai 2011
15 mai 2008 à 08:58
 je suis désolé quand je relis tous mes questions je me mare, j'ais l'imprétion que j'étais c**, dsl pour toutes les questions débile(dsl pour le terme) que j'ais posé sur ce site, et merci à vous tous  qui mon aidé à mes début...
0
Rejoignez-nous