API Win32, fonction RegisterClass & RegisterClassEx

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 8 févr. 2003 à 15:59
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 9 févr. 2003 à 12:31
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

4 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
8 févr. 2003 à 17:40
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 ?
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
8 févr. 2003 à 17:45
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 ?
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
9 févr. 2003 à 12:31
Merci, c'est super sympa, ca m'a permis de mieux comprendre et de me débloquer.
A+.
Bouba
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
9 févr. 2003 à 12:31
Merci, c'est super sympa, ca m'a permis de mieux comprendre et de me débloquer.
A+.
Bouba
0
Rejoignez-nous