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 :

Problème pour mettre à jour le contenu d'une fenêtre


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Problème pour mettre à jour le contenu d'une fenêtre
    Bonsoir à tous,

    Je "codouille" (débutant complet) un petit outil avec une fenêtre qui devrait se mettre à jour pour changer du texte sur des boutons et changer l'instruction de ces boutons...
    Je rencontre deux problèmes :

    Même en mettant les variables relatives aux boutons en "globales" (static), le compilateur m'annonce que les objets winhWnd, FirstInstance,... ne sont pas déclarés (dans la boucle "switch"), et si la mise à jour de l'affichage fonctionne bien, je suis "prisonnier" de cette boucle et... reste avec mes anciens boutons (texte impossible à changer)

    "IDM_UNL" fonctionne car l'instruction "system("cmd");" s'exécute...

    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
    ...
    switch (msg)
          {
    
    case WM_PAINT:
    
    			HDC hDC;
    			hDC = GetWindowDC(hwnd);
    			PAINTSTRUCT Ps;
    			hDC = BeginPaint(hwnd, &Ps);
            		             TextOut(hDC,135,300,texte,strlen(texte));
    			EndPaint(hwnd, &Ps);
    
    			return 0;
    
    
    
                // Fermeture du programme
    case WM_DESTROY:
    
                      // Ferme le programme
                      PostQuitMessage(0);
                      break;
    
                // Fermeture de la fenêtre via le menu système ou la croix(X) noir
    case WM_CLOSE:
    
                      // Détruit la fenêtre
                      DestroyWindow(hwnd);
                      break;
    
                // Réception des commandes
    case WM_COMMAND:
    
            if (LOWORD(wParam) == IDM_UNL)
            {
    system("cmd");
    /*
      HWND cmdhWnd17 = CreateWindowEx(0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
                270, 30, 100, 30, winhWnd, (HMENU)ID_BUTTON17, FirstInstance, NULL);
    */
    
        texte = "Texte2";
        SetWindowText(cmdhWnd17, "coucou");
        return 0;
    
            }
    Conscient que j'ai énormément de choses à apprendre, de la documentation, le nom d'une API à utiliser, une direction vers laquelle chercher me conviendra parfaitement, même si je ne crache pas sur une solution toute faite (ou un code en exemple)...

    cmdhWndX = boutonX
    texte = texte à afficher
    IDM_UNL = événement déclenché lors d'un clic sur une partie du menu

    Merci d'avance à celui qui pourra éclairer ma lanterne

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    J'ai du mal à voir...
    Pourrais-tu poster TOUT ton code?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Bonjour Médinoc,

    C'est super sympa de prendre du temps pour regarder... d'autant que je débute... et que mon code risque d'être très... difficile à lire (j'ai fait un effort de simplification pour que ce soit le plus clair possible)

    Fichier "main.cpp"
    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
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    
    #include <windows.h>
    #include "resource.h"
    
    // Handle de la fenêtre
    static HWND winhWnd;
    HINSTANCE hinst;
    
    static char * texte;
    
    // Boite de dialogue (pour le cas ABOUT)
    BOOL APIENTRY Dialog1Proc(HWND, UINT, WPARAM, LPARAM);
    
    // Procédure qui va recevoir les messages
    LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
    
    // Entré du programme
    int APIENTRY WinMain(HINSTANCE FirstInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
    {
    
    MSG msg;
    static WNDCLASSEX wc;
    
          // Création de la classe
          wc.hInstance = FirstInstance;  // Instance
          wc.lpszClassName = "NitRic_Button";  // Nom de la classe
          wc.lpfnWndProc = WinProc;  // Adresse de la procédure
          wc.style = CS_DBLCLKS;  // Style
          wc.cbSize = sizeof(WNDCLASSEX);  // Taille
          wc.hIcon = LoadIcon(FirstInstance,MAKEINTRESOURCE(1));
          wc.hIconSm = LoadIcon(FirstInstance,MAKEINTRESOURCE(2));  // Petite icone
          wc.hCursor = LoadCursor(NULL, IDC_ARROW);  // Curseur
          wc.lpszMenuName = "LEMENU";  // Menu
          wc.cbClsExtra = 0;  // ...
          wc.cbWndExtra = 0;  // ...
          wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);  // Couleur de fond
    //reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
    
          // Enregistre la classe
          if (!RegisterClassEx(&wc))
          {
                // Échec
                MessageBox(NULL, "Erreur lors de l'enregistrement de la classe.", "Erreur", MB_OK);
                return 0;
    
          }
    
    texte = "Texte qui devrait être modifié au clic sur Fichier --> Fun";
    
    
          // Création de la fenêtre
         winhWnd = CreateWindowEx(0, "NitRic_Button", "Surf rapide", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
                800, 600, HWND_DESKTOP, NULL, FirstInstance, NULL);
    
          if (winhWnd == NULL)
          {
                // Échec
                MessageBox(NULL, "Erreur lors de la création de la fenêtre.", "Erreur", MB_OK);
                return 0;
    
          }
    
          // Création du bouton1
          HWND cmdhWnd = CreateWindowEx(0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
                30, 30, 800, 30, winhWnd, (HMENU)ID_BUTTON, FirstInstance, NULL);
    
          if (cmdhWnd == NULL)
          {
                // Échec
                MessageBox(winhWnd, "Erreur lors de la création du Bouton.", "Erreur", MB_OK);
                return 0;
    
          }
    
    
                // Création du bouton2
          HWND cmdhWnd2 = CreateWindowEx(0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
                30, 70, 100, 30, winhWnd, (HMENU)ID_BUTTON2, FirstInstance, NULL);
    
          if (cmdhWnd == NULL)
          {
                // Échec
                MessageBox(winhWnd, "Erreur lors de la création du Bouton.", "Erreur", MB_OK);
                return 0;
    
          }
    
    
          // Affiche la fenêtre
          ShowWindow(winhWnd, SW_SHOW);
          // Met à jour la fenêtre
          UpdateWindow(winhWnd);
    
          // Envoie tu texte dans le bouton(Caption)
          SetWindowText(cmdhWnd, "Bouton à modifier au clic sur FUN (contenu et comportement)");
    
          // Met à jour le bouton
          UpdateWindow(cmdhWnd);
          // Donne le focus au bouton
          SetFocus(cmdhWnd);
    
    
                // Met à jour la fenêtre
          UpdateWindow(winhWnd);
    
          // Envoie tu texte dans le bouton(Caption)
          SetWindowText(cmdhWnd2, "Google");
    
          // Met à jour le bouton
          UpdateWindow(cmdhWnd2);
          // Donne le focus au bouton
          SetFocus(cmdhWnd2);
    
    
    
          // Boucle qui permet au programme de rester ouvert :)
          while (GetMessage(&msg, NULL, 0, 0))
          {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
          }
    
          // Fin du programme
          return msg.wParam;
    
    }
    
    
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    
     switch (msg)
          {
    
    case WM_PAINT:
    
    			HDC hDC;
    			hDC = GetWindowDC(hwnd);
    			PAINTSTRUCT Ps;
    			hDC = BeginPaint(hwnd, &Ps);
               			 TextOut(hDC,135,300,texte,strlen(texte));
    			EndPaint(hwnd, &Ps);
    
    			return 0;
    
    
    
                // Fermeture du programme
    case WM_DESTROY:
    
                      // Ferme le programme
                      PostQuitMessage(0);
                      break;
    
                // Fermeture de la fenêtre via le menu système ou la croix(X) noir
    case WM_CLOSE:
    
                      // Détruit la fenêtre
                      DestroyWindow(hwnd);
                      break;
    
                // Réception des commandes
    case WM_COMMAND:
    
    
    
            if (LOWORD(wParam) == IDM_UNL)
            {
    
          texte = "Texte2";
    
        return 0;
    
            }
    
    
    
              if(LOWORD(wParam) == IDM_OPEN)
              {
    
                       return 0;
        }
    
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
    
            if(LOWORD(wParam) == IDM_ABOUT)
                           DialogBox(hinst, "DIALOG1" , hwnd, (DLGPROC)Dialog1Proc);
    
    
    
                  /*if IDM_OPEN*/
    
                      // Vérifie que c'est bien le bouton    Vérifie si on à cliquer sur le bouton
                      if ((LOWORD(wParam) == ID_BUTTON) && (HIWORD(wParam) == BN_CLICKED))
                      {
                            // Affiche un MessageBox disant qu'on a cliqué sur le bouton
                                                             system("start explorer http://www.yahoo.com");
    
                      }
    
                                        // Vérifie que c'est bien le bouton    Vérifie si on à cliquer sur le bouton
                      if ((LOWORD(wParam) == ID_BUTTON2) && (HIWORD(wParam) == BN_CLICKED))
                      {
                            // Affiche un MessageBox disant qu'on a cliqué sur le bouton
                                                             system("start explorer http://www.google.com");
    
                      }
    
                      break;
    
    
                default:
    
                      return DefWindowProc(hwnd, msg, wParam, lParam);
                      break;
    
          }
    
          return 0;
    
    }
    
    BOOL APIENTRY Dialog1Proc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
    
             return TRUE;
    
          case WM_COMMAND:
             if (LOWORD(wParam) == IDCANCEL || LOWORD(wParam) == IDOK)
                    {
                       EndDialog(hDlg,0);
                       return TRUE;
                    }
    
          default:
             return FALSE;
        }
    
    }
    Fichier "resource.h"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define IDM_QUIT  1
    #define IDM_NEW   2
    #define IDM_ABOUT 3
    #define IDM_OPEN  5
    #define IDM_UNL   10
    
    // ID(identificateur) des boutons
    #define ID_BUTTON 100
    #define ID_BUTTON2 101
    Fichier "resource.rc"
    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
    #include <windows.h>
    #include "resource.h"
    
    1 ICON go.ico
    2 ICON go2.ico
    
    LEMENU MENU
    BEGIN
      POPUP "Fichier"
        BEGIN
           MENUITEM "Ouvrir", IDM_OPEN
           MENUITEM SEPARATOR
           MENUITEM "Fun", IDM_UNL
           MENUITEM SEPARATOR
           MENUITEM "Autres", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Quitter", IDM_QUIT
        END
         POPUP "Edition"
        BEGIN
           MENUITEM "Sélectionner", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Copier", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Coller", IDM_NEW
        END
    
      POPUP "Aide"
        BEGIN
           MENUITEM "Qui ?", IDM_ABOUT
           MENUITEM SEPARATOR
           MENUITEM "Merci", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Pourquoi ?", IDM_NEW
        END
    END
    
    DIALOG1 DIALOG
      100, 100, 130, 60
           STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                 CAPTION "ZwQuery"
    BEGIN
        DEFPUSHBUTTON "OK", IDOK, 80, 35, 30, 20
        ICON 1, 80, 80, 35, 15, 15
        LTEXT "ETD (Essai1)\n -----------------------", -10, 80, 18, 60, 10
    END
    --> Si tu compiles, tu auras une erreur avec les fichiers .ico. Il te suffira d'en créer deux bidons et de les mettre dans le même répertoire ou de mettre ces parties de code en commentaire.

    --> Comme tu le verras facilement, tout fonctionne ; mais je ne parviens pas à modifier le contenu / le comportement des boutons au clic sur un élément du menu...
    --> Je suppose que je foire dans la boucle...

    Merci !!!

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Bonjour,
    Déjà, toutes ces manips avant la boucle de messages, ça me parait suspect. Ensuite, pour l'instant, tu ne cherches pas à changer quoi que ce soit après un clic...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Bonjour Médinoc,

    toutes ces manips avant la boucle de messages, ça me parait suspect
    Tu parles des "mises à jour de la fenêtre et des boutons" ?
    Ca peut avoir une influence sur le contenu de la boucle ?


    tu ne cherches pas à changer quoi que ce soit après un clic...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            if (LOWORD(wParam) == IDM_UNL)
            {
    
          texte = "Texte2";
    
        return 0;
    
            }
    Pourtant cette ligne change bien le texte, j'ai vérifié en ajoutant
    system("cmd");


    --> Comment dois-je procéder pour qu'à l'activation de IDM_UNL, il change le contenu de la fenêtre et qu'il le maintienne ?

    Je m'y prends sans doute mal...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    OK, Juste après avoir modifié texte, rajoute cette ligne:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    InvalidateRect(hWnd, NULL, TRUE);
    Ce code forcera le système à redessiner la fenêtre quand il aura le temps (en clair, ta fenêtre va recevoir un nouveau message WM_PAINT).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Médinoc,

    MERCI beaucoup,
    Tes explications sont claires, précises et je suis certain que cela fonctionnera (je n'ai plus accès à ce PC pour l'instant) ====> Dans tous les sujets d'ailleurs.

    Cela fonctionnera aussi pour le changement de texte et de comportement des boutons ?

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Bonjour Médinoc,

    Ca marche super bien, t'es un tueur !


    Par contre, je ne parviens pas à changer le texte des boutons avec la même méthode, ni le lien lorsqu'on clique dessus...
    Encore un foirage ?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Poste ton dernier code.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    'soir Médinoc,

    Fichier "main.cpp"
    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
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    
    #include <windows.h>
    #include "resource.h"
    
    // Handle de la fenêtre
    static HWND winhWnd;
    HINSTANCE hinst;
    
    static char * texte;
    
    // Boite de dialogue (pour le cas ABOUT)
    BOOL APIENTRY Dialog1Proc(HWND, UINT, WPARAM, LPARAM);
    
    // Procédure qui va recevoir les messages
    LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
    
    // Entré du programme
    int APIENTRY WinMain(HINSTANCE FirstInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
    {
    
    MSG msg;
    static WNDCLASSEX wc;
    
          // Création de la classe
          wc.hInstance = FirstInstance;  // Instance
          wc.lpszClassName = "NitRic_Button";  // Nom de la classe
          wc.lpfnWndProc = WinProc;  // Adresse de la procédure
          wc.style = CS_DBLCLKS;  // Style
          wc.cbSize = sizeof(WNDCLASSEX);  // Taille
          wc.hIcon = LoadIcon(FirstInstance,MAKEINTRESOURCE(1));
          wc.hIconSm = LoadIcon(FirstInstance,MAKEINTRESOURCE(2));  // Petite icone
          wc.hCursor = LoadCursor(NULL, IDC_ARROW);  // Curseur
          wc.lpszMenuName = "LEMENU";  // Menu
          wc.cbClsExtra = 0;  // ...
          wc.cbWndExtra = 0;  // ...
          wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);  // Couleur de fond
    //reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
    
          // Enregistre la classe
          if (!RegisterClassEx(&wc))
          {
                // Échec
                MessageBox(NULL, "Erreur lors de l'enregistrement de la classe.", "Erreur", MB_OK);
                return 0;
    
          }
    
    texte = "Texte qui devrait être modifié au clic sur Fichier --> Fun";
    
    
          // Création de la fenêtre
         winhWnd = CreateWindowEx(0, "NitRic_Button", "Surf rapide", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
                800, 600, HWND_DESKTOP, NULL, FirstInstance, NULL);
    
          if (winhWnd == NULL)
          {
                // Échec
                MessageBox(NULL, "Erreur lors de la création de la fenêtre.", "Erreur", MB_OK);
                return 0;
    
          }
    
          // Création du bouton1
          HWND cmdhWnd = CreateWindowEx(0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
                30, 30, 800, 30, winhWnd, (HMENU)ID_BUTTON, FirstInstance, NULL);
    
          if (cmdhWnd == NULL)
          {
                // Échec
                MessageBox(winhWnd, "Erreur lors de la création du Bouton.", "Erreur", MB_OK);
                return 0;
    
          }
    
    
                // Création du bouton2
          HWND cmdhWnd2 = CreateWindowEx(0, "BUTTON", "", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
                30, 70, 100, 30, winhWnd, (HMENU)ID_BUTTON2, FirstInstance, NULL);
    
          if (cmdhWnd == NULL)
          {
                // Échec
                MessageBox(winhWnd, "Erreur lors de la création du Bouton.", "Erreur", MB_OK);
                return 0;
    
          }
    
    
          // Affiche la fenêtre
          ShowWindow(winhWnd, SW_SHOW);
          // Met à jour la fenêtre
          UpdateWindow(winhWnd);
    
          // Envoie tu texte dans le bouton(Caption)
          SetWindowText(cmdhWnd, "Bouton à modifier au clic sur FUN (texte du bouton et lien)");
    
          // Met à jour le bouton
          UpdateWindow(cmdhWnd);
          // Donne le focus au bouton
          SetFocus(cmdhWnd);
    
    
                // Met à jour la fenêtre
          UpdateWindow(winhWnd);
    
          // Envoie tu texte dans le bouton(Caption)
          SetWindowText(cmdhWnd2, "Google");
    
          // Met à jour le bouton
          UpdateWindow(cmdhWnd2);
          // Donne le focus au bouton
          SetFocus(cmdhWnd2);
    
    
    
          // Boucle qui permet au programme de rester ouvert :)
          while (GetMessage(&msg, NULL, 0, 0))
          {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
          }
    
          // Fin du programme
          return msg.wParam;
    
    }
    
    
    // Réception des messages
    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    
     switch (msg)
          {
    
    case WM_PAINT:
    
    			HDC hDC;
    			hDC = GetWindowDC(hwnd);
    			PAINTSTRUCT Ps;
    			hDC = BeginPaint(hwnd, &Ps);
               			 TextOut(hDC,135,300,texte,strlen(texte));
    			EndPaint(hwnd, &Ps);
    
    			return 0;
    
    
    
                // Fermeture du programme
    case WM_DESTROY:
    
                      // Ferme le programme
                      PostQuitMessage(0);
                      break;
    
                // Fermeture de la fenêtre via le menu système ou la croix(X) noir
    case WM_CLOSE:
    
                      // Détruit la fenêtre
                      DestroyWindow(hwnd);
                      break;
    
                // Réception des commandes
    case WM_COMMAND:
    
    
    
            if (LOWORD(wParam) == IDM_UNL)
            {
    
          texte = "Texte2";
          InvalidateRect(hwnd, NULL, TRUE);
    
        return 0;
    
            }
    
    
    
              if(LOWORD(wParam) == IDM_OPEN)
              {
    
                       return 0;
        }
    
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);
    
            if(LOWORD(wParam) == IDM_ABOUT)
                           DialogBox(hinst, "DIALOG1" , hwnd, (DLGPROC)Dialog1Proc);
    
    
    
                  /*if IDM_OPEN*/
    
                      // Vérifie que c'est bien le bouton    Vérifie si on à cliquer sur le bouton
                      if ((LOWORD(wParam) == ID_BUTTON) && (HIWORD(wParam) == BN_CLICKED))
                      {
                            // Affiche un MessageBox disant qu'on a cliqué sur le bouton
                                                             system("start explorer http://www.yahoo.com");
    
                      }
    
                                        // Vérifie que c'est bien le bouton    Vérifie si on à cliquer sur le bouton
                      if ((LOWORD(wParam) == ID_BUTTON2) && (HIWORD(wParam) == BN_CLICKED))
                      {
                            // Affiche un MessageBox disant qu'on a cliqué sur le bouton
                                                             system("start explorer http://www.google.com");
    
                      }
    
                      break;
    
    
                default:
    
                      return DefWindowProc(hwnd, msg, wParam, lParam);
                      break;
    
          }
    
          return 0;
    
    }
    
    BOOL APIENTRY Dialog1Proc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
        switch (uMsg)
        {
          case WM_INITDIALOG:
    
             return TRUE;
    
          case WM_COMMAND:
             if (LOWORD(wParam) == IDCANCEL || LOWORD(wParam) == IDOK)
                    {
                       EndDialog(hDlg,0);
                       return TRUE;
                    }
    
          default:
             return FALSE;
        }
    
    }

    Fichier "resource.h"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define IDM_QUIT  1
    #define IDM_NEW   2
    #define IDM_ABOUT 3
    #define IDM_OPEN  5
    #define IDM_UNL   10
    
    // ID(identificateur) des boutons
    #define ID_BUTTON 100
    #define ID_BUTTON2 101


    Fichier "resource.rc"
    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
    #include <windows.h>
    #include "resource.h"
    
    1 ICON go.ico
    2 ICON go2.ico
    
    LEMENU MENU
    BEGIN
      POPUP "Fichier"
        BEGIN
           MENUITEM "Ouvrir", IDM_OPEN
           MENUITEM SEPARATOR
           MENUITEM "Fun", IDM_UNL
           MENUITEM SEPARATOR
           MENUITEM "Autres", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Quitter", IDM_QUIT
        END
         POPUP "Edition"
        BEGIN
           MENUITEM "Sélectionner", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Copier", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Coller", IDM_NEW
        END
    
      POPUP "Aide"
        BEGIN
           MENUITEM "Qui ?", IDM_ABOUT
           MENUITEM SEPARATOR
           MENUITEM "Merci", IDM_NEW
           MENUITEM SEPARATOR
           MENUITEM "Pourquoi ?", IDM_NEW
        END
    END
    
    DIALOG1 DIALOG
      100, 100, 130, 60
           STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                 CAPTION "ZwQuery"
    BEGIN
        DEFPUSHBUTTON "OK", IDOK, 80, 35, 30, 20
        ICON 1, 80, 80, 35, 15, 15
        LTEXT "ETD (Essai1)\n -----------------------", -10, 80, 18, 60, 10
    END
    • Je voudrais donc qu'en cliquant sur Fichier -> Fun, le bouton change de texte et de lien (humour.com par ex)
    • Merci ++

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Eh bien pour changer de texte, un SetWindowText() sur le bouton devrait suffire...
    Pour changer ce qu'il y a derrière, par contre, tu devras compliquer ton code...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Bonjour Medinoc


    Pour changer ce qu'il y a derrière, par contre, tu devras compliquer ton code...
    ~ Là, je ne vois vraiment pas comment je dois faire, même si je m'en doutais !
    ~ En compliquant, mes variables ne s'initialisent pas au bon endroit et je suis largué.

    • Auriez-vous un exemple de code qui fait ce genre de truc ?
    • Quels sont les principes pour déclarer correctement les variables ?




    merci 2000 fois

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Je pense que ça dépend pas mal du code.
    Déjà, il ne faut rien faire qui dépende de la taille avant de l'avoir.
    Ensuite, il faut noter cette taille dans une variable, puis utiliser ladite variable pour allouer les tableaux voulus sur le tas avec malloc()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Merci medinoc

    Comme je n'y comprends rien, je vais juste te demander une dernière chose...
    As-tu une idée de l'endroit où je pourrais avoir des tutos / des exemples qui m'aideraient dans cette direction ?

    J'en suis vraiment à mes débuts
    Sorry...

  15. #15
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389

Discussions similaires

  1. Mettre à jour le contenu d'une box
    Par Rizen dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 03/01/2010, 23h19
  2. Réponses: 3
    Dernier message: 20/04/2009, 15h03
  3. Problème pour mettre à jour une table SQL
    Par Bes74 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/03/2009, 20h21
  4. Réponses: 3
    Dernier message: 19/07/2007, 15h46
  5. Réponses: 1
    Dernier message: 16/05/2007, 20h31

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