Benutzernamen in Chat ermöglichen



  • Ich habe ein Dialogfeld, welches zu anfang erscheint (aufruf in WM_CREATE), jedoch läuft dort irgendwas schief, da im Debugmodus für das HWND des Steuerelements kein wert angezeigt wird und der Rückgabewert von WM_GETTEXTLENGTH nicht der Länge des char* entspricht, der als benutzername eingegeben wird. Für Hilfe wäre ich sehr verbunden hier die entscheidenen Codestellen:

    1.) Aufruf des Dialoges

    char* mymessage = NULL;

    HANDLE hThread;
    DWORD ThreadParam = 1;
    DWORD ThreadNr;

    switch (message)
    {
    case WM_CREATE:

    DialogBox (hGlobInstance, "IDD_DIALOG1", hWindow, StartDialog);

    ............. (auszug, also nicht auf Vollständigkeit prüfen, nach dem Eintrag werden noch die Steuerelemente erstellt)

    2. Die Callbackfunktion des Dialoges

    BOOL CALLBACK StartDialog (HWND startdlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int count;

    HWND ok;

    switch (message)
    {
    case WM_INITDIALOG:

    return TRUE;

    case WM_COMMAND:

    switch (LOWORD (wParam))
    {
    case IDD_OK:

    //Fensterhandle zurückliefern
    ok = GetDlgItem (startdlg, IDD_NICK);

    //Länge der Nachricht bestimmen
    count = SendMessage (ok, WM_GETTEXTLENGTH, 0,0);

    //Die Nachricht in der Variable nickname speichern
    SendMessage (ok, WM_GETTEXT, count + 1, (long) nickname);

    EndDialog (startdlg, 0);

    break;
    case IDD_CANCEL:
    EndDialog (startdlg, 0);
    return TRUE;

    case IDD_MEMBER:
    break;
    }

    break;

    }

    return FALSE;
    }

    3. Die Methode um die Daten zu senden:

    void Connection::SendData (char* message, char* user)
    {

    strcpy (buffer, message);
    strcpy (nickname, user);

    write = strcat (nickname, buffer);

    int n = send (client, write, strlen (write), 0);
    if (n ==0)
    {
    Error ("Das war wohl nix");
    }

    }

    tausend dank im voraus für antworten



  • Also ich würde erstmal Codetags benutzen, dann würde ich nur das posten in dem das Problem steckt, und dann würde ich genau sagen, was dein Problem ist.

    Dann kann ich dir vielleicht helfen...

    cu para
    😃



  • Codetags? Was sollen das denn sein? Das Problem steckt darin dass der wohl den Eintrag in der Dialogbox (also wenn man den Nick eingeben will in dem Steuerelement) nicht in die Buffervariable einliest. Aber ich weiss nicht warum.



  • Das sind Codetags:

    // KOMMENTAR
    int codetags;
    MessageBox(0, "Hallo", "CodeTAGS", MB_OK)
    

    Also du willst einfach den Text eines Dialogfeldes auslesen??

    // private
    char *szText;
    HWND hWndTextFeld;
    int length;
    
    // Handle holen
    hWndTextFeld = GetDlgItem(hMainWindow, ID_TXT_TEXTFENSTER);
    
    // Länge erfahren
    length = GetWindowTextLength(hWndTextFeld);
    
    // Speicherplatz holen
    szText = new char[length+1];
    
    // Text holen
    GetWindowText(hWndTextFeld, szText, length);
    
    // ausgeben
    MessageBox(0, szText, 0, 0);
    

    so müsste es doch gehen??
    bin mir aber nicht sicher!

    cu para
    😃

    [ Dieser Beitrag wurde am 27.12.2002 um 12:59 Uhr von paranoiac.org editiert. ]



  • Achso du meinst kommentare.... naja während du dich freundlich bemüht hast habe ich es schon geschafft.... mein Fehler war das ich wieder mal vergessen habe Speicherbereich zu reservieren.... Allerdings habe ich jetzt ein anderes Problem.... bei Rückkehr als der Callbackfunktion (wo die nachrichten des Hauptfensters verarbeitet werden) wird eine Exception ausgelöst... ich weiss nicht warum....


Anmelden zum Antworten