Bonjour,
Je commence à apprendre l'API Windows, notamment grâce aux cours de Jessee Edouard (melem) que je trouve vraiment très bien faits.
J'ai pu remarqué dans d'autres cours, sur ce site comme sur d'autres, pour aller au plus simple, on utilisait souvent une variable globale pour récupérer l'instance du programme quand on en a besoin.
Dans les cours de Melem, il utilise le champ hInstance de la structure CREATESTRUCT passée dans lParam lorsqu'un message WM_CREATE est envoyé. (si j'ai bien compris )
Mais j'ai une question, peut-on récupérer cette structure en dehors du bloc qui traite ce message (dans celui de WM_PAINT par exemple) ?
Pour l'instant ce que j'ai essayé de faire c'est créer un pointeur LPCREATESTRUCT dans la callback et j'ai essayé d'y copier l'adresse de la structure CREATESTRUCT dans le WM_CREATE
Comme ça :
Mais visiblement c'est pas aussi simple car si j'essaie par exemple de récupérer un champ de la structure dans le bloc de WM_PAINT, ça ne marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 static LPCREATESTRUCT lpCreateStruct; switch(message) { case WM_CREATE: pCreateStruct = reinterpret_cast<LPCREATESTRUCT>(lParam); break;
Par exemple
ne fonctionne pas (bitmap est NULL mais pas lpCreateStruct->hInstance) alors que si je remplace la partie en rouge par une globale, ça marche. Je sais bien que je ne dois pas recharger mon image dans le WM_PAINT à chaque fois mais c'est juste un exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 case WM_PAINT: bitmap = LoadBitmap(lpCreateStruct->hInstance,TEXT("IMG_TEST")); //BeginPaint, DrawState et tout le tralala.. break;
Je ne comprends pas bien le mot clé static ou bien la structure est supprimée quand CreateWindow() a retourné et il faut alors en faire carrément une copie ou... ?
C'est pas vraiment un problème car j'en ai pas besoin pour l'instant mais c'est juste une question comme ça qui me tracasse..
Merci à ceux qui voudront bien me répondre.
Partager