Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение ListCtrl в файл. Подскажите как реализовать... 
:(
    Опции темы
SSlavon
  Дата 6.12.2004, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.9.2004

Репутация: нет
Всего: нет



Есть данные, которые отображаются в ListCtrl в таблице, их нужно сохранить в файл на диск (желательно сохранять в Word или Exel документ с сохранением таблици).
С функцией Serialize(); чет я не разобрался.... smile
Если не сложно, подскажите как это реализовать, или дайте примерчик smile smile
PM MAIL   Вверх
alien_by
Дата 6.12.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 29.11.2004
Где: Belarus/Gomel

Репутация: 5
Всего: 8



Вообщем самый простой способ, это читать данные из листа с помощью функции GetItemText и писать в файл.
Например.
Код

for(int item = 0; item < list.GetItemCount(); itemi++)
  for(int subitem = 0; subitem < list.GetHeaderCtrl()->GetItemCount(); subitem++)
 {
    CString csText = list.GetItemText(item, subitem);
   
    // пишем в файл...
 }


Аналогичным образом (используя InsertItem, а затем SetItemText) читаем из файла.

Цитата
желательно сохранять в Word или Exel документ с сохранением таблици

Для этого читай соответствующую документацию по Active-X или использованию MS Jet драйверов и ATL.

Цитата
С функцией Serialize(); чет я не разобрался....


Метод Serialize очень прост, ему как параметр передаётся ссылка на обьект класса, реализующего хранение данных в специальном архивном контейнере.
вообщем пример, пусть класс содержит одно поле m_nTestField.

Код

void CMyClass::Serialize(CArchive& ar)
{
 
  Класс родитель (скорей всего CObject)::Serialize( ar );

  if( ar.IsStoring() )
     ar << m_nTestField;
  else
     ar >> m_nTestField;
}


Т.е. функция вызывается каждый раз, когда нужно сохранить либо восстановить поля класса.
Чтобы использовать механизм сериализации, это нужно явно указать при обьявлении класса, в прототипе задаётся макрос DECLARE_SERIAL и описывается метод Serialize.

Код

class CMyClass: public CObject
{
public:
  CMyClass( );
  void Serialize( CArchive& archive );

  DECLARE_SERIAL( CMyClass )
};


а в реализации исполняется макрос IMPLEMENT_SERIAL и реализация метода Serialize

Код

/* MyClass.cpp */
#include "stdafx.h"
#include "MyClass.h"

IMPLEMENT_SERIAL( CMyClass, CObject, VERSIONABLE_SCHEMA | 2 )

...


И ещё одно, если ты не используешь сериализацию в рамках архитектуры Document/View (там есть реализация для поодержки сериализации классов документов), то тебе придётся самому создавать архивный контейнер, это делается прим. так
Код

...

CFile f;
// Создаём файл для контейнера
if( !f.Open( имя файла, CFile::modeCreate | CFile::modeWrite ) ) {
  #ifdef _DEBUG
     afxDump << "Unable to open file" << "\n";
     exit( 1 );
  #endif
}
// Создаём контейнер
CArchive ar( &f, CArchive::store );

...
// Ну а потом где надо вызываем метод Serialize
CMyClass myClass;
.....

// Сохраняем состояние
myClass.Serialize(ar);


Аналогично для чтония состояния.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.