none
how do i retrieve a text entered by the keyboard in c++ ? RRS feed

  • Question

  • hello !

    i'm a beginner using visual c++ 2005 and i want to know how to retrieve a text entered by the keyboard in c++, i searched and i have found many ways in c#, visual basic, XAML ... but not in c++. also how to display a text available in a char table in a textbox ??

    another question : can i write in visual c++ with the "c" language ??

    if it is possible, would you please give me an exemple using "c" language (retrieve a text and put it in a char table and display the same table in a textbox ).  

     thanks in advance !

     

    mardi 8 mars 2011 17:31

Réponses

  • Il faut que vous potassiez un peu l'API Win32.

    Nota : l'exemple donné montre les concepts mais si vous utilisez VC++ à la place de Borland C++, le processus de création d'une boite de dialogue sera bien plus simple. Voir ci-après.

    Le processus est dans le principe simple, si l'on fait dans de l'application classique sans fioritures : une application à base d'une boite de dialogue.

    Au démarrage de votre application, dans le "main", il faut appeler la fonction DialogBox (http://msdn.microsoft.com/en-us/library/ms645452(v=vs.85).aspx).

    C'est comme dans l'exemple donné. Il y a juste un truc un peu sioux, c'est le paramètre "LPCTSTR lpTemplate" de la fonction.

    C'est ce paramètre qui indiquera à Windows quels contrôles créer dans la boite de dialogue. C'est une chaîne de caractère qui correspond à une constante correspondant à une ressource de votre exécutable.

    Si vous ne savez pas ce qu'est une ressource d'une application, c'est, grosso modo, un ensemble de données incluses dans l'exécutable, comme l'icône de l'exécutable quand vous regardez le fichier le contenant dans l'explorateur Windows. Dans ces ressources, on retrouve plein de choses, comme les icônes utilisés par l'application, les textes affichées dans l'IHM, les menus de l'application, les raccourcis claviers, et, pour ce qui nous intéresse, les modèles de boîte de dialogues.

    Chaque ressource est identifiée par un numéro.

    Dans le code de l'exemple :

            DialogBox(hInstance, MAKEINTRESOURCE(IDD_CONTROLS_DLG),
                      hWnd, reinterpret_cast<DLGPROC>(DlgProc));

    "IDD_CONTROLS_DLG" correspond à une constance qui est défini ainsi (étape 13 de l'exemple):

    #define IDD_CONTROLS_DLG        101
    
    Cette constante est définie dans le fichier resource.h qui, dans l'exemple, est créé à l'huile de coude, comme le fichier "NetPrice.rc".

    Avec VC++, vous n'avez pas à gérer à la main ces fichiers. Vous faite un clic droit sur le projet dans l'explorateur de solution -> Add New Item -> Sélectionnez la catégorie "Resource" -> "Resource File (.rc) -> Donnez un nom au fichier dans le champs de saisie en bas de la fenêtre du Wizard -> Cliquez sur OK.

    Après cette manipulation, vous avez ces deux fichiers créés et insérés dans votre projet mais votre projet sera configuré pour mettre à jour automatiquement ressource.h à votre place et pour transformer le contenu du fichier .rc en ressource de l'exécutable lors de la compilation du projet. C'est tout totomatique. ;-)

    Après avoir créé ces deux fichiers, vous pourrez, via la vue "Ressource View", ajouter des ressources au fichier .rc. Il suffira de faire clic droit sur le fichier .rx dans la Vue "Resource View" -> Add Resources -> Une fenêtre apparaîtra avec toute une liste de type de ressources qui vous pourrez ajouter à votre fichier .rc.

    Choisissez donc une "Dialogue" et VC++ ouvrira automatique un éditeur de boite de dialogue en mode WYSIWYG. Vous n'aurez qu'à utiliser la boite à outils contenant tout les type de contrôle en faisant du drag and drop pour ajouter tout les contrôles nécessaires. Pour chaque contrôle ajouté dans la boite de dialogue, une constante est ajouté dans le fichier resource.h. Vous pouvez changer le nom de la constante associée au contrôle ou à la boite de dialogue dans la fenêtre "Propriétés" (F4 pour l'afficher si elle n'est pas encore visible) quand le contrôle ou la boite de dialogue est sélectionné dans l'éditeur WYSIWIG. C'est la propriété de nom ID qui correspond au nom de la constante associée. Vous pouvez donc changer la propriété ID des contrôles et boîte de dialogue sans soucis, car VC change le contenu de resource.h automatiquement. Si vous avez du code qui utilise les anciens noms de constantes, c'est à vous de les modifier, VC++ ne met à jour que resource.h.

    Une fois que vous êtes satisfait de l'apparence de votre boîte de dialogue, vous n'avez qu'à appeler la fonction DialogueBox comme dans l'exemple mais en changeant "IDD_CONTROLS_DLG" par le nom de la constante associée à la propriété ID de votre boite de dialogue.

    Dans l'éditeur WYSIWIG, chaque contrôle est associé à un nom de constante (valeur ID de la fenêtre Propriétés), vous pouvez donc utiliser ces nom de constantes à la place de celles utilisées dans l'exemple pour :

    - récupérer le handle de la fenêtre d'un contrôle (GetDlgItem -> http://msdn.microsoft.com/en-us/library/ms645481(VS.85).aspx)

    - changer le texte affiché par un contrôle (SetWindowText -> http://msdn.microsoft.com/en-us/library/ms633546(VS.85).aspx)

    - récupérer le texte affiché par un contrôle (GetWindowText -> http://msdn.microsoft.com/en-us/library/ms633520(VS.85).aspx)

     

    Regardez l'exemple pour des cas concret d'utilisation de ces trois fonctions.


    Paul Bacelar, Ex - MVP VC++
    mercredi 9 mars 2011 20:33
    Modérateur

Toutes les réponses

  • Les contrôles Windows se chargent eux-mêmes de gérer les messages claviers eux-mêmes générés par le Kernel.

    En clair, vous n'avez pas à écouter le clavier.

    Le plus simple est d'utiliser une editBox/TextBox qui enregistrera les caractères entrées par l'utilisateur quand ce contrôle a le focus.

    Vous n'aurez plus qu'à lire le contenue du contrôle avec GetWindowText (http://msdn.microsoft.com/en-us/library/ms633520(v=vs.85).aspx).

    Pour la 2ème question, il suffit de mettre votre code dans des fichiers .c et non .cpp, ou utiliser les options de compilations /TC (http://msdn.microsoft.com/en-us/library/032xwy55(VS.80).aspx)

    Et Google est notre ami à tous : http://www.functionx.com/win32/applications/payroll.htm


    Paul Bacelar, Ex - MVP VC++
    mercredi 9 mars 2011 01:38
    Modérateur
  • merci beaucoup !

    juste je ne sais pas comment définir le handle du control contenant le text. pouvez vous me montrez  comment svp ? aussi comment avoir le ID d'un controle ?

    marci d'avance !

     

    mercredi 9 mars 2011 10:42
  • Il faut que vous potassiez un peu l'API Win32.

    Nota : l'exemple donné montre les concepts mais si vous utilisez VC++ à la place de Borland C++, le processus de création d'une boite de dialogue sera bien plus simple. Voir ci-après.

    Le processus est dans le principe simple, si l'on fait dans de l'application classique sans fioritures : une application à base d'une boite de dialogue.

    Au démarrage de votre application, dans le "main", il faut appeler la fonction DialogBox (http://msdn.microsoft.com/en-us/library/ms645452(v=vs.85).aspx).

    C'est comme dans l'exemple donné. Il y a juste un truc un peu sioux, c'est le paramètre "LPCTSTR lpTemplate" de la fonction.

    C'est ce paramètre qui indiquera à Windows quels contrôles créer dans la boite de dialogue. C'est une chaîne de caractère qui correspond à une constante correspondant à une ressource de votre exécutable.

    Si vous ne savez pas ce qu'est une ressource d'une application, c'est, grosso modo, un ensemble de données incluses dans l'exécutable, comme l'icône de l'exécutable quand vous regardez le fichier le contenant dans l'explorateur Windows. Dans ces ressources, on retrouve plein de choses, comme les icônes utilisés par l'application, les textes affichées dans l'IHM, les menus de l'application, les raccourcis claviers, et, pour ce qui nous intéresse, les modèles de boîte de dialogues.

    Chaque ressource est identifiée par un numéro.

    Dans le code de l'exemple :

            DialogBox(hInstance, MAKEINTRESOURCE(IDD_CONTROLS_DLG),
                      hWnd, reinterpret_cast<DLGPROC>(DlgProc));

    "IDD_CONTROLS_DLG" correspond à une constance qui est défini ainsi (étape 13 de l'exemple):

    #define IDD_CONTROLS_DLG        101
    
    Cette constante est définie dans le fichier resource.h qui, dans l'exemple, est créé à l'huile de coude, comme le fichier "NetPrice.rc".

    Avec VC++, vous n'avez pas à gérer à la main ces fichiers. Vous faite un clic droit sur le projet dans l'explorateur de solution -> Add New Item -> Sélectionnez la catégorie "Resource" -> "Resource File (.rc) -> Donnez un nom au fichier dans le champs de saisie en bas de la fenêtre du Wizard -> Cliquez sur OK.

    Après cette manipulation, vous avez ces deux fichiers créés et insérés dans votre projet mais votre projet sera configuré pour mettre à jour automatiquement ressource.h à votre place et pour transformer le contenu du fichier .rc en ressource de l'exécutable lors de la compilation du projet. C'est tout totomatique. ;-)

    Après avoir créé ces deux fichiers, vous pourrez, via la vue "Ressource View", ajouter des ressources au fichier .rc. Il suffira de faire clic droit sur le fichier .rx dans la Vue "Resource View" -> Add Resources -> Une fenêtre apparaîtra avec toute une liste de type de ressources qui vous pourrez ajouter à votre fichier .rc.

    Choisissez donc une "Dialogue" et VC++ ouvrira automatique un éditeur de boite de dialogue en mode WYSIWYG. Vous n'aurez qu'à utiliser la boite à outils contenant tout les type de contrôle en faisant du drag and drop pour ajouter tout les contrôles nécessaires. Pour chaque contrôle ajouté dans la boite de dialogue, une constante est ajouté dans le fichier resource.h. Vous pouvez changer le nom de la constante associée au contrôle ou à la boite de dialogue dans la fenêtre "Propriétés" (F4 pour l'afficher si elle n'est pas encore visible) quand le contrôle ou la boite de dialogue est sélectionné dans l'éditeur WYSIWIG. C'est la propriété de nom ID qui correspond au nom de la constante associée. Vous pouvez donc changer la propriété ID des contrôles et boîte de dialogue sans soucis, car VC change le contenu de resource.h automatiquement. Si vous avez du code qui utilise les anciens noms de constantes, c'est à vous de les modifier, VC++ ne met à jour que resource.h.

    Une fois que vous êtes satisfait de l'apparence de votre boîte de dialogue, vous n'avez qu'à appeler la fonction DialogueBox comme dans l'exemple mais en changeant "IDD_CONTROLS_DLG" par le nom de la constante associée à la propriété ID de votre boite de dialogue.

    Dans l'éditeur WYSIWIG, chaque contrôle est associé à un nom de constante (valeur ID de la fenêtre Propriétés), vous pouvez donc utiliser ces nom de constantes à la place de celles utilisées dans l'exemple pour :

    - récupérer le handle de la fenêtre d'un contrôle (GetDlgItem -> http://msdn.microsoft.com/en-us/library/ms645481(VS.85).aspx)

    - changer le texte affiché par un contrôle (SetWindowText -> http://msdn.microsoft.com/en-us/library/ms633546(VS.85).aspx)

    - récupérer le texte affiché par un contrôle (GetWindowText -> http://msdn.microsoft.com/en-us/library/ms633520(VS.85).aspx)

     

    Regardez l'exemple pour des cas concret d'utilisation de ces trois fonctions.


    Paul Bacelar, Ex - MVP VC++
    mercredi 9 mars 2011 20:33
    Modérateur
  • merci beaucoup !
    jeudi 10 mars 2011 06:55