demar016
Messages postés6Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 8 décembre 2004
-
7 déc. 2004 à 13:22
demar016
Messages postés6Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 8 décembre 2004
-
8 déc. 2004 à 13:18
pour ca j'utilise les tris focntions ci-dessous:
GetNextDlgGroup
GetDlgCtrID
GetDlgItemText
mais je n'arrive pas à récupérer l'identifiant du controle qui me permettrait d'avoir le texte correspondant.
en fait le next ne marche pas, il reste bloquer sur l'identifiant du bouton.
while(j<20)
{
lhwnd_control = GetNextDlgGroupItem(
hwnd, // handle of dialog box
lhwnd_control1, // handle of control
FALSE // direction flag
);
if (lhwnd_control != NULL)
{
i= GetDlgCtrlID(
hwnd_control // handle of control
);
GetDlgItemText(
hwnd , // handle of dialog box
i,//IDC_EDIT, //int nIDDlgItem, // identifier of control
ls_texte, // address of buffer for text
255 // maximum size of string
);
mezlan
Messages postés3Date d'inscriptionmercredi 23 juin 2004StatutMembreDernière intervention 8 décembre 2004 7 déc. 2004 à 16:33
Bonjour,
Pour récupérer l'identifiant suivant il faut utiliser :
GetWindow(GW_HWNDNEXT).
Voici la fonction Avancer qui peut répondre à tes attentes et un exemple d'utilisation:
Déclarer comme variable membre :
CWnd* m_pWndCourant ;
ensuite si tu veux tester sur 20 élément de ta boite de dialogue:
int j=0;
m_pWndCourant = NULL;
while(j<20)
{
Avancer(m_pWndCourant);
j++
}
//La fonction Avancer permet de récupérer le texte des éléments d'une boite de dialogue dans l'ordre du TabOrder.
void Avancer(CWnd *pWndCtl)
{
int index;
CString strTexte;
if(pWndCtl == NULL)
{
m_pWndCourant = GetNextDlgGroupItem(pWndCtl,FALSE);
index = m_pWndCourant->GetDlgCtrlID();
GetDlgItemText(index,strTexte);
TRACE(_T("Texte[%d]:%s\n"),index,strTexte);
}
if(pWndCtl != NULL){
m_pWndCourant = pWndCtl->GetWindow(GW_HWNDNEXT);
index = m_pWndCourant->GetDlgCtrlID();
GetDlgItemText(index,strTexte);
TRACE(_T("Texte[%d]:%s\n"),index,strTexte);
}
demar016
Messages postés6Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention 8 décembre 2004 8 déc. 2004 à 11:43
Moi je n'utilise pas la classe CWnd mais HWND, en fait je recupere le HWND de la dialogue box, mais le GetWindow ne marche pas correctement, je trouve juste mon bouton OK, et je n'arrive pas à obtenir un autre controle pour avoir le texte.
voici le code que j'utilise:
while(j<20)
{
if(lhwnd_control == NULL)
{
lhwnd_control = GetNextDlgGroupItem(hwnd,lhwnd_control,FALSE);
index = GetDlgCtrlID(lhwnd_control);
GetDlgItemText(hwnd,index,strTexte,255);
TRACE(_T("Texte[%d]:%s\n"),index,strTexte);
}
if(lhwnd_control != NULL)
{
lhwnd_control = GetWindow(hwnd,GW_HWNDNEXT);
lhwnd_control = GetNextDlgGroupIte(hwnd,lhwnd_control,TRUE);
index = GetDlgCtrlID(lhwnd_control);
GetDlgItemText(hwnd,index,strTexte,255);
TRACE(_T("Texte[%d]:%s\n"),index,strTexte);
}
j++;
}
mezlan
Messages postés3Date d'inscriptionmercredi 23 juin 2004StatutMembreDernière intervention 8 décembre 2004 8 déc. 2004 à 12:40
Dans la boite de dialogue les contrôles sont numérotées de 1 à x par le taborder.
Dans mon exemple c'est le bouton CANCEL avec l'ID = IDCANCEL qui est le dernier élément de ma boite de dialogue.
int index;
char strTexte[255];
while(index != IDCANCEL)
{
if(lhwnd_control1 == NULL)
{
lhwnd_control = GetNextDlgGroupItem(hwnd,lhwnd_control1,FALSE);
index = GetDlgCtrlID(lhwnd_control);
GetDlgItemText(hwnd,index,strTexte,255);
}
else
{
lhwnd_control = GetWindow(lhwnd_control1,GW_HWNDNEXT);
index = GetDlgCtrlID(lhwnd_control);
GetDlgItemText(hwnd,index,strTexte,255);
Si ce code doit être valable pour plusieurs boîtes de dialogue
il faut faire en sorte que le même contôle soit le dernier(dans l'ordre du taborder).
Peut importe le nombre de contrôles de chaque boites de dialogue.
Ce n'est qu'une astuce, je ne sais pas si cela te conviendras.