DIALOGBOXINDIRECT AVEC DES CONTROLES (WIN32)

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
- 4 juin 2006 à 23:11
deck_bsd
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
- 10 juin 2006 à 14:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37949-dialogboxindirect-avec-des-controles-win32

deck_bsd
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
10 juin 2006 à 14:28
Merci bien pour l'explication :D
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
10 juin 2006 à 10:54
Dans MSDN c'est écrit que les DLGITEMTEMPLATES doivent être alignées sur des DWORD (Each DLGITEMTEMPLATE structure in the template must be aligned on a DWORD boundary).
Or le premier param est aligné sur un WORD, mais pas forcément un DWORD
Si tu me demandes ce que signifie aligné sur un DWORD, ca veut juste dire que l'adresse est un mutliple de la taille d'un DWORD, soit 4
Donc, si (lpw & 3) est différent de 0, ca veut dire que c'est pas un multiple de 4 (les multiples de 4 on leur deux bits de poids faible à 0). Dans ce cas je l'incrémente (ce qui ajoute en fait deux au pointeur, qui est maintenant aligné sur un DWORD).
deck_bsd
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
10 juin 2006 à 09:31
Yop vecchio, j'ai regardé ton utilisation de DLGITEMTEMPLATE ca ressemble fort a DLGTEMPLATE mais je ne comprend pas cece :
if((LPARAM)lpw & 3) lpw++; // Aligner sur un DWORD

A quoi cella sert-il (et ne me dit pas a aligner sur un DWORD mdr :) ).
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
7 juin 2006 à 16:29
Dommage que les fenêtres ne supportent pas cette méthode. On est obligés de passer par CreateWindow().
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
14
7 juin 2006 à 16:20
Merci por ces précisions.
Pour modifier la police de tous les controles enfants, une simple petite boucle do while() suffit. J'ai utilisé cette astuce dans mes dernières sources déposées sur le site. Mais ta solution doit être meilleure car plus rapide.
C'est vrai que CreateWindow() travaille en pixels. Je contourne le problème dans une DialogBox en récupérant le clientrect(qui est en pixels) de la boite de dialogue et positionner les controles dans ce rectangle.
A propos de GetDlgItem(), si on utilise beaucoup les HWNDs, on peut les récupérer une seule fois pendant WM_INITDALOG. La boite s'affiche un peu moins vite mais c'est mieux que CreateWindow().
10/10
Afficher les 20 commentaires