none
C++ Win32-Anwedung Combobox RRS feed

  • Frage

  • Mein Problem ist folgendes.

    Ich hab eine INI-Datei und möchte die Einträge in eine Win32 Combobox reinladen,

    das klappt ganz gut wenn ich es einzeln mache, aber ich möchte es in einer Schleife machen

    sonst muss bei jedem neune INI-Eintrag dies auch im Source ändern.

     

    Samstag, 27. März 2010 16:41

Antworten

  • Hallo Robert!

    > Verstanden, und dann wäre der Letzte Parameter von SendMessage à lParam
    > = (LPARAM) (LPCTSTR) lpsz ?

    Nein... warum soll man zweimal casten?
    Eigentlich ist jeder Cast zu viel und deutet meistens auf Fehler hin....

    Also so lässt sich das ganze wunderbar compilieren:

    void FillListBox(HWND hwndList)
    {
    LPCTSTR pVarName[] = { _T("Item1"), _T("Item2"), _T("Item3"),
    _T("Item4"), _T("Item5") };
    for(int i=0; i<5; i++)
    SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM) pVarName[i]);
    }


    Jochen Kalmbach (MVP VC++)
    • Als Antwort vorgeschlagen Robert Breitenhofer Mittwoch, 31. März 2010 12:42
    • Als Antwort markiert AntiSpy Donnerstag, 1. April 2010 10:24
    Mittwoch, 31. März 2010 12:37

Alle Antworten

  • Wie meinst Du das?

    Zeig mal die Daten aus der INI Datei damit man eine Ahnung hat, was Du anzeigen willst.

    Ansonsten kann man mit GetPrivatePrfoileString auch ganze Sektionen einer INI Datei einlesen.
    http://msdn.microsoft.com/en-us/library/ms724353(VS.85).aspx

    Ertser bzw. zweiter Parameter bleibt dann NULL.

     


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 27. März 2010 16:59
  • Also das aus der INI Lesen klappt

    Das ist ja einleichtes steht ja in der Windows.h

     

        TCHAR Comboitems[40];

       GetPrivateProfileString(TEXT("combobox"), NULL, NULL, Comboitems, sizeof(Comboitems), TEXT("C:\\Users\\Lilli\\Desktop\\test.ini"));

        //g_pCombo.AddString( "test1" );
        //g_pCombo.AddString( "test2" );
        //g_pCombo.AddString( "test3" );
       
       
        g_pCombo.SetCurSel( 0 );

     

    Das hinzufügen der Items hab ich mal Auskommentiert.

    Es Sollte jetzt nur folgendes passieren, eine Schleife die mir die Items in die Combobox hinzufügt

    egal wie viele da drin stehen sollte es mir in der INI den Abschnitt [combobox] komplett auslesen.

    Also in einer Schleife oder so etwas in der richtung.

    Samstag, 27. März 2010 17:12
  • hallo

    vielleicht so

    for(int i = 0;i < 40;i++)
    
    {
    
          g_pCombo.AddString( Comboitems[i] );
    
    }

    Markus F.
    Samstag, 27. März 2010 17:18
  • Das hatte ich schon dann sagt es mir aber ein Fehler.

      1    IntelliSense: argument of type "TCHAR" is incompatible with parameter of type "LPCTSTR" 

    In einer Konsolenanwedung würde dies gehen aber bei Win32-Anwedung stellt es sich Quer.

     

     

    Samstag, 27. März 2010 17:38
  • versuchs mal mit

    const TCHAR* Comboitems[40];


    Markus F.
    Sonntag, 28. März 2010 11:23
  • Hat ich auch schon versucht, dann gibts aber Fehler in dem aufruf von GetPrivateProfileString.

    ist alles etwas schwer in Win32.

    Sonntag, 28. März 2010 15:43
  • Hallo AntiSpy,

    Schau Dir mal folgendes Beispiel an. Vielleicht kann es Dir weiter helfen.

    http://www.daniweb.com/forums/thread34641.html

    Auf einmal wird die ComboBox mit folgendem Code gefühlt:

     

    void FillListBox(HWND hwndList)
    {
         TCHAR *pVarName[] = {"Item1", "Item2", "Item3", "Item4", "Item5"};
         
         for(int i=0; i<5; i++)
      
                 SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM)pVarName[i]);
         
    }

     

    Grüße,

    Robert

    Mittwoch, 31. März 2010 11:27
  • Hallo Robert!

    > void FillListBox(HWND hwndList)
    > {
    > TCHAR *pVarName[] = {"Item1", "Item2", "Item3", "Item4", "Item5"};

    Ganz böse.... TCHAR verwendet aber String-Literale nicht mit TEXT oder
    _T versehen.... richtig wäre:

    LPCTSTR pVarName[] = {_T("Item1"), _T("Item2"), _T("Item3"), 
    _T("Item4"), _T("Item5") };

    Jochen Kalmbach (MVP VC++)
    Mittwoch, 31. März 2010 11:45
  • Hallo Jochen,

    Verstanden, und dann wäre der Letzte Parameter von SendMessage à lParam = (LPARAM) (LPCTSTR) lpsz  ?

    Grüße,

    Robert

    Mittwoch, 31. März 2010 12:33
  • Hallo Robert!

    > Verstanden, und dann wäre der Letzte Parameter von SendMessage à lParam
    > = (LPARAM) (LPCTSTR) lpsz ?

    Nein... warum soll man zweimal casten?
    Eigentlich ist jeder Cast zu viel und deutet meistens auf Fehler hin....

    Also so lässt sich das ganze wunderbar compilieren:

    void FillListBox(HWND hwndList)
    {
    LPCTSTR pVarName[] = { _T("Item1"), _T("Item2"), _T("Item3"),
    _T("Item4"), _T("Item5") };
    for(int i=0; i<5; i++)
    SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM) pVarName[i]);
    }


    Jochen Kalmbach (MVP VC++)
    • Als Antwort vorgeschlagen Robert Breitenhofer Mittwoch, 31. März 2010 12:42
    • Als Antwort markiert AntiSpy Donnerstag, 1. April 2010 10:24
    Mittwoch, 31. März 2010 12:37
  • Ja klappt jetzt, Danke.

     

    Donnerstag, 1. April 2010 10:27