API Win32, fonction RegisterClass & RegisterClassEx

Signaler
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
Bonjour, je débute en programmation Windows, je désire créer deux fenêtres, une étendue et une normal. Mais je renconre une erreur après avoir appelé la deuxième fonction RegisterClass ou RegisterClassEx. Voici mon code ce sera plus explicite.

int APIENTRY WinMain(HINSTANCE InstanceCourante, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
WNDCLASS wnd;
WNDCLASSEX wndEx;
MSG msg;
HWND FenetreText,FenetreParent;

wnd.style = CS_VREDRAW | CS_HREDRAW;
wnd.lpfnWndProc = (WNDPROC)WndProc;
wnd.lpszClassName = "Texteditor";
wnd.lpszMenuName = "Texteditor";
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hbrBackground = (HBRUSH)(COLOR_WINDOW-1);
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
wnd.hIcon = LoadIcon(InstanceCourante, "Texteditor");
wnd.hInstance = InstanceCourante;

if(!RegisterClass(&wnd))
{
MessageBoxEx(NULL,"Error Registering wnd Class!","Error",MB_OK|MB_ICONERROR,0x040c);
return false;
}

wndEx.cbSize = sizeof(WNDCLASSEX);
wndEx.style = CS_VREDRAW | CS_HREDRAW;
wndEx.lpfnWndProc = (WNDPROC)WndProc;
wndEx.cbClsExtra = 0;
wndEx.cbWndExtra = 0;
wndEx.hInstance = InstanceCourante;
wndEx.hIcon = LoadIcon(InstanceCourante, "Texteditor");
wndEx.hCursor = LoadCursor(NULL,IDC_ARROW);
wndEx.hbrBackground = (HBRUSH)(COLOR_WINDOW-1);
wndEx.lpszMenuName = "Texteditor";
wndEx.lpszClassName = "Texteditor";
wndEx.hIconSm = LoadIcon(InstanceCourante, "Texteditor");

if(!RegisterClassEx(&wndEx))
{
MessageBoxEx(NULL,"Error Registering wndEx Class!","Error",MB_OK|MB_ICONERROR,0x040c);
return false;
}
//Voila, ici ce message d'erreur s'affiche, je ne comprends vraiment pas pourquoi !

Ce problème se pose aussi si j'inverse l'ordre des définitions des structures wndEx et wnd ainsi que les appels de RegisterClassEx et RegisterClass dans ce cas c'est wnd qui pose un problème.
Voila, merci de m'expliquer pourquoi j'ai une telle erreur a l'execution du prog et comment éviter ceci ?
Bouba
A voir également:

4 réponses

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Salut,

Pour commencer, la méthode RegisterClass() est une fonction obsolète, dépréciée par la fonction RegisterClassEx(). Donc pas la peine d'utiliser les deux fonctions, seule RegisterClassEx() suffit.

Ensuite, si l'enregistrement de ta deuxième classe ne fonctionne pas, c'est parce que tu donnes le même nom ("Texteditor") aux deux classes, nom qui doit être unique.

Mais je vois pas bien ce que tu veux faire, pourquoi deux fenêtres aux caractèristiques identiques ?
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
Normalement on utilise RegisterClass(Ex) une seule fois par application.
Tu dois confondre Classe de Fenêtre (une struct) et Fenêtre

il est recommandé d'enregistrer une Classe de fenêtre pour que l'OS associe les messages concernant ta fenêtre à la WindowProcedure déclarée dans la WndClass
Il est possible alors de créer plusieurs fenêtres de la même classe

En tous cas, n'enregistre JAMAIS dans Windows deux classes ayant le même nom (ex : TextEditor)
TextEditorEx ?
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Merci, c'est super sympa, ca m'a permis de mieux comprendre et de me débloquer.
A+.
Bouba
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Merci, c'est super sympa, ca m'a permis de mieux comprendre et de me débloquer.
A+.
Bouba