Editbox bräuchte Tipps
-
Da ich das Fenster mit nem Editor gemacht hab fehlt mir die HWND ID wie krieg ich die hin?
und mein zweites Problem ist ich möchte ja die Variable in eine .txt schreiben aer er soll den Text hinten dran hängen bisher überschreibt mein Programm den vorhandenen Text. Wie kriege ich das am besten hin?
-
Wie mit nem Editor erstellt, mit Notepad oder was

Also du hast doch deine Nachrichtenschleife vom Dialog
BOOL CALLBACK DialogProc(HWND hdlg, UINT msg, WPARAM wP, LPARAM lP);
da hast du das hdlg das ist dein Parentfenster. Dann kannst du folgendes machen (ist einfach aus meinem Programm irgendwo raus)
SendMessage(GetDlgItem(hdlg, IDC_RADIO), BM_SETCHECK, BST_CHECKED, 0);
Die ID "IDC_RADIO" die musst du natürlich haben, aber die legst du natürlich fest.Wie öffnest du denn die Datei und wie schreibst du rein? Mit den paar informationen kann hier keiner was anfangen. Zeig mal bissel code

schirrmie
-
Hier ist mal der Code den ich noch benutze und die Variablen in die .txt zu schreiben, aber wie ich schon schrieb überschreibt das Programm den Inhalt der .txt.
Und bisher werden halt nur die Werte gespeichert die ich beim deklarieren eingegeben hab.case IDOK: text=fopen("D:/BACKUP/testfile.txt","wt"); fprintf(text,"Artikel Nr.: %c\tMenge:%i\n", artnr,menge); fclose(text); return TRUE;hier ist mal die Fehlermeldung die ich krieg wenn ich Versuche zu kompilieren
error #2140: Type error in argument 1 to 'GetDlgItem'; found 'int' expected 'struct HWND__ *'
und hier der dazugehörige quellcode (DLG_MAIN ist das Parrent Fenster DID_EDITSAMPLE ist die Textbox)
GetDlgItem(DLG_MAIN,DID_EDITSAMPLE);Ich hoffe damit könnt ihr mir besser helfen.
-
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 SchnelleTCHAR 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 entwederwchar_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