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!
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.