none
Problème d'affichage dans une combobox et list box VS 2017 community API c/c++ RRS feed

  • Discussion générale

  • Bjr,

    J'ai toujours utilisé les API Win 32 de BORLAND et voudrais passer sur Visual Studio. Mais 1 programme simple en Borland devient impossible sur Microsoft étant donné que VS 2017 ne donne,dans son aide, aucun exemple complet de A à Z!!! et m^me en lisant toute sa littérature !.

    C'est pourquoi je suis obligé de demander votre aide.

    Il s'agit d'1 simple programme WIN 32 C/C++ avec Edit box, combobox, List box en utilisant les ressources (pas MFC) générées par VS 2017. Le problème est que l'affichage dans le combo box et list box sont des hiéroglyphes!!! Pourquoi ???

    Mes commentaires dans le programme ci-dessous vous permet de suivre mon raisonnement.

    Merci d'avance.

    // nom du programme projet : PROJET6.CPP
    // Operating System = Windows 10

    // logiciel utilisé = Visual Studio Community 2017 version 15.7.4
    // programmation en API windows WIN 32 en C/C++

    /*
                         CREATION du PROJET
    -fichier-nouveau-projet-visual c++ - windows desktop-assistant windows desktop-
    entrer le nom du projet : Projet6    puis OK
    -il apparait une boite de dialogue: Projet WindowsDesktop
    dans Type d'application prenez : Application Windows(.exe) et cochez les cases :
    projet vide   et   Vérification SDL   puis OK
    -affichage-explorateur de solutions-fichier sources-clik Droit-ajouter-nouvel élément-
    visual c++-fichier c++ et entrez le nom:projet6 puis ajouter
    -On peut enfin écrire le fichier à l'endroit adéquat sur l'écran
    */
    /*                   
                         CREATION fichier EN-TETE
    -dans explorateur de solution-clik G sur fichier d'en-tête-clik D-ajouter-nouveau élément
    -visual c++-fichire d'en-tête-entrer le nom : Projet6-ajouter
    -écrire le code   puis fichier-enregistrer projet6.h
    -fermer projet6.h par clik G sur croix
    */
    /*
                         CREATION d'1 BTE de DIALOGUE
    -dans Explorateur de solutions à droite de l'écran - clik G sur fichiers de ressources
    -clik D dessus - ajouter - ressource -> apparait écran : ajouter 1 ressource -
    choisir Dialog - nouveau -> affiche 1 bte de dialogue sur écran
    -dans propriétés affichées, changer - caption=BOITE de DIALOGUE et ID=IDC_MAIN
    -clik G sur la croix pour fermer propriétés
    pour embellir la bte de dialogue:
    -affichage-bte à outils:
    clik G sur Static Text-clik G sur la croix pour fermer -> apparait 1 croix sur la bte de dialogue -
    positionner à l'endroit adéquat avec souris-clik D-propriétés - caption=Ajouter une entrée - ENTER
    - clik G sur la croix pour fermer
    * idem pour le reste avec Affichage - boite à outils
    - Edit Control - ID=IDC_EDIT
    - Check Box - ID=IDC_CHECK et caption=coché?
    - Combo Box - ID=IDC_COMBO
    - List Box - ID=IDC_LIST
    - Button - ID=IDC_ADD et caption=Ajouter
    - clik G sur OK et changer caption=FIN
    -Fichier - enregistrer Projet6.RC
    */

    #include <windows.h>
    #include "projet6.h"  
    #include <string.h>
    #include <stdlib.h>   //pour _countof

    HINSTANCE hInst;

    LRESULT CALLBACK MainProc(HWND dlg, UINT message, WPARAM wParam, LPARAM lParam);

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow)
    {
        DialogBox(hInstance, (LPWSTR)IDD_MAIN, NULL, (DLGPROC)MainProc);
        return 0;
    }

    //procedure de gestion de la boite de dialogue
    LRESULT CALLBACK MainProc(HWND dlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        HWND hctrl;  //besoin d'1 handle(identifiant) pour ne pas faire des appels
        int select, i; //successifs a GetDlgItem
        char buf[256];//pour stoker le nom de l'entrée,le choix,coché et le groupe
        char buffer[256];

        // rentrée des choix dans la combobox suite aux hiéroglyphes
        TCHAR combotext[3][10] = { TEXT("groupe 1"),TEXT("groupe 2"),TEXT("groupe 3") };
        TCHAR a[10];  //buffer

        switch (message)
        {
        case WM_INITDIALOG: //initialisation de la boite de dialogue
            //par défaut 1 radio n'est pas sélectionné,il faut donc lui donner 1 sélec-
            //tion par défaut pour éviter qu'aucun choix ne soit fait
            CheckDlgButton(dlg, IDC_RADIO1, BS_CHECKBOX);
            //on récupère un handle sur le controle auquel on va envoyer les messages
            /*
            *****  AFFICHE DES hiéroglyphes dans la Combo Box en suivant cette technique   ********
                   POURQUOI ?????   Borland n'a pas de problème !!!!!
            hctrl = GetDlgItem(dlg, IDC_COMBO);
            //par défaut un combo a 1 liste déroulante de taille nulle,il faut donc
            //l'agrandir.  Si on donne 1 taille supérieure au nécessaire, la liste
            //sera redimensionnée à la taille exacte
            SetWindowPos(hctrl, NULL, NULL, NULL, 100, 300, SWP_NOZORDER | SWP_NOMOVE);
            //on ajoute les choix a la liste ComboBox
            SendMessage(hctrl, CB_ADDSTRING, NULL, (LPARAM)"groupe 1");   //ou (LPCSTR)(LPARAM)
            SendMessage(hctrl, CB_ADDSTRING, NULL, (LPARAM)"groupe 2");
            SendMessage(hctrl, CB_ADDSTRING, NULL, (LPARAM)"groupe 3");
            //on donne 1 sélection par défaut pour q'1 choix soit fait
            SendMessage(hctrl, CB_SETCURSEL, 0, 0);
            */
            hctrl = GetDlgItem(dlg, IDC_COMBO);
            SetWindowPos(hctrl, NULL, NULL, NULL, 100, 300, SWP_NOZORDER | SWP_NOMOVE);
            memset(&a, 0, sizeof(a));   //initialise 1 zone mémoire
            for (i = 0; i <= 2; i++)
            {
                wcscpy_s(a, sizeof(a) / sizeof(TCHAR), (TCHAR*)combotext[i]);
                // ajout string à la combo box
                SendMessage(hctrl, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)a);
            }
            //on donne 1 sélection par défaut pour q'1 choix soit fait
            SendMessage(hctrl, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
            return 0;

        case WM_COMMAND:
            select = LOWORD(wParam);
            switch (select)
            {
            case IDC_ADD:
                hctrl = GetDlgItem(dlg, IDC_COMBO);
                GetDlgItemText(dlg, IDC_EDIT, (LPWSTR)buf, 32);//on récupère le nom a donner
                if (IsDlgButtonChecked(dlg, IDC_RADIO1))//quel est le radio sélectionné?
                    strcat_s(buf, " - choix 1");
                    //strncat_s(buf,_countof(buf), " - choix 1",12);   //NOT OK
                else
                    strncat_s(buf, _countof(buf), " - choix 2", 12);
                if (IsDlgButtonChecked(dlg, IDC_CHECK))//coché ou pas?
                    strncat_s(buf, _countof(buf), " - coché", 12);
                else
                    strncat_s(buf, _countof(buf), " - non coché", 14);
                i = SendMessage(hctrl, CB_GETCURSEL, NULL, NULL);//quel groupe choisi ?
                if (i == 0)
                    strcat_s(buf, " - groupe 1");
                if (i == 1)
                    strcat_s(buf, " - groupe 2");
                if (i == 2)
                    strcat_s(buf, " - groupe 3");
                //on récupère un handle sur le controle auquel on va envoyer les messages
                hctrl = GetDlgItem(dlg, IDC_LIST);
                //on l'ajoute a l'entrée et donc on aura le nom,le choix,coché ou non
                //et le groupe
                SendMessage(hctrl, LB_ADDSTRING, NULL, (LPARAM)(LPCSTR)buf);
                break;
            case IDOK:
                EndDialog(dlg, 0);
                return TRUE;
            case IDCANCEL:
                EndDialog(dlg, select);
                return TRUE;
            }
        default:
            return DefWindowProc(dlg, message, wParam, lParam);   //ou FALSE
        }
    }


    // programme PROJET6.H
    //{{NO_DEPENDENCIES}}
    // fichier Include Microsoft Visual C++.
    // Utilisé par Project6.rc
    //
    #define IDD_MAIN                        101
    #define IDD_DIALOG1                     102
    #define IDC_COMBO                       1003
    #define IDC_LIST                        1004
    #define IDC_EDIT                        1005
    #define IDC_ADD                         1006
    #define IDC_RADIO1                      1007
    #define IDC_RADIO2                      1008
    #define IDC_CHECK                       1009

    // Next default values for new objects
    //
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        104
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1000
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif


    //programme : PROJET6.RC
    // Microsoft Visual C++ generated resource script.
    //
    #include "projet6.h"   //remplacement de Resource.h

    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "winres.h"

    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS

    /////////////////////////////////////////////////////////////////////////////
    // Français (Belgique) resources

    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRB)
    LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_BELGIAN

    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //

    1 TEXTINCLUDE
    BEGIN
       //"resource.h\0"   remplacé par ci-dessous
       "projet6.h\0"
    END

    2 TEXTINCLUDE
    BEGIN
        "#include ""winres.h""\r\n"
        "\0"
    END

    3 TEXTINCLUDE
    BEGIN
        "\r\n"
        "\0"
    END

    #endif    // APSTUDIO_INVOKED


    /////////////////////////////////////////////////////////////////////////////
    //
    // Dialog
    //

    IDD_MAIN DIALOGEX 0, 0, 329, 215
    STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "BOITE DE DIALOGUE"
    FONT 8, "MS Shell Dlg", 400, 0, 0x1
    BEGIN
        DEFPUSHBUTTON   "FIN",IDOK,198,194,50,14
        PUSHBUTTON      "Annuler",IDCANCEL,272,194,50,14
        LTEXT           "Nom : ",IDC_STATIC,15,36,23,10
        EDITTEXT        IDC_EDIT,41,33,67,14,ES_AUTOHSCROLL
        COMBOBOX        IDC_COMBO,40,113,62,15,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
        LISTBOX         IDC_LIST,166,35,142,117,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
        CONTROL         "choix 1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,17,58,39,10
        CONTROL         "choix 2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,17,73,40,13
        CONTROL         "coché ?",IDC_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,60,51,15
        PUSHBUTTON      "Ajouter",IDC_ADD,64,158,63,12
        LTEXT           "liste des entrées",IDC_STATIC,184,16,111,10
        LTEXT           "Ajouter une entrée",IDC_STATIC,29,14,99,8
    END

    IDD_DIALOG1 DIALOGEX 0, 0, 309, 176
    STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "Dialog"
    FONT 8, "MS Shell Dlg", 400, 0, 0x1
    BEGIN
        DEFPUSHBUTTON   "OK",IDOK,198,155,50,14
        PUSHBUTTON      "Annuler",IDCANCEL,252,155,50,14
    END


    /////////////////////////////////////////////////////////////////////////////
    //
    // DESIGNINFO
    //

    #ifdef APSTUDIO_INVOKED
    GUIDELINES DESIGNINFO
    BEGIN
        IDD_MAIN, DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 322
            TOPMARGIN, 7
            BOTTOMMARGIN, 208
        END

        IDD_DIALOG1, DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 302
            TOPMARGIN, 7
            BOTTOMMARGIN, 169
        END
    END
    #endif    // APSTUDIO_INVOKED


    /////////////////////////////////////////////////////////////////////////////
    //
    // AFX_DIALOG_LAYOUT
    //

    IDD_MAIN AFX_DIALOG_LAYOUT
    BEGIN
        0
    END

    IDD_DIALOG1 AFX_DIALOG_LAYOUT
    BEGIN
        0
    END

    #endif    // Français (Belgique) resources
    /////////////////////////////////////////////////////////////////////////////



    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //


    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED



    mardi 5 mars 2019 09:51