WinAPI/C++: Multiline editbox funkar inte så bra

Permalänk
Hedersmedlem

WinAPI/C++: Multiline editbox funkar inte så bra

Edit: Har löst problemet nu. Jag är inte säker på hur, alls, men jag skrev om båda funktionerna och ändrade lite övrigt krafs... Kan tyvärr inte hjälpa till mycket om nån annan för samma problem.

Jo, det är såhär, att jag har en editbox i ett vanligt fönster, som jag försöker ge öppna och spara-funktioner.
Om vi börjar med öppna, så läser jag in data från en fil och sätter det till editboxen med SetDlgItemText alt. WM_SETTEXT.
Problemet är det, att det blir inga radbrytningar, utan istället två fyrkanter det där står \r\n i filen.

På motsatta sidan, när man sparar, blir det \r\r\n där det är radbrytningar, och därför ser filerna felaktiga ut i andra program...
Filer som är sparade i mitt program ser rätt ut i i mitt program.

Lite kod...

Editboxen:

HWND hEdit = CreateWindowEx(NULL, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN, 0, 0, 120, 120, hwnd, (HMENU)110, GetModuleHandle(NULL), NULL);

Ladda:

case IDC_LOAD: { OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0Web Files (*.php, *.asp, *.htm[l])\0*.php;*.asp;*.htm;*.html\0All Files (*.*)\0*.*\0\0"; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.nMaxFile = MAX_PATH; char *tmp = new char[MAX_PATH+1]; memset(tmp, 0, MAX_PATH+1); ofn.lpstrFile = tmp; if (GetOpenFileName(&ofn)) { string sFileData; FILE *file = fopen(tmp, "r"); char *temp = new char [1024]; memset(temp, 0, 1024); if (file) { while (!feof(file)) { fread(temp, sizeof(char), 1024, file); sFileData += temp; } delete [] temp; fclose(file); SetDlgItemText(hwnd, 110, sFileData.c_str()); } } } // end IDC_LOAD break;

Klaga inte på ful kod tack, ska snygga till "lite" när jag förstått vad fan som är fel här.

Nån som har nån lösning, som åtminstone helst inte innebär att köra replace på allt hela tiden?

Edit: Snyggade till tabbarna en aning.

Edit: Nu hajar jag ännu mindre! Om man kollar igenom strängen innan man sparar så stämmer den (bara en av varje, \r\n).
Jag provade att loopa igenom hela tecken för tecken. Före varje '\n' finns en '\r', men före de två så står det INTE någon '\r', utan bokstaven/tecknet som SKA vara där. Ändå blir det fel när jag sparar med fwrite().

Ändrar fwrite() texten på något vis eller?

Edit igen: Det blir samma fel om jag sparar med en simpel ofstream. Inte oväntat, men jag förstår fortfarande inte hur en string som är helt korrekt på raden ovan kan bli felaktig såhär?

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk

Är det inte smartare att köra ett memo? Iofs vet ja inte om det finns i c++ men iaf i delphi.

Visa signatur