Editbox bräuchte Tipps



  • Hmm kann es sein das DLG_MAIN auch eine ID ist und kein HWND?
    Du musst dann das von deiner Nachrichtenschleife nehmen da hast du doch dein HWND.
    Siehe meinem ersten Post.
    BOOL CALLBACK DialogProc(HWND hdlg, UINT msg, WPARAM wP, LPARAM lP)

    Hmm ist die Frage was du so machen willst. Du vermischt jetzt c mit WinApi. Wenn du es "richtig" machen willst dann nimm CreateFile() und zum schreiben WriteFile usw.

    schirrmie



  • du uebergibst die ID des fenststers, du musst aber das HWND uebergeben

    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        std::fstream file_stream;
        HWND item = 0;
        size_t len = 0;
        TCHAR temp = 0;
    
        switch(message)
        {
            case WM_INITDIALOG:
                return (TRUE);
            case WM_DESTROY:
            case WM_CLOSE:
                ::EndDialog(hDlg,0);
                return (TRUE);
            case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDOK:
                    // get the edit box item
                    item = ::GetDlgItem(hDlg, DID_EDITSAMPLE);
    
                    // get the text of the item
                    leng = ::GetWindowTextLength(item)+1;
                    strTemp = new TCHAR[leng];
                    ::GetWindowText(item, strTemp, leng);
    
                    // write content to file
                    file_stream.open(_T("D:\\BACKUP\\testfile.txt"), std::ios_base::out | std::ios_base::app);
                    if(file_stream.is_open())
                        file_stream << strBuff.c_str() << std::endl;
                    file_stream.close();
    
                    delete [] strTemp;
                    strTemp = 0;
    
                    return (TRUE);
                default:
                    break;
            }
            return (FALSE);
        }
        return (FALSE);
    }
    


  • Mr.Evil danke für den Code auch wenn ich c benutze konntest du aber nicht wissen

    nun ja ich hab fast alle Probleme lösen können außer das richtige einlesen der Editbox hier mal mein Code

    artnum[40]=GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,edit1,39);
    

    wenn ich kompiliere geht das ohne Probleme durch aber der Wert wird nicht richtig in die Variable geschrieben ich weiß nicht woran das liegt und ich hoffe das ihr mir helfen könnt.



  • Hier mal etwas mehr vom Quelltext

    nun das Currywurst in der artnum hab ich zum testen hinein geschrieben und das am ende auch in der scanlog.txt landet denke ich das ich es irgendwie versaut hab den string, aus der editbox DID_EDITSAMPLE, in die Variable zu schreiben. Ich hoffe ihr könnt mir meiner Fehler zeigen.

    int menge=0,*edit2=0;
    	char artnum[40]={'C','u','r','r','y','w','u','r','s','t'};
    	const wchar_t* leer=0;
    	LPTSTR edit1=0;
    	FILE *text;
    ...
    case IDOK:
    {
                    GetWindowText(GetDlgItem(hwndDlg,DID_EDITSAMPLE),edit1,39);      //die beiden Zeilen hab ich schon ausprobiert 
    				//artnum[40]=GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,edit1,39);  //aber es läuft halt net so wie es soll
    				menge=GetDlgItemInt(hwndDlg,DID_EDITDUMMY, edit2,20);
    
    				text=fopen("/BACKUP/scanlogfile.txt","ab");
    
    				fprintf(text,"Artikel Nr.: %s\tMenge:%i \n", artnum, menge);
    
    				fclose(text);
    
    				SetWindowText(GetDlgItem(hwndDlg,DID_EDITDUMMY), leer);
    				SetWindowText(GetDlgItem(hwndDlg,DID_EDITSAMPLE), leer);
    				return TRUE;
    			}
    


  • Sag mal was machst du denn da 😕
    Also deine Variablen sind ja 😮
    edit1 ist ein LPTSTR und edit2 ein Zeiger auf int. FILE *text; da denkt man doch da soll ein Text drin stehen und nicht das das ein ne Datei ist. Du solltest dir angewöhnen richtige Namen zu vergeben da sieht doch kein Schwein durch.
    Aber gut.

    LPTSTR edit1=0;
    ...
    GetWindowText(GetDlgItem(hwndDlg,DID_EDITSAMPLE),edit1,39);
    

    Du versuchst hier einen Text einzulesen aber du hast doch garkein Speicher für den Text!
    Mach mal aus LPTSTR edit1[40] ein TCHAR edit1[40]!

    menge=GetDlgItemInt(hwndDlg,DID_EDITDUMMY, edit2,20);
    

    Hast du dir die Funktion mal angeschaut was für Parameter die benötigt?

    UINT GetDlgItemInt(
    HWND hDlg, // handle to dialog box
    int nIDDlgItem, // control identifier
    BOOL *lpTranslated,
    // points to variable to receive success/failure
    // indicator
    BOOL bSigned // specifies whether value is signed or unsigned
    );

    Also da läuft ja einiges schief 🙂
    Also nur mal so auf die Schnelle

    TCHAR buff[40] = "";
    int menge = 0;
    GetWindowText(GetDlgItem(hdlg, IDC_EDIT_MENGE), buff, 39);
    menge = atoi(buff);
    GetWindowText(GetDlgItem(hdlg, IDC_EDIT_ARTNUM), buff, 39);
    

    So könnte es aussehen vielleicht.

    schirrmie



  • Das mit den Variablen werde ich versuchen zu ändern.

    Das GetDlgItemInt() hat bisher genau das getan was es sollte.

    und das Problem ist leider immer noch das ich anscheinend zu dumm bin den Inhalt der Editbox in die Variable zu schreiben.



  • Was funktioniert denn jetzt nicht? Mit einer genaueren Fehlerbeschreibung kann man dir genauer helfen 😉

    schirrmie



  • also kompilieren läuft ohne Probleme

    In der Deklaration hab ich in den String artnum den Text "Currywurst" geschrieben.

    wenn ich das Programm dann starte und was in die beiden Editboxen schreibe dann z.B. in die Editbox der Artikel Nr.:"123ab56" und in die für die Menge "123"
    das soll dann in eine Textdatei gespeichert werden.

    Da dann aber in der Textdatei dann "Artikel NR.: Currywurst Menge:123" steht denk ich das mein Fehler in der GetDlgItemText() liegt weil dort anscheinend der Inhalt der Editbox nicht in die Variable geschrieben wird.



  • Wie sieht denn den neue Quellcode aus? Oder hast du nichts geändert? Ich habe dir doch schon geschrieben was falsch ist.
    Achso nochwas das geht auch so char artnum[40]= "Curywurst"; 😉

    schirrmie



  • So sieht der Quelltext jetzt aus hab nicht viel geändert

    wchar_t artnumbuff[40];
    char artnum[40]="Currywurst";
    ...
    artnum[40]=GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,artnumbuff,39);
    


  • artnum[40]=GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,artnumbuff,39);
    

    Warum übergibst du den return Value in artnum? Weist du Überhaupt was GetDlgItemTextW zurück liefert?

    If the function succeeds, the return value specifies the number of characters copied to the buffer, not including the terminating null character.

    If the function fails, the return value is zero. To get extended error information, callGetLastError.

    Du weist aber schon das der Inhalt der Editbox in deinem fall in artnumbuff und nicht in artnum gespeichert wird oder?

    schirrmie



  • au da hätte ich selbst drauf kommen können...

    ich geb jetzt beim fprintf() die artnumbuff aus aber es wird nur die erste stelle in die Textdatei geschrieben. jetzt bin ich mir aber nicht sicher ob das Problem noch beim einlesen liegt oder ob es bei der Ausgabe liegt.

    Hier mal der geänderte part:

    GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,artnumbuff,39);
    
    				Datei=fopen("/BACKUP/scanlogfile.txt","at");
    				fprintf(Datei,"Artikel Nr.: %s\tMenge:%i \n", artnumbuff, menge);
    				fclose(Datei);
    


  • Was heist nur die erste Stelle wird geschrieben?

    schirrmie



  • Wenn ich z.B. in die erste Editbox "wasd" reinschreibe landet nur das "w" in der Textdatei



  • guck dir mal deine typen an die du benutzt entweder du machst alles Unicode oder nix 😉
    also entweder

    wchar_t artnumbuff[40];
    char artnum[40]="Currywurst";
    ...
    artnum[40]=GetDlgItemTextW(hwndDlg, DID_EDITSAMPLE,artnumbuff,39);
    [b]fwprintf(...)[/b]
    

    oder

    char artnumbuff[40];
    GetDlgItemText(hwndDlg, DID_EDITSAMPLE, artnumbuff, 39);
    fprintf(...);
    

    schirrmie



  • wenn ich es nach der ersten Methode mache kommt folgende Fehlermeldung

    error #2140: Type error in argument 2 to 'fwprintf'; found 'char *' expected 'const wchar_t *'.
    

    hier die Zeile dazu

    wchar_t artnumbuff[40];
    
    fwprintf(Datei,"Artikel Nr.:%s \tMenge:%i \n",artnumbuff, menge);
    

    casten hab ich auch versucht lies sich dann auch kompilieren aber da wird der reinste schwachsinn in die Textdatei geschrieben.

    Wenn ich die andere Variante benutze sagt mir der kompiler

    error #2140: Type error in argument 3 to 'GetDlgItemTextW'; found 'char *' expected 'wchar_t *'
    

    wenn ich dann caste bin ich nicht weiter als vorher



  • GetDlgItemTextA(hwndDlg, ID_EDITSAMPLE,artnumbuff,39);
    

    die .obj konnte ich ohne Fehler kompilieren aber zur exe kommt es nicht


Anmelden zum Antworten