Bseoin de conseil pour faire des menus

Signaler
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006
-
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006
-
bonjour a tous,

voila j'ai un gros probleme au niveau des menus en language C++ .
En effet, avec mon compilateur Visual c++ 6, je fait des "DialogBox". La 1ere affiche le menu avec des boutons, ca je l'ai fait c'est bon, ensuite lors de l'appuie sur le bouton 1 par exemple, j'affiche une 2eme fenetre c'est bon aussi mais le HIC c'est que je veux que cette derniere m'affiche les logiciels installés sur l'ordinateur.

Pour cela, j'ai le code pour ceux que ca interresse car ca leur sera plus simple de m'aider. Si vous le voulez dite moi le.

J'ai fais la fonction qui affiche les logiciels installé et les 2 fenetres mais j'arrive pas a lui dire au programme de d'afficher les infos dans la 2eme fenetre.

Merci d'avance pour votre aide
a bientot

4 réponses

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ben chaque dialog à une Procédure de gestion des messages
Lors de l'activation de la deuxième procédure correspondant à la deuxième Dialogue, Afficher les logiciels...

if(!Meilleur("Joky")) return ERREUR;<
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006

ben g fait la 2eme procedur mais seulement je c pas koi passer kome parametre a ma fonction logiciel installé

en faite si tu peu venir sur msn je tenvoi le code pour ke tu voie ca sera mieu je pense si tu peu rep me

pui mon pseudo msn c  
kiko13400@hotmail.com

merci d'avance a+
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006

rebonjour a tous et a toute

voila maintenan j'arrive a faire appelle a la 2eme fenetre le seul probleme c'est que je ne sait pas quoi passer comme parametre a ma fonction de logiciel installé car il faut que je lui passe un HWND.  
Voila mon code:
BOOL CALLBACK Menu(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>

{

                switch(Msg)

                {

                case WM_CLOSE:                                                                      //Quand on demande de fermer

                                EndDialog(hWnd, 0);                                          //On obéit et on ferme

                                return 0;                                                               //On retourne 0

 

                case WM_COMMAND:

                                {

                                               switch(wParam)

                                               {

                                               case IDC_BUTTON1:

                                                               Fenetre1(hInstance2,hPrevInstance,lpszArgument,nFunsterStil);

                                                               return 0;

 

                                               case IDC_BUTTON2:

                                                               return 0;

 

                                               case IDC_BUTTON3:

                                                               return 0;

 

                                               case IDC_BUTTON4:                 

                                                               return 0;

               

                                               case IDC_BUTTON5:                 

                                                               return 0;

 

                                               case IDC_BUTTON6:                 

                                                               return 0;

 

                                               case IDC_BUTTON7:                //Sur le bouton Quitter

                                                               EndDialog(hWnd, 0);

                                                               return 0;

                                               }

                                }

                                return 0;

                }

                return FALSE;

}

 

/**************************************************************************************/

 

/* fenetre qui affiche les logiciels installés */

int APIENTRY Fenetre1(HINSTANCE hThisInstance,

                    HINSTANCE hPrevInstance,

                    LPSTR lpszArgument,

                    int nFunsterStil)

 

{

    HWND hwnd;               /* handle pour notre fenetre */

    MSG messages;            /* messages sauvegardés dans cette variable */

    WNDCLASSEX wincl;        /* structure pour notre classe de fenetre */

 

    /* Structure de notre classe fenetre */

    wincl.hInstance = hThisInstance;   /* nom de l'instance d'application */

    wincl.lpszClassName = szClassName;

    wincl.lpfnWndProc = WindowProcedure;      /* Fonction appelée automatiquement par windows */

    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */

    wincl.cbSize = sizeof (WNDCLASSEX);

 

    /* utilisation d'une icone et d'un pointeur de souris par défaut */

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

    wincl.lpszMenuName = NULL;                 /* No menu */

    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */

    wincl.cbWndExtra = 0;                      /* structure or the window instance */

    /* Utilisation des couleur windows pour le texte et l'arriere plan */

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

 

    /* enregistrement de la classe fenetre, et si cela echoue on quitte le programme */

    if (!RegisterClassEx (&wincl))

        return 0;

 

    /* la classe fenetre est enregistrée et l'on continu */

   

    /* on crée notre fenêtre avec CreateWindow()

                // on quitte si çà s'est mal passé */

                if ((hwnd = CreateWindow(

                                               szClassName,                                                       // le nom de notre classe

                                               "Programme",                                                    // le titre de la fenêtre

                                               WS_OVERLAPPEDWINDOW,                    // le style de la fenêtre

                                               100,100,                      // ses positions x et y au début

                                               700, 400,                                                               // la taille de la fenêtre (Largeur, Hauteur)

                                               NULL,                                                                                  // sa fenetre parent

                                               NULL,                                                                                  // chargement du menu

                                               hThisInstance,                                                     // l'instance de l'appli, puis enfin une donnée tjrs mise à NULL

                                               NULL)) == NULL) return FALSE;

                                              

                // à ce stade, hwnd est le "handle" de notre fenêtre créée

                // il nous servira souvent tout le long du programme

          

    HWND statique = CreateWindowEx(0, "STATIC", "Logiciels installés",

    WS_VISIBLE|WS_CHILD,10, 10, 600, 20 , hwnd,0, hThisInstance, NULL);

   

    lsthWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NULL,

    WS_VISIBLE|WS_CHILD|LBS_SORT|LBS_NOTIFY|WS_HSCROLL|WS_VSCROLL,

     10, 35, 600, 350, hwnd, (HMENU)ID_LISTBOX, hThisInstance, NULL);

     /* Les arguments:

      * 1er: c'est l'effet de la fenetre (0, 2, etc... pour mettre au niveau de la fenetre (nbr paire)

                                          1, 3, etc... pour mettre en relief (nbr impaire)

                                          WS_EX_CLIENTEDGE pour mettre en fond)

      * 2eme: Statique

      * 3eme: Ce qu'on écrit

      * 5eme: Distance par rapport au bord de droite de la fenetre en pixels

      * 6eme: Distance par rapport au bord du haut de la fenetre en pixels

      * 7eme: Largeur de l'espace requis pour ecrire en pixels

      * 8eme: Hauteur de l'espace requis pour ecrire en pixels

      * 10eme:

      * 11eme: On lui fournit l'instance de l'application

      * 12eme: Toujours a NULL*/

    

    if (lsthWnd == NULL)

    {

        MessageBox(hwnd, "Erreur lors de la création de la ListBox.", 0, 16);

        return 0;

    }

                /* montrer la fenetre */

    ShowWindow (hwnd, nFunsterStil);

 

    /* Run the message loop. It will run until GetMessage() returns 0 */

    while (GetMessage (&messages, NULL, 0, 0))

    {

        /* Transforme les clés en caracteres (message) */

        TranslateMessage(&messages);

        /* Envoie les message au WindowProcedure */

        DispatchMessage(&messages);

    }

    /* Le programme donne la valeur de "PostQuitMessage()" soit 0 */

    return messages.wParam;

}

 

/**************************************************************************************/

 

/*  fonction appelé par windows avec DispatchMessage()  */

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    switch (message)                  /* selon fenetre de message */

    {

        case WM_TIMER:

        {

    /* Ce cas à lieu au demarrage de la fenetre c'est pour cela que l'on */

    /* appel la fonction à l'interieur de celui-ci */

            KillTimer(hwnd,wParam);

            if (wParam==0)

            {

                InstallSoftware(lsthWnd);

            }

        }   break;

        case WM_CREATE:

            SetTimer(hwnd,0,0,0);

            break;

        case WM_DESTROY:

   /* ce cas sert a quitter la fenetre window en envoyant PostQuitMessage(0) */

           /* a window pour qu'il ferme cette fenetre */

            PostQuitMessage (0);

            break;

        default:                      /* for messages that we don't deal with */

            return DefWindowProc (hwnd, message, wParam, lParam);

    }

    return 0;

}

 

/**************************************************************************************/

 

/* InstallSoftware(ListBox); où ListBox est le HWND de la ListBox */

void InstallSoftware(HWND ListBox)

{  

                char uninstallKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";

    DWORD taille=10240;

    DWORD taille1=taille;

    DWORD taille2=taille;

    HKEY Retour;

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,uninstallKey,0,KEY_ALL_ACCESS,&Retour))

                {

   

                char * NomVal;

    NomVal = new char[taille];

    unsigned long NNom=taille;

    int n=0;

    long Ret;

   

    do

    {

        taille1=taille; taille2=taille;NomVal[0]=0;

       

        Ret = RegEnumKeyEx( Retour,n,NomVal,&taille1,NULL,NULL,NULL,NULL );

       

        if ((Ret != ERROR_NO_MORE_ITEMS))

        {

            int len= strlen(uninstallKey);

            char * NomValCle = new char[len+strlen(NomVal)+2];

            strcpy(NomValCle,uninstallKey);

            if (NomValCle[len-1]!='\\')

            {

                NomValCle[len]='\\';

                NomValCle[len+1]='\0';

            }

            strcat(NomValCle,NomVal);

            long Ret2;

            unsigned long Ty2=0;

            HKEY Retour2;

            RegOpenKeyEx(HKEY_LOCAL_MACHINE,NomValCle,0,KEY_ALL_ACCESS,&Retour2);

            char * NomVal2;

            NomVal2 = new char[taille];

            unsigned char * Valeur2;

            Valeur2 = new unsigned char[taille];

            long n2=0;

           

            char Nom[MAX_PATH];

            Nom[0]=0;

            do

            {

                taille1=taille; taille2=taille;NomVal2[0]=0;Valeur2[0]=0;Ty2=0;

                Ret2 = RegEnumValue(Retour2,n2,NomVal2,&taille1,0,&Ty2,Valeur2,&taille2);

                if (strcmp("DisplayName",NomVal2)==0)

                    strcpy(Nom,(char*)Valeur2);

                n2++;

            } while ( (Ret2 != ERROR_NO_MORE_ITEMS) );

           

            if (Nom[0]!=0)

            {

                                                               //SendMessage(hWnd, WM_SETICON, ICON_BIG,(LPARAM) LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)));

                SendMessage(ListBox,LB_ADDSTRING,0,(LPARAM) (LPCTSTR) Nom);

                                                               //SetDlgItemText(ListBox, IDC_LIST1, Nom);

            }

            delete[]NomValCle;

        }

        n++;

    } while ( (Ret != ERROR_NO_MORE_ITEMS) );

                }

}

voila enn clair mon programme sans la premiere WinMain qui appelle une dialogBox donc on sen fou.

Ben la les logiciels installé ce s'affiche pas tout comme la fenetre
vous avez une idée?

merci d'avance a+
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006

rebonjour a tous et a toute

voila maintenan j'arrive a faire appelle a la 2eme fenetre le seul probleme c'est que je ne sait pas quoi passer comme parametre a ma fonction de logiciel installé car il faut que je lui passe un HWND.  
Voila mon code:
BOOL CALLBACK Menu(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>

{

                switch(Msg)

                {

                case WM_CLOSE:                                                                      //Quand on demande de fermer

                                EndDialog(hWnd, 0);                                          //On obéit et on ferme

                                return 0;                                                               //On retourne 0

 

                case WM_COMMAND:

                                {

                                               switch(wParam)

                                               {

                                               case IDC_BUTTON1:

                                                               Fenetre1(hInstance2,hPrevInstance,lpszArgument,nFunsterStil);

                                                               return 0;

 

                                               case IDC_BUTTON2:

                                                               return 0;

 

                                               case IDC_BUTTON3:

                                                               return 0;

 

                                               case IDC_BUTTON4:                 

                                                               return 0;

               

                                               case IDC_BUTTON5:                 

                                                               return 0;

 

                                               case IDC_BUTTON6:                 

                                                               return 0;

 

                                               case IDC_BUTTON7:                //Sur le bouton Quitter

                                                               EndDialog(hWnd, 0);

                                                               return 0;

                                               }

                                }

                                return 0;

                }

                return FALSE;

}

 

/**************************************************************************************/

 

/* fenetre qui affiche les logiciels installés */

int APIENTRY Fenetre1(HINSTANCE hThisInstance,

                    HINSTANCE hPrevInstance,

                    LPSTR lpszArgument,

                    int nFunsterStil)

 

{

    HWND hwnd;               /* handle pour notre fenetre */

    MSG messages;            /* messages sauvegardés dans cette variable */

    WNDCLASSEX wincl;        /* structure pour notre classe de fenetre */

 

    /* Structure de notre classe fenetre */

    wincl.hInstance = hThisInstance;   /* nom de l'instance d'application */

    wincl.lpszClassName = szClassName;

    wincl.lpfnWndProc = WindowProcedure;      /* Fonction appelée automatiquement par windows */

    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */

    wincl.cbSize = sizeof (WNDCLASSEX);

 

    /* utilisation d'une icone et d'un pointeur de souris par défaut */

    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

    wincl.lpszMenuName = NULL;                 /* No menu */

    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */

    wincl.cbWndExtra = 0;                      /* structure or the window instance */

    /* Utilisation des couleur windows pour le texte et l'arriere plan */

    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

 

    /* enregistrement de la classe fenetre, et si cela echoue on quitte le programme */

    if (!RegisterClassEx (&wincl))

        return 0;

 

    /* la classe fenetre est enregistrée et l'on continu */

   

    /* on crée notre fenêtre avec CreateWindow()

                // on quitte si çà s'est mal passé */

                if ((hwnd = CreateWindow(

                                               szClassName,                                                       // le nom de notre classe

                                               "Programme",                                                    // le titre de la fenêtre

                                               WS_OVERLAPPEDWINDOW,                    // le style de la fenêtre

                                               100,100,                      // ses positions x et y au début

                                               700, 400,                                                               // la taille de la fenêtre (Largeur, Hauteur)

                                               NULL,                                                                                  // sa fenetre parent

                                               NULL,                                                                                  // chargement du menu

                                               hThisInstance,                                                     // l'instance de l'appli, puis enfin une donnée tjrs mise à NULL

                                               NULL)) == NULL) return FALSE;

                                              

                // à ce stade, hwnd est le "handle" de notre fenêtre créée

                // il nous servira souvent tout le long du programme

          

    HWND statique = CreateWindowEx(0, "STATIC", "Logiciels installés",

    WS_VISIBLE|WS_CHILD,10, 10, 600, 20 , hwnd,0, hThisInstance, NULL);

   

    lsthWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NULL,

    WS_VISIBLE|WS_CHILD|LBS_SORT|LBS_NOTIFY|WS_HSCROLL|WS_VSCROLL,

     10, 35, 600, 350, hwnd, (HMENU)ID_LISTBOX, hThisInstance, NULL);

     /* Les arguments:

      * 1er: c'est l'effet de la fenetre (0, 2, etc... pour mettre au niveau de la fenetre (nbr paire)

                                          1, 3, etc... pour mettre en relief (nbr impaire)

                                          WS_EX_CLIENTEDGE pour mettre en fond)

      * 2eme: Statique

      * 3eme: Ce qu'on écrit

      * 5eme: Distance par rapport au bord de droite de la fenetre en pixels

      * 6eme: Distance par rapport au bord du haut de la fenetre en pixels

      * 7eme: Largeur de l'espace requis pour ecrire en pixels

      * 8eme: Hauteur de l'espace requis pour ecrire en pixels

      * 10eme:

      * 11eme: On lui fournit l'instance de l'application

      * 12eme: Toujours a NULL*/

    

    if (lsthWnd == NULL)

    {

        MessageBox(hwnd, "Erreur lors de la création de la ListBox.", 0, 16);

        return 0;

    }

                /* montrer la fenetre */

    ShowWindow (hwnd, nFunsterStil);

 

    /* Run the message loop. It will run until GetMessage() returns 0 */

    while (GetMessage (&messages, NULL, 0, 0))

    {

        /* Transforme les clés en caracteres (message) */

        TranslateMessage(&messages);

        /* Envoie les message au WindowProcedure */

        DispatchMessage(&messages);

    }

    /* Le programme donne la valeur de "PostQuitMessage()" soit 0 */

    return messages.wParam;

}

 

/**************************************************************************************/

 

/*  fonction appelé par windows avec DispatchMessage()  */

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    switch (message)                  /* selon fenetre de message */

    {

        case WM_TIMER:

        {

    /* Ce cas à lieu au demarrage de la fenetre c'est pour cela que l'on */

    /* appel la fonction à l'interieur de celui-ci */

            KillTimer(hwnd,wParam);

            if (wParam==0)

            {

                InstallSoftware(lsthWnd);

            }

        }   break;

        case WM_CREATE:

            SetTimer(hwnd,0,0,0);

            break;

        case WM_DESTROY:

   /* ce cas sert a quitter la fenetre window en envoyant PostQuitMessage(0) */

           /* a window pour qu'il ferme cette fenetre */

            PostQuitMessage (0);

            break;

        default:                      /* for messages that we don't deal with */

            return DefWindowProc (hwnd, message, wParam, lParam);

    }

    return 0;

}

 

/**************************************************************************************/

 

/* InstallSoftware(ListBox); où ListBox est le HWND de la ListBox */

void InstallSoftware(HWND ListBox)

{  

                char uninstallKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";

    DWORD taille=10240;

    DWORD taille1=taille;

    DWORD taille2=taille;

    HKEY Retour;

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,uninstallKey,0,KEY_ALL_ACCESS,&Retour))

                {

   

                char * NomVal;

    NomVal = new char[taille];

    unsigned long NNom=taille;

    int n=0;

    long Ret;

   

    do

    {

        taille1=taille; taille2=taille;NomVal[0]=0;

       

        Ret = RegEnumKeyEx( Retour,n,NomVal,&taille1,NULL,NULL,NULL,NULL );

       

        if ((Ret != ERROR_NO_MORE_ITEMS))

        {

            int len= strlen(uninstallKey);

            char * NomValCle = new char[len+strlen(NomVal)+2];

            strcpy(NomValCle,uninstallKey);

            if (NomValCle[len-1]!='\\')

            {

                NomValCle[len]='\\';

                NomValCle[len+1]='\0';

            }

            strcat(NomValCle,NomVal);

            long Ret2;

            unsigned long Ty2=0;

            HKEY Retour2;

            RegOpenKeyEx(HKEY_LOCAL_MACHINE,NomValCle,0,KEY_ALL_ACCESS,&Retour2);

            char * NomVal2;

            NomVal2 = new char[taille];

            unsigned char * Valeur2;

            Valeur2 = new unsigned char[taille];

            long n2=0;

           

            char Nom[MAX_PATH];

            Nom[0]=0;

            do

            {

                taille1=taille; taille2=taille;NomVal2[0]=0;Valeur2[0]=0;Ty2=0;

                Ret2 = RegEnumValue(Retour2,n2,NomVal2,&taille1,0,&Ty2,Valeur2,&taille2);

                if (strcmp("DisplayName",NomVal2)==0)

                    strcpy(Nom,(char*)Valeur2);

                n2++;

            } while ( (Ret2 != ERROR_NO_MORE_ITEMS) );

           

            if (Nom[0]!=0)

            {

                                                               //SendMessage(hWnd, WM_SETICON, ICON_BIG,(LPARAM) LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)));

                SendMessage(ListBox,LB_ADDSTRING,0,(LPARAM) (LPCTSTR) Nom);

                                                               //SetDlgItemText(ListBox, IDC_LIST1, Nom);

            }

            delete[]NomValCle;

        }

        n++;

    } while ( (Ret != ERROR_NO_MORE_ITEMS) );

                }

}

voila enn clair mon programme sans la premiere WinMain qui appelle une dialogBox donc on sen fou.

Ben la les logiciels installé ce s'affiche pas tout comme la fenetre
vous avez une idée?

merci d'avance a+