IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

*Comment r�cup�rer les ID des boutons de boites standards


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut *Comment r�cup�rer les ID des boutons de boites standards
    Salut,

    Pour certaines bo�tes, je peux me gal�rer � tomber sur les boites dans les common.rc de la MSDN.

    Par contre, m�me quand il s'agit de l'ID du bouton "Enregistrer" pour la bo�te de type CFileDialog, aucune id�e de comment faire.

    Le but est d'utiliser la fonction
    dlg.SetControlText(int nID, LPCSTR lpsz)
    pour changer le texte et mettre par exemple "OK" (car �a n'enregistre pas tout de suite puisque je me sers dans un premier temps juste du nom de fichier choisi).

    Merci.

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    pour ton application ?

    tu peux utiliser spy++ ou un enumChildWindow

  3. #3
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    le plus simple est d'utiliser spy .
    voir autre technique utilis�e sur une CFileDialog dans la faq:
    http://c.developpez.com/faq/vc/?page...OnChangeSelect


  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Citation Envoy� par nico-pyright(c)
    pour ton application ?
    Mais non, pas pour les boutons que j'ai moi-m�me cr��.

    Pour l'exemple concret du bouton "Enregistrer" de la CFileDialog, comment tu ferais par exemple?

  5. #5
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    Citation Envoy� par stof
    Citation Envoy� par nico-pyright(c)
    pour ton application ?
    Mais non, pas pour les boutons que j'ai moi-m�me cr��.

    Pour l'exemple concret du bouton "Enregistrer" de la CFileDialog, comment tu ferais par exemple?
    tu peux parcourir dynamiquement les boutons de la fenetre et chercher le titre du bouton qui t'interesse ...
    voir mon post precedent.

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    M�thode 1 : Spy++

    En �carcillant les yeux comme un malade dans Spy++, j'ai fini par rep�rer une ligne o� iil y a marqu� :
    Fen�tre 00350166 "&Enregistrer" Button
    L� dans "G�n�ral", je vois l'ID du bouton 00000001
    Mais ce n'est pas �a puisque quand j'essaie de l'utiliser �a ne marche pas:
    dlg.SetControlText(0x00000001, "texte");
    dlg.SetControlText(16, "texte");
    dlg.SetControlText(1, "texte");
    dlg.SetControlText(00000001, "texte");



    En attendant de comprendre le fonctionnement de cet outil, j'essaie quand-m�me la m�thode 2

    M�thode 2 : Boucle artisanale pour faire le tour des contr�les
    J'ai remplac� "ComboBox" par "Button" mais de toutes fa�ons je n'ai que des cha�nes vides en retour.


  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    :

  8. #8
    mat.M
    Invit�(e)
    Par d�faut
    Citation Envoy� par stof
    M�thode 1 : Spy++

    En �carcillant les yeux comme un malade dans Spy++, j'ai fini par rep�rer une ligne o� iil y a marqu� :


    Menu >>Search >>Find Window Alt F3 >>Specifiez la fen�tre en d�pla�ant l'outil de s�lection ( cercles concentriques ) au-dessus des fen�tres


    Cliquer sur l'outil Finder Tool , maintenir le bouton gauche de la souris
    Un curseur avec cercles concentriques appara�t.
    Le d�placer sur la fen�tre , le bouton , la zone de texte � s�lectionner.

    Par exemple en dessinant avec MsPaint puis enregistrer on obtient :
    Handle : 000401EE - Caption : "Enregistrer" - Class: "Button"

    Apr�s avec des API Windows on peut d�terminer les fen�tres qui sont ouvertes d�terminer les types de contr�les etc....

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    OK mat.M pour l'outil cercles concentriques; �a permet de ne plus avoir � "�carciller les yeux", lol.


    Mais �a ne r�pond toujours pas � mon probl�me:
    Gardons toujours cet exemple de la boite CFileDialog d'enregistrement, voil� les ID que Spy++ me retourne :
    - Bouton Enregistrer : 00000001
    - Texte Static Nom de fichier : 00000442

    C'est bien mais je fais quoi avec �a?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Filtre sur les formats d'image sauvegardables
    	CString strFilter="Bitmap image (type *.bmp)|*.bmp|JPEG image (type *.jpg)|*.jpg|GIF image (type *.gif)|*.gif|PNG image (type *.png)|*.png||";
     
    	CFileDialog dlg(FALSE,NULL,"image",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,strFilter);
    	dlg.m_ofn.lpstrTitle="Enregistrer l'image";
    	CString s = "Mon nouveau texte";
    	dlg.SetControlText(0x00000001, s);	//plante!!
       dlg.SetControlText(1, s);	//plante!!
    	dlg.GetDlgItem(0x00000442)->SetWindowText(s); //plante!!
    	dlg.GetDlgItem(1090)->SetWindowText(s);  //plante!!
     
    	HRESULT hResult = (int)dlg.DoModal();

  10. #10
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    Citation Envoy� par stof
    OK mat.M pour l'outil cercles concentriques; �a permet de ne plus avoir � "�carciller les yeux", lol.


    Mais �a ne r�pond toujours pas � mon probl�me:
    Gardons toujours cet exemple de la boite CFileDialog d'enregistrement, voil� les ID que Spy++ me retourne :
    - Bouton Enregistrer : 00000001
    - Texte Static Nom de fichier : 00000442

    C'est bien mais je fais quoi avec �a?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Filtre sur les formats d'image sauvegardables
    	CString strFilter="Bitmap image (type *.bmp)|*.bmp|JPEG image (type *.jpg)|*.jpg|GIF image (type *.gif)|*.gif|PNG image (type *.png)|*.png||";
     
    	CFileDialog dlg(FALSE,NULL,"image",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,strFilter);
    	dlg.m_ofn.lpstrTitle="Enregistrer l'image";
    	CString s = "Mon nouveau texte";
    	dlg.SetControlText(0x00000001, s);	//plante!!
       dlg.SetControlText(1, s);	//plante!!
    	dlg.GetDlgItem(0x00000442)->SetWindowText(s); //plante!!
    	dlg.GetDlgItem(1090)->SetWindowText(s);  //plante!!
     
    	HRESULT hResult = (int)dlg.DoModal();
    salut,
    ton code ne peut fonctionner ,tu commets une erreur que j'ai maintes fois signal�e.
    en dehors de l'objet lui meme les controles d'une boite de dialogue ne sont pas actifs.
    ils sont actifs dans l'objet a partir du moment ou DoModal est lanc�..
    ni avant ni apres.
    voir mon post precedent avec le lien dans la faq ou j'interviens justement sur des controles d'une CFileDialog.

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Oui, c'est vrai, mais avant de poster j'avais d�j� essay� apr�s le DoModal et �a plante aussi!!!!!


    En plus la bo�te appara�t d�s lors qu'on fait DoModal et on passe � la suite une fois qu'on a fait "Enregistrer" ou "Annuler" donc c'est pas possible que je doive changer le texte des contr�les apr�s le DoModal.

    Conclusion : Au secours : 2 lignes de code pour me montrer comment faire ce que je veux s'il vous plait

  12. #12
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    le traitement est a faire dans OnInitDialogue qui est la fonction idoine.

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Euh... il n'y a pas de code OnInitDialog dans lequel je peux rentrer pour cette bo�te standard...?

    Je sais bien pour mes bo�tes que je m'occupe de toute la cr�ation graphique dans OnInitDialog mais l�... :

  14. #14
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    il faut faire une classe d�riv�e de CFileDialog ....
    et intercepter OnInitDialog.

  15. #15
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    C'est ce que je craignais au vu de la FAQ; c'est un peu lourd en fin de compte de cr�er une nouvelle classe juste pour faire quelques petites modifications de texte d'un bouton et d'un texte static par exemple.

    S'il n'y a pas d'autre solution alors, fin du sujet (et je suis un peu d��u qu'on puisse changer par exemple un titre de fen�tre par dlg.m_pOFN->lpstrTitle="Nouveau titre"; mais rien pour le reste).

  16. #16
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    Citation Envoy� par stof
    C'est ce que je craignais au vu de la FAQ; c'est un peu lourd en fin de compte de cr�er une nouvelle classe juste pour faire quelques petites modifications de texte d'un bouton et d'un texte static par exemple.

    S'il n'y a pas d'autre solution alors, fin du sujet (et je suis un peu d��u qu'on puisse changer par exemple un titre de fen�tre par dlg.m_pOFN->lpstrTitle="Nouveau titre"; mais rien pour le reste).
    �a prend 1 minute avec classe wizard et dans ce cas precis te permets de reprendre le controle d'une boite de dialogue pre parametr�e.
    je ne trouve pas que ce soit lourd ,mais normal dans ce context.

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    BOOL CMyFileDialog::OnInitDialog()
    {
    	CFileDialog::OnInitDialog();
     
    	GetDlgItem(1090)->SetWindowText("Mon nouveau texte");
     
    	return TRUE;  
    }

    Pas mieux : j'ai cr�� une classe CMyFileDialog d�riv�e de CFileDialog et sans le OnInitDialog, �a fonctionne pareil (juste pour dire que j'ai bien r�ussi � faire cette classe d�riv�e).

    Mais le probl�me qui m'int�resse n'est pas r�solu pour autant : �a plante toujours!

  18. #18
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    post le code qui plante ...

  19. #19
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Ben c'est le GetDlgItem, l'objet de mon post en fait;

    J'avais r�colt� par Spy++ 00000442 alors j'en ai d�duit qu'il fallait mettre 1090 (l'�quivalent d�cimal de 442 en hexad�cimal).

    Mais CWnd* pWnd = GetDlgItem(1090); renvoie un pWnd NULL.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CWnd::SetWindowText(LPCTSTR lpszString)
    {
    	ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
     
    	if (m_pCtrlSite == NULL)
    		::SetWindowText(m_hWnd, lpszString);
    	else
    		m_pCtrlSite->SetWindowText(lpszString);
    }

  20. #20
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    	CWnd* pWnd;
    	int i;
    	for (i=0; i<3000; i++)
    	{
    		pWnd = GetDlgItem(i);
    		if(pWnd)
    			AfxMessageBox("Tiens, en voilà un de bon!");
    	}
    Ben en fait y'a pas l'air d'avoir d'ID qui donne quoi que ce soit!

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. Gridview: Comment r�cup�rer les valeurs des deux cl�s?
    Par Thomas_Laurent dans le forum ASP.NET
    R�ponses: 1
    Dernier message: 02/02/2007, 14h54
  2. R�ponses: 2
    Dernier message: 11/12/2006, 12h38
  3. Comment r�cup�rer les icones des URL?
    Par Blo0d4x3 dans le forum Windows
    R�ponses: 3
    Dernier message: 26/05/2006, 15h29
  4. ShellListView : comment r�cup�rer les noms des fichiers?
    Par Lolo1988 dans le forum Composants VCL
    R�ponses: 1
    Dernier message: 11/12/2005, 23h19
  5. Comment obtenir les Handles des boutons syst�mes de Windows ?
    Par Desraux dans le forum API, COM et SDKs
    R�ponses: 6
    Dernier message: 22/12/2004, 22h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo