Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Caractères perdus dans un CEdit ?

2 réponses
Avatar
No_Name
Bonjour,

Dans une application MFC C++ VS2005, j'ai une série de CEdit qui me
servent pour saisir des informations.

Comme indiqué dans un message précédent, je voudrais que l'on puisse
saisir 2 chiffres dans chaque CEdit, et que l'on passe autmatiquement à
l'Edit suivant quand ces deux caractères ont été saisis.

J'ai donc créé une classe dérivée de CEdit, dans laquelle je peux gérer
la saisie de la façon suivante :

BOOL Mon_Edit::PreTranslateMessage(MSG* pMsg)
{
CString sel;
int monID, nouvelID;

if(pMsg->message == WM_KEYDOWN)
{

// On récupère le pointeur sur l'interface
Interface_BBB_1 *parent = (Interface_BBB_1 *)GetParent();

// On récupère l'ID du controle en cours
monID = GetDlgCtrlID();
Mon_Edit *ed = (Mon_Edit *)parent->GetDlgItem(monID);

// Si on a saisi 2 caractères, on passe à l'edit suivant
ed->GetWindowText(sel);
if (sel.GetLength() ==1)
{
nouvelID = monID +1;
ed = (PMU_Edit *)parent->GetDlgItem(nouvelID);
if (ed != NULL)
ed->SetFocus();
}
}

return CEdit::PreTranslateMessage(pMsg);
}

Cela fonctionne bien, sauf que le test sur le nombre de caractères se
fait sur (sel.GetLength() ==1) au lieu de (sel.GetLength() ==2)

De plus, dans la fenêtre (CDialog) qui contient ces Edits, j'ai des
fonctions qui testent le contenu de l'Edit après la saisie, sur
l'événement ON_EN_KILLFOCUS. Et dans ces fonctions, je constate que
l'appel de GetWindowTextA() sur mes Edit ne retourne qu'un caractère,
au lieu des 2 que j'y avais saisis ...

J'imagine qu'il y a un lien entre le test (sel.GetLength() ==1) et le
fait que la fonction GetWindowTextA() me renvoie un seul caractère,
mais je ne comprend pas où est passé le second caractère que j'ai
pourtant bel et bien saisi lui aussi ...

Merci de vos conseils sur ce point.

2 réponses

Avatar
No_Name
Evidement, dans le code ci-dessus, Mon_Edit et PMU_Edit sont la même
classe (j'ai oublié de remplacer l'un par l'autre lors du copier/coller
du code).
Avatar
No_Name
Je pense avoir réglé le problème en déclenchant l'appel de mes
fonctions de vérification du contenu des Edits sur l'événement
ON_EN_UPDATE plutôt que ON_EN_KILLFOCUS.

Merci de m'avoir lu ! :-)