Un fenêtre toujours à NULL

Résolu
cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 - 8 avril 2007 à 19:21
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 9 avril 2007 à 01:40
Bonjour,

Je cré une fenêtre avec des donnés dont le debugeur me dit qui sont valide, mais la fonction CreateWindowEx me retourne toujours NULL, est-ce que quelqu'un pourrait m'expliquer pourquoi? Voici une partie du code:

WNDCLASSEX myclass;
myclass.cbSize = sizeof(WNDCLASSEX);
myclass.style = CS_HREDRAW | CS_VREDRAW;
myclass.lpfnWndProc = WndProc;
myclass.cbClsExtra = 0;
myclass.cbWndExtra = 0;
myclass.hInstance = this->hInstance;
myclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
myclass.hCursor = LoadCursor(NULL, IDC_ARROW);
myclass.hbrBackground= reinterpret_cast<hbrush>(COLOR_WINDOW+1);
myclass.lpszMenuName = NULL;
myclass.lpszClassName= "class2";
myclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

if ( !RegisterClassEx(&myclass) )
{
MessageBox(NULL, "Impossible de créer la classe.", "Erreur", MB_OK | MB_ICONERROR);
}

this->hWnd = CreateWindowEx(this->exStyle, "class2", this->title, this->style, \
this->size.left, this->size.top, this->size.right - this->size.left, this->size.bottom - this->size.top, \
NULL, NULL, this->hInstance, 0);

Merci beaucoup

----------------
eXon</hbrush>

8 réponses

cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 1
8 avril 2007 à 21:12
Finalement j'ai trouvé le problème. Il était simplement dans mon callback qui retournait toujours 0 au lieu du DefWindowProc.

----------------
eXon
3
cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 1
8 avril 2007 à 19:23
Ouf, voici mon code édité avec un peu de HTML:


WNDCLASSEX myclass;

myclass.cbSize = sizeof(WNDCLASSEX);

myclass.style = CS_HREDRAW | CS_VREDRAW;

myclass.lpfnWndProc = WndProc;

myclass.cbClsExtra = 0;

myclass.cbWndExtra = 0;

myclass.hInstance = this->hInstance;

myclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

myclass.hCursor = LoadCursor(NULL, IDC_ARROW);

myclass.hbrBackground= reinterpret_cast<hbrush>(COLOR_WINDOW+1);

myclass.lpszMenuName = NULL;

myclass.lpszClassName= "class2";

myclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);


if ( !RegisterClassEx(&myclass) )

{

MessageBox(NULL, "Impossible de créer la classe.", "Erreur", MB_OK | MB_ICONERROR);

}


this->hWnd = CreateWindowEx(this->exStyle, "class2", this->title, this->style, \

this->size.left, this->size.top, this->size.right - this->size.left, this->size.bottom - this->size.top, \

NULL, NULL, this->hInstance, 0);

----------------
eXon</hbrush>
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 avril 2007 à 20:51
myclass.style = ???

ciao...
BruNews, MVP VC++
0
cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 1
8 avril 2007 à 21:00
myclass.style = CS_HREDRAW | CS_VREDRAW;

C'est clair dans le code me semble. J'ai toujours fait mes fenêtres windows avec ca et ca a toujours marché.

----------------
eXon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 avril 2007 à 21:03
OUPS, je ne l'avais pas vu.

this->hInstance, tu as vérifié que c'est bon ?

ciao...
BruNews, MVP VC++
0
cs_eXon Messages postés 166 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 8 avril 2007 1
8 avril 2007 à 21:04
Ouais et ce l'est bien. J'ai même recopié mon code dans un nouveau projet et il retourne toujours NULL.

----------------
eXon
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 avril 2007 à 21:14
Est-ce que this->style contient  WS_CHILD? Si oui il faut spécifier le paramètre hWndParent de CreateWindowEx

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 avril 2007 à 01:40
Salut,
Pour que la fenêtre soit créée, la procédure WndProc() doit retourner 1 en réponse au message WM_NCCREATE. Tu peux faire dans ton code:
case WM_NCCREATE:
    return 1;
Cette solution est péférable si tu veux éviter l'appel à DefWindowProc().
0
Rejoignez-nous