habe problem mit LBN_SELCHANGE, brauche help!



  • hallo, ich habe hier ne WinAPi mit einer LB in der ich 10Einträge habe( von einer struct ) so nun will ich wenn ich ein string ausgewaehlt habe das der inhalt einer variable in eine editbox geschrieben wird, also so zB. in der Lb steht der Vorname eines players und wenn ich den anklick sprich waehle soll in der editbox der nachname stehen. hier mein versuch der leider net funktioniert:

    LRESULT CALLBACK WindowProc( HWND hWnd, UINT message, WPARAM wParam,
                                 LPARAM lParam ) {
    
        static HWND hListBox;
        static HWND hEdit;
        static int cur;
    
        static char pTeam[MaxTeamLen];
        static char pColor[MaxColorLen];
        static int pWins;
        static int pLoses;
        static char _pWins;
        static char _pLoses;
    
        struct Player pTournemant[] = {
                            { "Tobi", "Knut", "Blue", 10, 0 },
                            { "Basti", "Keule", "Green", 1, 5 },
                            { "Uwe", "Crasher", "Yellow", 3, 5 },
                            { "Eric", "Butcher", "Pink", 2, 2 },
                            { "Philipp", "Killer", "Black", 10, 11 },
                            { "Björn", "Splitter", "White", 7, 2 },
                            { "Inge", "Growler", "Red", 9, 6 },
                            { "Klaus", "Clowns", "Orange", 7, 10 },
                            { "Kurt", "Babys", "Purple", 5, 3 },
                            { "Kevin", "Sanis", "Gray", 3, 0 }
                        };
    
        switch( message ) {
    
            case WM_CREATE: {
    
                hEdit = CreateWindow( "EDIT", "", WS_CHILD | WS_VISIBLE | WS_DISABLED,
                                        10, 120, 50, 20, hWnd, (HMENU)2000, hInst, 0 );
    
                hListBox = CreateWindowEx( WS_EX_CLIENTEDGE,
                                           "LISTBOX", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL,
                                           10, 10, 150, 100, hWnd, (HMENU)ID_ListBox,
                                           hInst, 0 );
    
                for( int i = 0; i < MaxPlayer; ++i ) {
    
                    SendMessage( hListBox, LB_ADDSTRING, 0,
                                 (long)pTournemant[i].playerName );
                    SendMessage( hListBox, LB_SETITEMDATA, i, (long)i );
                }
                break;
            }
    
            case WM_SIZE: {
    
                break;
            }
    
            case WM_COMMAND: {
    
                switch( LOWORD( wParam ) ) {
    
                    case ID_ListBox: {
    
                        switch( HIWORD( wParam ) ) {
    
                            case LBN_SELCHANGE: {
    
                                static int i = 0;
                                cur = SendMessage( hListBox, LB_GETCURSEL, 0, 0 );
                                i = SendMessage( hListBox, LB_GETITEMDATA, cur, 0 );
                                SendMessage( hEdit, WM_SETTEXT, 0,
                                             (long)pTournemant[i].playerTeam );
                                break;
                            }
                        }
                    }
                    break;
                }
                break;
            }
    [...]
    

    könntet ihr mir hier bei bitte helfen?, danke.

    PS: wie stell ich es an das wenn ich eine scrollbar per WS_VSCROLL in die LB integriegre das sie beim eintragen von objecten autom. nach unten scrollt?

    gruß Tobi



  • Hi,

    Also nach über 300 Posts solltest Du doch eigentlich wissen, dass das keine ausreichende Fehlerbeschreibung ist, oder ?

    T0bi schrieb:

    [...] hier mein versuch der leider net funktioniert: [...]

    Anyway, ... Du musst beim Erstellen deiner ListBox das Flag LBS_NOTIFY setzen, damit das Control die Nachricht überhaupt sendet.



  • Ups, hab dein PS übersehen, sorry...Voila 😉 : LB_SETCARETINDEX.



  • oh danke klappt alles wunderbar 🙂 nunja das mit den fehlerbeschreibungen ich werd mich besser, hoff ich^^.
    ähm eine frage noch ich habe nun hier eine WINAPI und #include <string> und hab versucht einen string test; zu deklarieren. doch es geht nicht denn es erscheint dei f.meldung:

    [C++ Error] api_test2.cpp(22): E2141 Declaration syntax error
    

    wieso?



  • Wie sieht denn Deine Definition des Klassenobjekts aus ?

    Poste mal die Zeile, in der der Fehler auftritt. (Hast Du die Fehlermeldung gekürzt ? Was ist n das für n Compiler ?)

    Ich tippe mal darauf, das Du den Namensbereich std nicht globalisiert hast:

    using namespace std;
    

    oder:

    using std::string
    

    oder:

    std::string strObj("Ich bin ein String");
    


  • oh sorry, es lag an "using namespace sts;" ich hatte gedacht "#include <string>" würde reichen, wusste nicht das der namespace std; zuzüglich initialisiert werden muss... trotzdem danke :xmas1:

    gruß Tobi :xmas2:


Anmelden zum Antworten