Se connecter / S'enregistrer
Votre question

Utilisation de GetDlgItemInt()

Tags :
  • Programmation
Dernière réponse : dans Programmation
24 Septembre 2004 18:55:51

Quelqu'un pourrait me dire comment utilise-t-on la fonction GetDlgItemInt() ?

Fonction permettant de récupérer une valeur entrée dans un Edit Box...

Merci pour votre aide :-D

Autres pages sur : utilisation getdlgitemint

24 Septembre 2004 19:17:31

Ci-dessous copie d'une aide en ligne un peu ancienne (fait partie de l'aide de Delphi version 2) :

The GetDlgItemInt function translates the text of a specified control in a dialog box into an integer value.

UINT GetDlgItemInt(

HWND hDlg, // handle to dialog box
int nIDDlgItem, // control identifier
BOOL* lpTranslated, // points to variable to receive success/failure indicator
BOOL bSigned // specifies whether value is signed or unsigned
);
Parameters

hDlg

Handle to the dialog box that contains the control of interest.

nIDDlgItem

Dialog item identifier that specifies the control whose text is to be translated.

lpTranslated

Points to a Boolean variable that receives a function success/failure value. TRUE indicates success, FALSE indicates failure.
This parameter is optional: it can be NULL. In that case, the function returns no information about success or failure.

bSigned

Specifies whether the function should examine the text for a minus sign at the beginning and return a signed integer value if it finds one. TRUE specifies that this should be done, FALSE that it should not.

Return Value

If the function succeeds, the variable pointed to by lpTranslated is set to TRUE, and the return value is the translated value of the control text.
If the function fails, the variable pointed to by lpTranslated is set to FALSE, and the return value is zero. Note that, since zero is a possible translated value, a return value of zero does not by itself indicate failure.
If lpTranslated is NULL, the function returns no information about success or failure.

If the bSigned parameter is TRUE, specifying that the value to be retrieved is a signed integer value, cast the return value to an int type.

Remarks

The GetDlgItemInt function retrieves the text of the given control by sending the control a WM_GETTEXT message. The function translates the retrieved text by stripping any extra spaces at the beginning of the text and then converting the decimal digits. The function stops translating when it reaches the end of the text or encounters a nonnumeric character.
If the bSigned parameter is TRUE, the GetDlgItemInt function checks for a minus sign (-) at the beginning of the text and translates the text into a signed integer value. Otherwise, the function creates an unsigned integer value.

The GetDlgItemInt function returns zero if the translated value is greater than INT_MAX (for signed numbers) or UINT_MAX (for unsigned numbers).
24 Septembre 2004 19:23:07

Citation :

thewolf a écrit :
The GetDlgItemInt function translates the text of a specified control in a dialog box into an integer value.


Mais euh si je traduis bien c'est pour traduire un texte en une valeur "int"...

Moi tout ce que je veux, c'est pouvoir prendre la valeur (chiffre) que l'utilisateur aura entré dans une edit box et ensuite grace à cette valeur, effectuer quelques calculs...

J'espère avoir été compréhensible, je vous remercie pour votre aide :-D
Contenus similaires
24 Septembre 2004 19:35:55

c'est pas scanf() qu'il faut utiliser ?
24 Septembre 2004 19:59:41

Ca c'est pour de la programmation mode console...

Moi je dois utiliser la fonction GetDlgItemInt() pour la programmation en mode API Win 32
25 Septembre 2004 02:07:45

Personne ne sait comment on utilise cette fonction de malheur ? :-D
25 Septembre 2004 18:19:41

Tout d'abord, quel langage utilises-tu ?

Si tu veux programmer au niveau de l'API win32, c'est toujours très compliqué et ce que je t'ai indiqué (malheureusement en anglais car je n'ai pas de version française) est bien le mode d'emploi de GetDlgItemInt().

Comme son nom l'indique, elle sert à :
Get =>Retrouver, obtenir
DlgItem=>depuis un élément (item) de boîte de dialogue (qui peut être par exemple un EditBox)
Int=>une valeur entière sasie par l'utilisateur

Comme indiqué dans l'aide, cette fonction récupère tout d'abord le contenu sous forme de texte puis le transforme en entier, renvoie éventuellement une erreur si le texte saisi ne correspond pas à un entier ...

Tu peux aussi utiliser GetDlgItemText qui renvoie le texte saisi, à charge ensuite pour toi de le transformer en nombre en testant pour toutes les erreurs possibles ...
25 Septembre 2004 19:38:49

Oui mais que mettre entre les parenthèses... Je suppose qu'il faut que j'indique l'editbox dans laquelle je dois aller récupérer la valeur, stocker cette valeur dans une varible pour la modifier... Mais comment le faire ?
25 Septembre 2004 20:02:28

La "syntaxe" dépend du langage utilisé.

Je repose ma question : quel langage utilises-tu ?
26 Septembre 2004 01:09:49

désolé, je programme en API Win 32... je crois que c'est ca ^^
26 Septembre 2004 01:26:16

en fait je viens de recevoir un code d'exemple :

Citation :
int number = GetDlgItemInt(hwnd,IDC_NUMBER,NULL,FALSE);


Mais je me demande : hwnd c'est l'handle de la fenêtre ou celle de l'editbox ( puisque je suppose qu'il faut que je précise la editbox dans laquelle récupérer la valeur )

et IDC_NUMBER : C'est quoi ? ( Je ne comprend pas trop bien à quoi il sert )
26 Septembre 2004 10:44:02

Citation :

désolé, je programme en API Win 32... je crois que c'est ca ^^

API = application program interface
l'API win32 est donc l'interface qui permet de communiquer avec windows 32 bits. Cela se compose de milliers de fonctions dont par exemple GetDlgItemInt ...

Pour programmer, tu utilises forcément un langage (C, Pascal, Basic, ...) chacun ayant sa propre syntaxe et un programme appelé compilateur qui transforme ton code source (qui est un fichier texte) en un fichier exécutable (comme monprog.exe).

L'exemple que tu donnes (int number = GetDlgItemInt(hwnd,IDC_NUMBER,NULL,FALSE);) correspond à l'appel dans un certain langage (en Pascal par exemple, il faudrait écrire ":=" au lieu de "=") de la fonction, conformément à l'aide en ligne que je t'ai déjà indiquée et que je t'invite à relire attentivement (ci-dessous explications suivant traduction de cette aide en ligne si tu as des problèmes en anglais):

hwnd : "handle to dialog box" (sous windows, toute fenêtre est identifiée par un "handle" qui est en fait en entier long) = identificateur du dialogue dans lequel se trouve ton edit box
IDC_NUMBER : "control identifier" identifie le contrôle dans lequel se trouve le texte à traduire en nombre entier
NULL : ici on met normalement un pointeur sur une variable booléenne qui renvoie TRUE en cas de succès, FALSE en cas d'erreur. Ce paramètre étant optionnel, on peut mettre NULL, dans ce cas, aucune information d'erreur n'est renvoyée.
FALSE : ici on met TRUE si on attend une valeur signée c'est-à-dire qui peut être négative, FALSE sinon.

Enfin, en écrivant "int number = ...", tu assignes la valeur de retour de la fonction à ta variable number déclarée comme entier (int = integer). Cette valeur de retour est le nombre saisi dans le contrôle en cas de succès, 0 sinon ...
26 Septembre 2004 12:59:46

Slt a Ts,

Voici la definition de 'GetDlgItemInt' dans msdn :
The GetDlgItemInt function translates the text of a specified control in a dialog box into an integer value.

Donc il faut que ta fenetre soit de type dialogbox et tu vas simplement recupérer le contenu d'un item et le transformer en entier.

Etant donné que windows fonctionne essentiellement avec des messages je te conseille ceci pour récupérer la donnée d'un editbox :

char szBuf[256];
SendMessage(hwnd_editbox,WM_GETTEXT,sizeof(szBuf),szBuf);

Le type de donnée est char, reste a toi ensuite à convertir en entier ou long ...

Si tu as crée ton editbox par la fonction CreateWindow(.. alors tu auras l'handle de l'editbox sinon si tu l'as crée avec un editeur de ressource (fichier rc) tu peux utiliser GetDlgItem pour récupérer cet handle.

Pour finir,

Le message WM_GETTEXT est donc pour récuperer une donnée.

Dans le cas ou c'est pour afficher/ecrire une donnée dans l'editbox :
SendMessage(hwnd_editbox,WM_SETTEXT,0,szBuf);


J'espere avoir pu t'aider Neon


+++







26 Septembre 2004 13:22:05

3psilon mon sauveur :-D

Mais dis moi... Je veux stocker cette valeur sous une variable de type float... Je me souviens plus comment passer de char vers float... =(
Tu peux m'expliquer s'il te plait ? :-D
26 Septembre 2004 19:51:04

bon j'ai trouvé/utilisé la première de mes solutions ( a = GetDlgItemInt(...); )

Cela fonction mais les nombres négatifs ne sont pas pris en compte, pourtant j'ai pris soin de mettre "TRUE" ( à la fin de la fonction ) pour qu'il vérifiesi le nombre est négatif ou pas, mais rien à faire toujours ce chiffre bizare affiché ( 4294967296.000 ) !
27 Septembre 2004 18:10:46

Ben, je ne sais pas trop ...

N'oubli pas que un entier vas de -32565 à 32565
et que un entier non signé vas de 0 à 64535

Je n'ai plus les chiffres exact en tete.

Enfin voulou
27 Septembre 2004 19:25:03

Bah mes valuers sont définies en float.. ( j'ai même essayé en double )

Je ne comprend pas...
28 Septembre 2004 12:56:51

Slt,


C sur que si tu utilises GetDlgItemInt pour placer ce qu'elle te retourne dans un float, je pense qu'il va y avoir probleme etant donné que cette fonction te retourne un entier.... bon je dis ca mais je n'ai pas testé.


28 Septembre 2004 17:12:48

Bah moi j'ai testé ! Cela, apparemment, ne fonctionne pas ! Donc il faut, si je comprends bien, trouver un autre moyen pour programmer ca !

Y en a-t-il un ?

Ce que tu ma mis avec

Citation :
char szBuf[256];
SetWindowText(hwnd_editbox,WM_GETTEXT,sizeof(szBuf),szBuf);


Pourrais-tu me donner plus de précision ? Est-ce que cela fonctionnera ?
28 Septembre 2004 19:00:56

Slt

Citation :
SetWindowText(hwnd_editbox,WM_GETTEXT,sizeof(szBuf),szBuf);


Attention ce n'est pas SetWindowText mais SendMessage.

Oui cela fonctionnera en 2 étapes.

// Tu déclares tes variables
char szBuf[256];
float fval;
int iNbCarac;


1/ tu récupéres le contenu de l'editbox :

//SendMessage te renverra le nombre de caractéres copiés dans le buffer szBuf.
//szBuf contiendra le texte de l'editbox.

iNbCarac=SendMessage(hwnd_editbox,WM_GETTEXT,sizeof(szBuf),szBuf);

//Si le texte contenu dans l'editbox dépasse 256 il sera tromqué.

Voir : msdn _ WM_GETTEXT

2/Convertir la chaine de caracteres dans le format que tu désires :
// atof converti un chaine de caractere en float
fval = atof(szBuf);

Voir : msdn - atof

Ce qu'il faut voir c'est que l'api SendMessage est juste une api qui permet d'envoyer des messages aux applications/systeme. L'important est le choix du message (2e parametre) et biensur les parametres que prennent ces messages (3e et 4e parametres de SendMessage).

J'espere que j'ai été assez explicite.


+++

29 Septembre 2004 22:27:50

Je débute en C++ et jamais programmer en C et avc des API.
Bref je parle sans connaissance de cause, mais en c++
si je fait un code comme la :


#include <iostream.h>
int main( int argc, char ** argv )
{
int a;
cout << a;
}

la a ne va pas être 0 bref j'essaye d'aider meme si sans doute tu sais tout ca ...


DeefeR
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS