[WIN32] Creer plusieurs fenetre sans utiliser le .rc

Signaler
Messages postés
7
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 avril 2006
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Bonjour tout le monde.
Je cherche a ouvrir une autre fenetre (en utilisant l'api win32).
J'ai en faite un boutton qui renvoi sur une fonction test()
Dans cette fonction j'aimerai ouvrir une fenetre.
J'ai regardé sur google et ici meme mais je n'ai pas trouvé mon bonheur.
Dans ma fonction test je fait
HWND fenetre = CreateWindowEx(....);
ShowWindow(fenetre, SW_SHOW);
Mais cela ne marche pas.
Si quelqu'un pouvait m'aider, merci d'avance.

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Faut enregistrer tes classes de fenêtre avec RegisterClassEx avant de vouloir créer la fenêtre.
Tu peux aussi utiliser une dialog sans rc par DialogBoxIndirect[Param], il y a exemples en sources sur cppfrance.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
7
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 avril 2006

merci de ta réponse.
Mais le probleme c'est que j'ai beau retourner dans tout les sens l'initialisation d'un class avec RegisterClassEx ca ne marche jamais.
Voila ce que j'ai mi comme code:

char szClassName[ ] = "previewer";
MSG messages;
WNDCLASSEX incl;

incl.hInstance = NULL;
incl.lpszClassName = szClassName;
incl.lpfnWndProc = ChildProc;
incl.style = CS_DBLCLKS;
incl.cbSize = sizeof (WNDCLASSEX);

if (!RegisterClassEx(&incl))
MessageBox(NULL, "Probleme lors du RegisterClassEx", "Erreur", MB_OK);
return;

HWND test = CreateWindowEx(0, "test", "Preview", WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
hwnd, NULL, NULL, NULL);

ShowWindow (hwnd, SW_SHOW);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

Si quelqu'un pouvait encore me donner un petit coup de main s'il vous plait.
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Ah ça quand on comprend pas ce qu'on fait, c'est sur qu'on y arrivera jamais



L'instance dans la structure WNDCLASS, c'est pas pour rien qu'on l'a mise !

Donc il faut l'initialiser.

Ensuite il faut renseigner TOUS les champs de WNDCLASS sinon l'enregistrement ne se fera pas !

Donc soit tu renseignes tous, soit tu fais au début :

ZeroMemory(&incl, sizeof(WNDCLASS));



Et ensuite CreateWindowEx le 2ème paramètre et la class de fenêtre et non le titre !

Donc tu dois passer la chaine associée à ta classe, autrement dit
preview et pour passer 0 comme premier param, autant utiliser la
fonction CreateWindow qui revient au même ;)

if(!Meilleur("Joky")) return ERREUR;<
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
if (!RegisterClassEx(&incl))

MessageBox(NULL, "Probleme lors du RegisterClassEx", "Erreur", MB_OK);

return;



Si tu mets pas non plus tes accolages car plus d'une instruction, ça ne marchera pas non plus



C'est soit tu mets des acolages, soit t'en mets pas mais seulement quand il n'y a qu'une seule instruction à la suite

if(!Meilleur("Joky")) return ERREUR;<