Recupérer la structure CREATESTRUCT
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 :
Code:
1 2 3 4 5 6 7
|
static LPCREATESTRUCT lpCreateStruct;
switch(message)
{
case WM_CREATE:
pCreateStruct = reinterpret_cast<LPCREATESTRUCT>(lParam);
break; |
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.
Par exemple
Code:
1 2 3 4 5
|
case WM_PAINT:
bitmap = LoadBitmap(lpCreateStruct->hInstance,TEXT("IMG_TEST"));
//BeginPaint, DrawState et tout le tralala..
break; |
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.
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.