SetDlgItemInt à la suite

sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004 - 18 févr. 2004 à 03:41
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004 - 18 févr. 2004 à 15:26
Bonjour,

Après avoir déclaré et affecté une valeur à 2 variables globales,
je crée 1 boites de dialogues avec 2 fenetres edit dans lesquelles j'envoie les valeurs grâce à un SetDlgItemInt.

Pour remplir les 2 boites de dialogues, je fais 2 appels SetDlgItemInt à la suite avec les variables et WM_ID correspondant.
Le 1er appel SetDlgItemInt se passe sans problème : la valeur s'affiche dans la fenetre edit qui lui correspond.
Par contre, jamais la 2ème (valeur qui s'affiche est un zéro).

Pourriez-vous m'expliquer se qui s'est passé et comment y remédier ?
Merci
sacksith

9 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
18 févr. 2004 à 07:55
Bonjour,

Se serai cool de pouvoir voir le source poru voir si il y a une erreur de convertion par exemple, ...

@+
Arnotic
Admin CS, MVP Visual C++
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
18 févr. 2004 à 12:36
Bonjour,
voilà en gros le code :
//Debut code

//variables globales
int var1=5;
int var2=7;
HWND B2;
LRESULT CALLBACK LCB2(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

//Window procedure
LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//...
case WM_PAINT:
B2=CreateDialog(hInst, MAKEINTRESOURCE(B2BOX), CadreD, (DLGPROC)LCB2);
ShowWindow(B2, 1);
}

LRESULT CALLBACK LCB2(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch( uMsg )
{
case WM_INITDIALOG :
SetDlgItemInt(hDlg, IDC_VAR1, var1, false);
SetDlgItemInt(hDlg, IDC_VAR2, var2, false);

// C'est là que ça me pose problème : le 2e SetDlgItemInt, celui avec var2, ne s'affiche pas dans la fenetre edit.
// Et quand j'inverse, que je met var2 en premier, c'est var1 qui ne s'affiche plus. Il doit y avoir un problème de réinitialisation de SetDlgItemInt, plus qu'un problème de d'erreur de conversion.
//Fin code

@+
sacksith
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
18 févr. 2004 à 12:45
Bonjour,

Si tu veux mettre des les valeurs 5 et 7 n'utilise pas SetDlgItemInt car il va prendre la correspondance en ascii.

Utilise plutôt :

char szbuff[]='5';
SetWindowText(GetDlgItem(hDlg, IDC_VAR1), (char*)&szbuff);

szbuff = '7';
SetWindowText(GetDlgItem(hDlg, IDC_VAR2), (char*)&szbuff);

De cette manière c'est plus juste. Tu mets réellement la chaine 5, et 7 dans des textbox.

@+
Arnotic
Admin CS, MVP Visual C++
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
18 févr. 2004 à 13:19
Salut,
et tout d'abord merci pour la rapidité de tes réponses !

[...]
Oui mais voilà, si je veux justement afficher des valeurs entières.
En fait 5 et 7 sont des valeurs par défaut qui doivent s'afficher à l'ouverture de la fenetre mais l'utilisateur doit pouvoir les modifier.
d'où l'utilisation d'une fenetre edit.

dom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
18 févr. 2004 à 13:30
Bonjour,

Mais l'utilisateur peut modifier les valeurs même en utilisant SetWindowText.

Si tu veux récupérer les valeurs tu peux faire :

GetWindowText(GetDlgItem(hDlg, IDC_VAR1), (char*)&szbuff);
int var1 = atoi((char*)&szbuff);

Tu vois le truc ?
@+
Arnotic
Admin CS, MVP Visual C++
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
18 févr. 2004 à 14:02
Hi,

>>GetWindowText(GetDlgItem(hDlg, IDC_VAR1), (char*)&szbuff);
>>int var1 = atoi((char*)&szbuff);

Ok, je vois. Et je vais probablement garder cette solution.
Mais quand même, saurais-tu pourquoi on ne peut pas utiliser 2 appel à SetDlgItemInt à la suite ?

Dans le MS W32 reference, il est question de WM_SETTEXT.
Mais j'ignore comment l'utiliser. Si tu peux m'éclaircir.

@+
dom
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
18 févr. 2004 à 14:11
Bonjour,

Pour WM_SETTEXT c'est la même chose sauf que tu utilises

SendMessage(handle, WM_SETTEXT, NULL, (char*)&szbuff);

et pour récupérer

SendMessage(handle, WM_GETTEXT, 1024, (char*)&szbuff); et szbuff contient ta chaine.

(1024 = nombre maximum d'octects à copier)

Bref, SetWindowText et GetWindowText sont des macro de SendMessage et sont plus direct à utiliser comme tu veux c'est la même chose :)

@+
Arnotic
Admin CS, MVP Visual C++
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
18 févr. 2004 à 14:16
Salut,
Merci Arnotic pour tes éclaircissements. Je vais pouvoir continuer avec ce que j'ai.
dom
0
sacksith Messages postés 13 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 25 avril 2004
18 févr. 2004 à 15:26
Salut,

Après modifications et tests, voilà ce que je dois écrire pour pouvoir utiliser SetDlgItemInt.

//debut code
// Je garde tout ce qui précède, cf. posts précédents

LRESULT CALLBACK LCB2(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
unsigned var11=var1;
unsigned var22=var2;

switch(uMsg)
{
case WM_INITDIALOG :
SetDlgItemInt(hDlg, IDC_EVAPEDIT, var11, false);
SetDlgItemInt(hDlg, IDC_DIFFEDIT, var22, false);

//fin code
En gros, je dois créer des variables locales (var11 et var22) que j'initialise avec la valeur des variables globales var1 et var2.

C'est marrant de ne pouvoir utiliser 2 variables globales dans des SetDlgItemInt à la suite.

dom
PS je me demande toujours s'il n'existe pas une sorte de réinitialisation de SetDlgItemInt de manière à y appeler non pas des variables locales mais globales.
0
Rejoignez-nous