[WIN32] Creer plusieurs fenetre sans utiliser le .rc

kinjiro Messages postés 7 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 17 avril 2006 - 19 janv. 2006 à 11:15
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 19 janv. 2006 à 12:42
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 janv. 2006 à 11:48
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++
0
kinjiro Messages postés 7 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 17 avril 2006
19 janv. 2006 à 12:19
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.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 janv. 2006 à 12:40
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;<
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
19 janv. 2006 à 12:42
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;<
0
Rejoignez-nous