Ce code explique la création d'une fenêtre et d'un controle commun de type RichEdit. Il est facilement adaptable aux autres controles communs, pour plus d'informations allez voir "Common Controls" dans win32.hlp
PS: j'ai mis des commentaires cette fois ;op
Source / Exemple :
// fichier inclus pour les applications windows
#include <windows.h>
// fichier contenant les définitions des contrôles communs
#include <commctrl.h>
// fichier contenant les définitions spécifiques au richedit
#include <richedit.h>
// définition de la classe de la fenêtre
#define WND_CLASS "GWIN32_RICHEDIT"
// définition de l'ID du richedit
#define ID_RICHSAMPLE 1
// handle de la fenêtre
HWND wndMain = NULL;
// handle du richedit
HWND edtSample = NULL;
// procédure de gestion des messages de la fenêtre
LRESULT CALLBACK wndMainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CLOSE:
// fermeture de la fenêtre : quitter l'application
PostQuitMessage(0);
return 0;
default:
// autres messages : appeler le gestionnaire par défaut
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
// point d'entrée de l'application
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// variable utilisée pour le chargement de la dll permettant l'utilisation des richedit
HINSTANCE richDll = NULL;
// classe de la fenêtre
WNDCLASSEX wc;
// messages envoyés par windows
MSG msg;
// initialisation de la classe de la fenêtre
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = wndMainProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) COLOR_WINDOW;
wc.lpszMenuName = NULL;
wc.lpszClassName = WND_CLASS;
wc.hIconSm = NULL;
// enregistrement de la classe
RegisterClassEx(&wc);
// création de la fenêtre
wndMain = CreateWindowEx(WS_EX_APPWINDOW, WND_CLASS, "Test : Création d'un richedit", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, HWND_DESKTOP, NULL, hInstance, NULL);
// chargement des contrôles communs
InitCommonControls();
// chargement du contrôle richedit
richDll = LoadLibrary("RICHED32.DLL");
// création du richedit
edtSample = CreateWindowEx(0, "RichEdit", "Ceci est bien un RichEdit !", WS_CHILD | WS_BORDER | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_WANTRETURN | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 10, 10, 300, 300, wndMain, (HMENU) ID_RICHSAMPLE, hInstance, NULL);
// affichage de la fenêtre
ShowWindow(wndMain, nCmdShow);
// mise à jour de la fenêtre
UpdateWindow(wndMain);
// boucle de traitement des messages
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// destruction de la fenêtre (facultatif)
// note : la fenêtre détruit automatiquement toutes ses fenêtres enfants (WS_CHILD)
DestroyWindow(wndMain);
// déchargement du contrôle richedit
FreeLibrary(richDll);
// renvoyer le code de sortie à windows
return msg.wParam;
}
Conclusion :
Il faudrait vérifier à chaque chargement de librairie/création de fenetre si tout s'est bien passé (valeur de retour != NULL)...
Les messages envoyés par le richedit peuvent etre traités via les messages WM_COMMAND et WM_NOTIFY, voir win32.hlp pour plus de détails (ou mon telnet graphique en C, qui gère des Edit multilignes normaux, via WM_COMMAND)
Bon courage ;o)
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.