Форум программистов, компьютерный форум CyberForum.ru

Сохранение и восстановление данных типа CObject - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как мне разбудить удаленный компьютер с использованием MAC адресса? http://www.cyberforum.ru/cpp-beginners/thread498712.html
Мне необходимо запустить удаленный компьютер находящийся в локальной сети. Я знаю, что при разрешении Wake On Lan в BIOS компьютера есть возможность сделать это при условии, что известен MAC адресс. Как мне это сделать ? Не имею ни малейшего понятия! Дополнительная проблема в том, что компьютер соединен через маршрутизаторы, хабы и мосты (т.е. нет прямого доступа к нему). Возможна ли в таком...
C++ Алгоритм дешифрования. Всё горит, помогите лузеру Помогите разобраться с кодом программы для работы с файлами СУБД Cronos, особенно с процедурой encode (что есть offset, buf, kod..). Как эта процедура будет реализована в VB? Буду очень благодарен за комментарии. Ну в крайнем случае можете послать меня на ... другой форум. #include <stdio.h> #include <alloc.h> #include <share.h> #include <fcntl.h> #include <stat.h> int nbases;... http://www.cyberforum.ru/cpp-beginners/thread498700.html
C++ Загрузка переменной из DLL (GetProcAddress не берет значение переменной из *.dll)
GetProcAddress не берет значение переменной из *.dll Не могу понять почему. Помогите. ------------------------- *********** DLL.h *********** #define DLL __declspec(dllexport) extern PINCRYPT HINSTANCE Lib_XXX;
Преобразование типов (long -> массив char) C++
Здравствуйте! имеется функция void sendchar(unsigned char data);не могу ее использовать т.к. не знаю как преобразовать long в unsigned char.. понимаю, что с помощью указателей, но что-то ничего не выходит. пишу типа такого: long D; ... int i;
C++ Где можно взять Страуструпа в электронном варианте? http://www.cyberforum.ru/cpp-beginners/thread498497.html
Подскажите, где можна взять Страуструпа С++, в електронном варианте Ещё хотелось бы что-нибуть хорошее по С
C++ Как получить указатель на объект класса CDocument Как получить указатель на объект класса CDocument в любом месте программы? Например, функция ::AfxGetMainWnd()->GetMenu(); возвращает указатель на объект класса CMenu. А как для CDocument? Создать объект класса CDocument, нельзя. подробнее

Показать сообщение отдельно
Beginner_23
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 11
29.09.2011, 21:38  [ТС]     Сохранение и восстановление данных типа CObject
Не знаю прав я или нет, но я слегка отклонился от твоего совета.

Оцени пожалуйста такой вариант (быть может ты будешь смеяться но мне кажется, что такой способ легче)

/ *
Есть класс, порожденный от обычной кнопки. Объекты данного класса подвержены сохранению, так как в данном классе метод Serialize() перегружен.
*/

class CMyButton : public CButton
{
public:
DECLARE_SERIAL(CMyButton)
CMyButton();
~CMyButton();
protected:
virtual void Serialize(CArchive& ar);
};

/*
Есть класс основного окна приложения в котором инкапсулирован объект класса CMyButton (этот объект мы и будем сохранять и восстанавливать).
*/

class CMainWnd : public CFrameWnd
{
// … Тут всякие конструктор и деструктор

public:
CMyButton* button1; // ВОТ ЭТОТ ОБЪЕКТ

void InsertMyButton(); // Это метод вставки кнопки button1 в окно
// … Тут еще чего то

protected:

// Это метод по которому все обновится
void OnNew();
// Это метод по которому вызовется стандартное окно сохранения файла
void OnStore();
// Это метод по которому вызовется стандартное окно загрузки файла
void OnLoad();

DECLARE_MESSAGE_MAP()
};

// ………..Тут остальные классы, в том числе и класс приложения






// РЕАЛИЗАЦИЯ методов класса CMainWnd

// Конструктор основного окна приложения

//…………………………………………………………………………….

/* вставка кнопки в окно/
void CMainWnd::InsertMyButton()
{
if(!button1)
{
button1 = new CMyButton();
button1->Create(...);
}
}

// Реализация метода OnNew()

void CMainWnd::OnNew()
{
if(button1)
{
button1->~CMyButton();
button1 = NULL;
}
this->SetWindowText('untitled');
}

// Реализация метода записи данных на диск
void CMainWnd::OnStore()
{
CFileDialog DlgSaveAs(...);

if(DlgSaveAs.DoModal()==IDOK)
{
CFile File(DlgSaveAs.GetPathName(), CFile::modeCreate|CFile::modeWrite);
CArchive ar(&File,CArchive::store);
ar.WriteObject(button1);
ar.Close();
File.Close();
this->SetWindowText(DlgSaveAs.GetPathName());
}
}

// Реализация метода чтения данных с диска
void CMainWnd::OnLoad()
{
CFileDialog DlgOpen(...);
if(DlgOpen.DoModal()==IDOK)
{
OnNew();
CStdioFile File(DlgOpen.GetPathName(),CFile::modeRead);
CArchive ar(&File,CArchive::load);
button1=(CMyButton*)ar.ReadObject(RUNTIME_CLASS(CMyButton));
ar.Close();
File.Close();
this->SetWindowText(DlgOpen.GetPathName());
}

// РЕАЛИЗАЦИЯ методов класса CMyButton

IMPLEMENT_SERIAL(CMyButton, CButton,1)

// ………Конструктор и деструктор………………………………………
// ……………………………………………………………………………

// Метод записи и восстановления объекта класса CMyButton
// В данном методе я сохраняю тип объекта данного класса, его расположение(размеры) и надпись (кнопка // // “OK” например)

void CMyButton::Serialize(CArchive& ar)
{
WINDOWPLACEMENT place;
char type = '1' // Это тип
CString caption; // Это надпись

CString X1Pos; // Далее координаты расположения
CString X2Pos;
CString Y1Pos;
CString Y2Pos;
if(ar.IsStoring())
{
this->GetWindowText(caption);
this->GetWindowPlacement(&place);
X1Pos.Format('%d',place.rcNormalPosition.left); X2Pos.Format('%d',place.rcNormalPosition.right);
Y1Pos.Format('%d',place.rcNormalPosition.top);
Y2Pos.Format('%d',place.rcNormalPosition.bottom);
// Вот я записал информацию про объект
ar<<type<<caption<<X1Pos<<X2Pos<<Y1Pos<<Y2Pos<<'
'

}
else
{
CString result;
ar.ReadString(result); // Вот я прочитал информацию про объект и получил строку
// Тут со строкой этой надо что то делать (в ней действительно есть то что мне нужно)
}
}
}


Вопрос ???
 
Текущее время: 13:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru