Консультация № 17704
02.03.2005, 14:25
0.00 руб.
0 6 6
(VC++) Ув.эксперты кто-нибудь знает с помощью какой функции сохранить строки из ListBox в файл

Обсуждение

Неизвестный
02.03.2005, 14:31
общий
это ответ
Здравствуйте, Andrei__!
По очереди брать и записывать.
Неизвестный
02.03.2005, 15:22
общий
это ответ
Здравствуйте, Andrei__!
Насколько я знаю, такой функции нет(не считая сериализации). Можно сделать обычным способом:
считывать строки и записывать в файл, например с помощью CStdioFile.
Неизвестный
02.03.2005, 16:04
общий
это ответ
Здравствуйте, Andrei__!
Вот насчёт именно функции .... , но если реализовать то получаете количество строк спомощью сообщения LB_GETCOUNT и выдергиваете каждую строку сп. LB_GETTEXT и записываете в файл построчно.
Неизвестный
02.03.2005, 16:43
общий
это ответ
Здравствуйте, Andrei__!
Такая устроит (см. приложение)? :-)


Приложение:
-------------------- saveLBStringsIntoFile ----------------------------BOOL saveLBStringsIntoFile(HWND hListBox, LPCTSTR lpszFileName){ const int iStrCnt = SendMessage(hListBox, LB_GETCOUNT, 0, 0); BOOL bResult = FALSE; LPTSTR lpszBuf = NULL; HANDLE hFile; DWORD dw; DWORD dwStrLen; DWORD dwBytes; DWORD dwTell; int i; int iRetry; if (iStrCnt != LB_ERR) { hFile = CreateFile(lpszFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { for (i=0; i<iStrCnt; i++) { dwStrLen = SendMessage(hListBox, LB_GETTEXTLEN, i, 0); lpszBuf = new TCHAR [dwStrLen + 3]; if (!lpszBuf) { break; } else { SendMessage(hListBox, LB_GETTEXT, i, reinterpret_cast<LPARAM>(lpszBuf)); lstrcat(lpszBuf, TEXT("\r\n")); dwBytes = (dwStrLen + 2) * sizeof(TCHAR); iRetry = 3; dwTell = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); do{ dw = 0; SetFilePointer(hFile, dwTell, NULL, FILE_BEGIN); WriteFile(hFile, reinterpret_cast<LPVOID>(lpszBuf), dwBytes, &dw, NULL); }while((iRetry-- != 0) && (dw != dwBytes)); if (iRetry == -1) { break; } delete [] lpszBuf; } } if (i == iStrCnt) { bResult = TRUE; } CloseHandle(hFile); } } return bResult;}-------------------- End Of saveLBStringsIntoFile --------------------
Неизвестный
03.03.2005, 00:40
общий
это ответ
Здравствуйте, Andrei__!
В общем случае - с помощью сообщения <font color=#080000>LB_GETTEXT.</font><p><font color=#C00000 size=1 face=tahoma><b>* EMan2.0: ---===*** Debug mode ***===---</b></font>
Неизвестный
07.03.2005, 04:16
общий
это ответ
Здравствуйте, Andrei__!
С помощю самонаписанной. Если используется MFC-класс CListBox, то перебираются все строки методом класса ::GetText, число которых получено предварительно было методом класса ::GetCount. В случае API - окну листбокса посцлаются соответствующие сообщения.
--
<p><font color=#C00000 size=1 face=tahoma><b>* In Gates we trust! :)</b></font></p>
Форма ответа