Bonjour à tous,
Je suis en train d'essayer de manipuler (pour la première fois), les extra bytes d'une classe et je dois avouer que le résultat n'est pas très convaincant.
Tout d'abord, je ne suis pas sur d'avoir compris le principe : si on donne 10 bytes en extra à la WNDCLASSEX, quand on utilise SetWindowLong, le premier LONG sera à l'adresse 0 (nIndex, argument 2 = 0). Le second, vu qu'un LONG fait 32 bits sera donc à 4 octets/bytes, n'est ce pas???
Pourtant, j'ai une fonction qui crée et enregistre ma classe. Elle prend en paramètre l'Instance du programme, vu que cette class est censée afficher un tableau elle prend en argument 2 et 3 les nombres de lignes et de colonnes sous forme de LONG.
Ensuite elle prend le handle de la fenetre où afficher le tableau.
J'utilise la fonction SetWindowLong et elle me retourne 0!!
Ca va peut être vous paraitre évident, peut être que mon erreur va vous sauter aux yeux, mais moi je ne vois pas pourquoi elle me renvoie 0, signe qu'elle à échoué.
Voici ma fonction :
Merci d'avance de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void creerTableau(HINSTANCE hInstance,LONG noLignes,LONG noColonnes, HWND fenetre) { //On crée et enregistre la WndClassEx cTableau WNDCLASSEX cTableau; //On donne les attributs de la classe cTableau.cbSize=sizeof(WNDCLASSEX); cTableau.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; cTableau.lpfnWndProc=procedure; //On ajoute des octets en ++ à la classe pour les paramètres du tableau cTableau.cbClsExtra=10; cTableau.cbWndExtra=0; cTableau.hInstance=hInstance; cTableau.hIcon=LoadIcon(NULL, IDI_APPLICATION); cTableau.hCursor = LoadCursor (NULL, IDC_IBEAM); cTableau.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(200,200,200)); cTableau.lpszMenuName = NULL; cTableau.lpszClassName = "TABLEAU"; cTableau.hIconSm = 0; //Si l'enegistrement de la classe échoue, on ferme RegisterClassEx(&cTableau); //On enregistre le nombre de lignes spécifiées dans la WndClass if(!SetClassLong(fenetre,0,noColonnes))exit(0); }
Spartan03
Partager