Afficher le texte d'un editbox dans un messagebox()

Soyez le premier à donner votre avis sur cette source.

Vue 11 755 fois - Téléchargée 523 fois

Description

Ce petit bout de code vous montre comment créée une fenêtre, un bouton et une zone de texte en C++. En appyant sur le bouton un MessageBox() s'affiche avec le texte du EditBox... Bref c'est une personne qui m'à demandé de faire un exemple et de le mettre ici... :| Donc voila, il y est!

Source / Exemple :


Voila le code:

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

#include <windows.h>

// ID du EditBox
#define ID_EDITBOX 100
// ID du Button
#define ID_BUTTON  101

// Nom de la classe
char MainClassName[] = "GetWindowText";
// Instance du programme
HINSTANCE MainInstance;
// Handle de la fenêtre
HWND MainHandle;
// Handle du EditBox
HWND EditHandle;
// Handle du Button
HWND ButtonHandle;

// Prototype
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

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

// Entré du programme
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{

// Pour recevoir et transmettre les messages
MSG msg;
// Pour créé la fenêtre
WNDCLASSEX wc;

      // Sauvegarde l'instance
      MainInstance = hInstance;

      // Création de la classe
      wc.hInstance = MainInstance;  // Instance du programme
      wc.lpszClassName = MainClassName;  // Nom de la classe
      wc.lpfnWndProc = WinProc;  // Procédure qui va recevoir les messages
      wc.style = CS_DBLCLKS;  // Le style...
      wc.cbSize = sizeof(WNDCLASSEX);  // Taille de la struct
      wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);  // L'icône(grande)
      wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);  // L'icône(petite)
      wc.hCursor = LoadCursor(NULL, IDC_ARROW);  // Le curseur
      wc.lpszMenuName = NULL;  // Menu
      wc.cbClsExtra = 0;  // ...
      wc.cbWndExtra = 0;  // ...
      wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);  // BackColor(Couleur de fond)

      // Enregistre la classe
      if (!RegisterClassEx(&wc))
            return 0; // Erreur ...

      // Crée la fenêtre
      MainHandle = CreateWindowEx(0, MainClassName, "GetWindowText (Sample)", WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL,hInstance, NULL);

      if (MainHandle == NULL)
            return 0;  // Erreur ...

      // Cré le EditBox
      EditHandle = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", "", WS_CHILD|
            WS_VISIBLE|ES_MULTILINE|WS_HSCROLL|WS_VSCROLL|ES_AUTOHSCROLL|ES_AUTOVSCROLL|
            ES_WANTRETURN, 0, 0, 535, 300, MainHandle, (HMENU)ID_EDITBOX, hInstance, NULL);

      if (EditHandle == NULL)
            return 0;  // Erreur ...

      // Cré le Button
      ButtonHandle = CreateWindowEx(0, "BUTTON", "&Afficher le texte", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
            5, 305, 140, 40, MainHandle, (HMENU)ID_BUTTON, hInstance, NULL);

      if (ButtonHandle == NULL)
            return 0;  // Erreur ...

      // Envoie du texte dans le EditBox
      SetWindowText(EditHandle, "Appuyer su le bouton [Afficher le texte] pour faire afficher\r\nce texte dans un MessageBox();");

      // Affiche la fenêtre
      ShowWindow(MainHandle, SW_SHOW);
      // Met à jour la fenêtre
      UpdateWindow(MainHandle);

      // Recoie et transmet les messages à WinProc
      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)
      {
            // Ferme le programme
            case WM_DESTROY:
                  PostQuitMessage(0);
                  break;

            // Reception des commandes
            case WM_COMMAND:

                  // Vérifie si on à cliquer sur le bouton
                  if ((LOWORD(wParam) == ID_BUTTON) && (HIWORD(wParam) == BN_CLICKED))
                  {

                        // Va contenir le texte du EditBox
                        char *LeText = NULL;
                        // Va contenir le nombres de caractères dans le EditBox
                        unsigned int TextLen = 0;

                        // Récupère le nombres de caractères dans le EditBox
                        TextLen = GetWindowTextLength(EditHandle);
                        // S'il n'est pas vide
                        if (TextLen)
                        {

                              // Alloue de la mémoire pour stocker le texte
                              LeText = new char[(TextLen + 2)];
                              // Récupère le texte
                              TextLen = GetWindowText(EditHandle, LeText, (TextLen + 1));
                              // Si aucune erreur et le EditBox contient bien quelque chose
                              if (TextLen)
                              {
                                    // Affiche le texte
                                    MessageBox(MainHandle, LeText, "Voila le texte", MB_OK);

                              }
                              else
                              {
                                    // Erreur lors de la récupération du texte
                                    MessageBox(MainHandle, "Erreur lors de la récupération du texte", "Erreur", MB_OK);

                              }
                              // Libère la mémoire
                              delete [] LeText;

                        }
                        else
                        {
                              // Le EditBox est vide
                              MessageBox(MainHandle, "Le EditBox est vide!", "Edit Vide", MB_OK);

                        }

                  }

            default:  // Par default...
                  return DefWindowProc(hwnd, msg, wParam, lParam);
                  break;

      }

      return 0;

}

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

Conclusion :


Créé et tester sous Dev-C++ 4 only.

En cas de problèmes avec ce code ou autres, laissez moi un message!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Vorms
Messages postés
1
Date d'inscription
dimanche 8 janvier 2006
Statut
Membre
Dernière intervention
16 octobre 2007
-
Salut,
J'aimerais bien que l'editBox soit au dessus des autres objets de la fenêtre.
J'ai mis WS_EX_TOPMOST mais cela ne fait rien.

Et surtout j'ai ajouté WS_EX_DLGMODALFRAME au style pour avoir le bouton ok dans le titre.
Comment je peux faire pour tester si on a appuyer sur le bouton ?

Merci beaucoup pour votre aide

Thierry
krokro6
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007
-
MERCI BEAUCOU P :D
cs_Sanke
Messages postés
3
Date d'inscription
vendredi 26 septembre 2003
Statut
Membre
Dernière intervention
10 juillet 2007
-
NitRic, tu dis qu'on peut mettre 65000 caractères dans une edit box voir une infinité mais peux-tu me dire comment parce que les miennes ne peuvent contenir au maximum que 30000 caractères et ton exemple aussi !!!
Bon je sais pour le moment je n'ai pas 30k à mettre dedans mais si ca arrivait j'aimerais avoir la réponse !!! :)
Merci à toi !!!
NitRic
Messages postés
409
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Pour commencer, ton char de 'reception' est très très limité, 20 caractères, c pas beaucoup même à chier(désolé mais c'est vrai), ensuite pour pouvoir récupérer tout le texte du EditBox il te faut connaître le nombres de caractères ou sinon assigner suffisament de mémoire pour stocker le tout, un EditBox sous 98 et moin peut contenir 65 000 caractères environ et sous 2k et plus c'est presque infini alors ... pour terminer, tout mon code ne montre pas seulement à récupérer le texte d'un EditBox mais aussi à créer une fenêtre, un bouton et un EditBox. Mon code vérifie aussi, comme tu as dis, si le EditBox contient bien quelques choses ou non.

Avant de poster des messages du genre la prochaine fois, repense y à 2 fois ok? Mon code est correct et le tient comme tu as dis ne gère pas les EditBox vide alors la prochaine fois hein! Ho! Aussi, ma fênêtre n'est pas un Dialog ...


~(.:: NitRic ::.)~
pharaonix
Messages postés
20
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
7 août 2004
-
moi jaurai fait la meme chose que toi en trente ligne de moins.
tu declare
char szNOM[20];
puis
GetDlgItemText(hDlg, IDC_EDIT1, szNOM, 7);
pour recuperer le text de ta messagebox
et enfin
MessageBox(0,szNOM,"titre_de_la_messagebox",MB_OK);

enfin voila, trois ligne pour faire la meme action. chuis debutant mais ca marche. mais cest vrai quil ne gere pas leditbox vide
dans ce cas, tu met if szNOM est nulle alors
MessageBox(0,"messagebox vide","titre_de_la_messagebox",MB_OK);

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.