Вобщем вопрос у меня такой. Нужно в программе реализовать сохранение/открытие данных путем
Serialize(CArchive& ar)
так как, насколько я понимаю, именно этот блок отвачет за диалог (open/save as). Данные это чаровский массив. И вот тут у меня ешё один вопрос, если выбирать при создании MFC проекта шаблон "dialog based", то соответственно на такой форме можно поставить эл. управления "Edit Control". Как можно реализовать подобный эл. управления но уже в обычном "MFC Applicatoin", чтобы на его основе передавать данные на сохранение(именно в этот чаровский массив, а дальше уже в файл).
Здравствуйте, jason_, Вы писали:
_>Вобщем вопрос у меня такой. Нужно в программе реализовать сохранение/открытие данных путем _>
_>Serialize(CArchive& ar)
_>
_> так как, насколько я понимаю, именно этот блок отвачет за диалог (open/save as).
Данный метод отвечает не за диалог, а за сохранение/загрузку данных в архив. Диалог это CFileDialog.
_> Данные это чаровский массив. И вот тут у меня ешё один вопрос, если выбирать при создании MFC проекта шаблон "dialog based", то соответственно на такой форме можно поставить эл. управления "Edit Control".
Можно.
_> Как можно реализовать подобный эл. управления но уже в обычном "MFC Applicatoin",
Что имеется под <<обычным "MFC Applicatoin">> ?
_> чтобы на его основе передавать данные на сохранение(именно в этот чаровский массив, а дальше уже в файл).
Почему нужно передавать данные именно из EditControl? Это текстовый редактор? Тогда зачем нужен промежуточный буфер?
Пишите, пожалуйста, подробнее и конкретнее. Вас непонятно.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Здравствуйте, Mr.ToNik, Вы писали:
MT>Пишите, пожалуйста, подробнее и конкретнее. Вас непонятно.
Спасибо, что исправили меня. Теперь я постараюсь изложить свой вопрос более детально. Ввиду того, что я недавно прораммирую в среде Microsoft Visual Studio .NET 2003 — я не много знаю и буду излагать задачу так, как я её себе понимаю.Задача состоит в следующем: я хочу написать програамму, которая будет сохранять в текстовый файл информацию из Edit Control'ов(про промежуточный чаровский массив я уже не упоминаю, т.к. я понял что можно обойтись и без него), в файле информация должна содержаться в упорядоченном виде(для начала я, хотя бы, хочу сделать так, чтобы просто все не писалось в одну строку, а каждое новое значение приняитое из Edit Control содержалось в новой строчке). Суть этой программы в том, что собственно есть эти самые Edit Control'ы, поясняющие надписи к ним и кпопка "OK" пр нажатии которой все будет сохранятся в файл(так мне это представляется). А теперь собвстенно уточню свои вопросы, исходи из того, как вы мне писали:
1) Вы писали:
MT>Данный метод отвечает не за диалог, а за сохранение/загрузку данных в архив. Диалог это CFileDialog.
Мне нужно привзять сохрание данных в файл в моей программе к пункту меню save или save as мне это не важно(ничего больше указывать не буду, чтобы вас не путать);
2) Вы писали:
MT>Что имеется под <<обычным "MFC Applicatoin">> ?
Я имею ввиду под обычным "MFC Application" следующее: запускаю Microsoft Visual Studio .NET 2003, затем File>New>Project, затем выбираю папку "Visual C++ projects" и в ней соответвенно подпапку "MFC", и затем в окошке справа выбираю "MFC Application", вот с этим шаблоном я и работаю.
3) Вы писали:
MT>Почему нужно передавать данные именно из EditControl? Это текстовый редактор? Тогда зачем нужен промежуточный буфер?
Программа которую я описал мне нужна для того, чтобы упорядоченно сохранить данные файл, которые будет вводить пользователь.
Это файл мне требуется для того, чтобы его открыть и сгенерировать содержимое, по сути это генерация тестов. В первой программе пользователь вводит колличество этих вопросов,содержимое этих вопросов,ответы на вопросы, все эти данные сохраняются в файл. Затем я напишу вторую программу, которой я уже буду считывать этот файл и герерировать сожерижмое т.е.: вопросы и рядом с ними варианты ответов на эти вопросы. Вот зачем я спрашивал у вас про привязку сохрания/открытия информацим с помощью save/open.
P.S. я рад Mr.ToNik что вы мне ответили, надаюсь что вы поспособствуйте решению моей задчи. вобще RSDN конечно достаточно серьёзный ресурс, и хорошо, если на такие вот простые проблемы обращают внимание более опытные программисты.
Re[2]: использование Serialize
От:
Аноним
Дата:
24.05.06 01:47
Оценка:
Доброго времени суток, Mr.ToNik.
Форумы RSDN замечательная инф. база, здесь можно найти много чего полезного для себя. Полазив и почитав форумы, я хотел бы уточнить свое предыдущее сообщение и задать несколько доп. вопросов, так сказать, от текста — поближе к самой среде программирования. Вобщем уточнения я тогда оформляю в виде вопросов:
1) Как сделать в обычном "MFC Applicatoin" (я уже пояснял что я под этим понимаю) эл. управления "Edit Control" или что-нибудь наподобие этого.
2) Как сохранить напрямую из "Edit Control" данные в файл, минуя промежуточный буфер, Вобще-то я не знаю как сохранить данные из "Edit Control" даже и в промежуточный буфер, однако, почитав форумы, я понял, что это делаеться приблилизительно таким образом, хотя возможно я и ошибаюсь:
void имя_едит.котрола::SomeFunc()
{
UpdateData(); // с помощью этой функции можно получить данные в перменную CString
}
3) Как правильно сохранять данные используя Serialize(CArchive& ar), как понимаю это можно сделать следующим образом, если неправильно, то — исправьте меня:
4) Как правильно объявить глобальную переменную? {конструкцию с external пробовал использовать, но я не знаю как её правильно обяъвлять, скажем я писал так :
external Ctring myString;
ну соответтвенно отладчик мне выводил 'external' : undeclared identifier
Её предназначение(глобальной переменной) мне видится для того, чтобы потом собственно сохранять из неё данные в файл, которые я принял из "Ediе Control". / можно ли сделать глобальной структуру?
5) Можно ли в serialize использвовать сразу несолько функций для сохранения данных скажем:
Но я не знаю, как писать в структуру и толком пока не понмаю как писать даже в переменную, проясните пожалуста как писать данные из "Edit Control".
6) Как можно сохранить данные в файл таким образом, чтобы каждое новое значение из переменной или из структуры было на новой строчке.
7) Вот скажем у меня есть окно, есть "Edit Control'ы" и есть поясняющие надписи над ними, в моем конкретном случае это будет один "Edit Control" и поясняющая надпись на нам, котрая будет спрашивать у приблизительно следующее — "Введите кол-во вопросов", так вот я добавлю к окну ещё кнопку "OK". Как мне сделать перерисовку окна, чтобы при нажатии кнопки "OK", окно очистилоась и тогда нарисую на нем соответвенно поясняющую надпись — "Введите вопрос" и "Edit Control" и так n раз, и затем будет n edit'ов где я буду спрашивать ответы на вопросы, ну и последний вопрос, как при последней перерисовеке окна убрать с него кнопку "ОК", т.е. это показыват — тест завершен.
Здравствуйте, Mr.ToNik, Вы писали:
MT>Очень сильно извиняюсь, но по производственным обстоятельствам... MT>Постараюсь вам ответить завтра, со всеми подробностями. Ещё раз, извиняйте.
Я все понимаю. Нет проблем. Буду ждать вашего ответа.
Здравствуйте, jason_, Вы писали:
MT>>Что имеется под <<обычным "MFC Applicatoin">> ? _> Я имею ввиду под обычным "MFC Application" следующее: запускаю Microsoft Visual Studio .NET 2003, затем File>New>Project, затем выбираю папку "Visual C++ projects" и в ней соответвенно подпапку "MFC", и затем в окошке справа выбираю "MFC Application", вот с этим шаблоном я и работаю. A> 1) Как сделать в обычном "MFC Applicatoin" (я уже пояснял что я под этим понимаю) эл. управления "Edit Control" или что-нибудь наподобие этого.
То есть все настройки у вас оставлены по умолчанию. Это значит, что мастер вам генерирует заготовку под MDI-приложение (Multiple Document Interface — многодокументный интерфейс). Не знаю, насколько вам нужна многодокументность, но на дальнейшие рассуждения она не сильно влияет.
Вам нужно внимательно изучить настройки мастера. И в первую очередь — послернюю вкладку, <<Generated Classes>>. Если вам необходимо только одно поле ввода тогда достаточно унаследовать класс представления документа (C_YouApp_View) от CEditView (стандартный текстовый редактор) или от CRichEditView (текстовый редактор с расширенными возможностями форматирования). В первом случае получите заготовку, функционально похожую на хороший блокнот, во втором — WordPade. Строго говоря, это будет не Control, а View, т.е. не элемент управления а представление. Но функционально они идентичны, практически.
Если нужно несколько полей — логично наследоваться от CFormView — тогда представление будет отображать форму, подготовленную вами в редакторе ресурсов. На ней EditControl'ы и разместите.
Дальнейшая работа будет сильно зависить от выбранного представления.
Но, честно говоря, у меня сложилось впечатление, что вам будет проще разобраться с нужно начинать с приложением на основе блока диалога (Dialog-based Application). Это простое приложение с одним окном, на которое можно в редакторе, опять же, накидать элементов управления, и можно сразу же писать нужную функциональность, не вникая (пока ) в такие вещи как архитектура документ-вид, архитектура библиотеки MFC и наследование классов...
Тип приложения (Application type) выбирается в мастере на второй вкладке.
А> 1) Как сделать в обычном "MFC Applicatoin" (я уже пояснял что я под этим понимаю) эл. управления "Edit Control" или что-нибудь наподобие этого.
Это зависит от типа вашего приложения. Один из способов я описал выше.
А> 2) Как сохранить напрямую из "Edit Control" данные в файл, минуя промежуточный буфер, Вобще-то я не знаю как сохранить данные из "Edit Control" даже и в промежуточный буфер, однако, почитав форумы, я понял, что это делаеться приблилизительно таким образом, хотя возможно я и ошибаюсь:
Если это именно Control, то можно например так:
CString csTemp; // временная переменная
GetDlgItemText( IDC_EDIT_MY, csTemp ); // получаем строку из Edit'а с идентификатором IDC_EDIT_MY
CFile OutFile( _T("myfile.txt"), // открываем файл myfile.txt с атрибутами:
CFile::modeCreate | // "создать новый чистый"
CFile::modeReadWrite ); // "можно читать-писать"
OutFile.Write( csTemp.GetString(), // пишем в файл полученную строку,
csTemp.GetLength()*sizeof(TCHAR) ); // указываем размер строки в байтах
OutFile.Close(); // закрываем файл
А>3) Как правильно сохранять данные используя Serialize(CArchive& ar), как понимаю это можно сделать следующим образом, если неправильно, то — исправьте меня:
А>
GetBuffer(int nMinBufLength ) используется для выделения необходимого для записи в строку объёма памяти. Мы же поизводим чтение, соответственно выделять дополнительную память нужды нет.
GetAllocLength(), опять же, возвращает длинну максимальной строки, которая может быть записана в текущий буфер без перерасспределения памяти. Обычно, это значение больше ,чем истинная длинна строки (GetLength()). Также, по скольку GetLength() возвращает длинну строки в символах, а нам нужно в байтах — следует выяснить, сколько байт приходится на один символ. sizeof(TCHAR)
А> 4) Как правильно объявить глобальную переменную? {конструкцию с external пробовал использовать, но я не знаю как её правильно обяъвлять, скажем я писал так : А>
А>external Ctring myString;
А>
А>ну соответтвенно отладчик мне выводил 'external' : undeclared identifier
А> Её предназначение(глобальной переменной) мне видится для того, чтобы потом собственно сохранять из неё данные в файл, которые я принял из "Ediе Control". / можно ли сделать глобальной структуру?
А>5) Можно ли в serialize использвовать сразу несолько функций для сохранения данных скажем:
В принципе, любые глобальные объекты в MFC приложении лучше не делать глобальными, а включать в класс приложения (class C_YouApp_App : public CWinAp). Единственный объект этого класса — глобальный, и из него ужке можно получать все нужные данные.
[_YouApp_.h]class C_YouApp_App : public CWinApp
{
public: // Важно! определяет возможность публичного доступа к членам классаint m_iMyInt;
cMyClass m_cmcMyClass;
...
};
[some_file.cpp]extern C_YouApp_App theApp;
void someFunc()
{
theApp.m_iMyInt = 3;
theApp.m_cmcMyClass.MyMetode();
}
А>5) Можно ли в serialize использвовать сразу несолько функций для сохранения данных скажем:
Да, и это правильный подход.
А> 6) Как можно сохранить данные в файл таким образом, чтобы каждое новое значение из переменной или из структуры было на новой строчке.
Запись в файл последовательная. Где нужна новая строчка — вставляешь соответствующую константу. "\r\n"
А> 7) Вот скажем у меня есть окно, есть "Edit Control'ы" и есть поясняющие надписи над ними, в моем конкретном случае это будет один "Edit Control" и поясняющая надпись на нам, котрая будет спрашивать у приблизительно следующее — "Введите кол-во вопросов", так вот я добавлю к окну ещё кнопку "OK". Как мне сделать перерисовку окна, чтобы при нажатии кнопки "OK", окно очистилоась и тогда нарисую на нем соответвенно поясняющую надпись — "Введите вопрос" и "Edit Control" и так n раз, и затем будет n edit'ов где я буду спрашивать ответы на вопросы, ну и последний вопрос, как при последней перерисовеке окна убрать с него кнопку "ОК", т.е. это показыват — тест завершен.
Перерисоввывать ничего не надо, достаточно обновлять свойства соответсствующих элементов.
GetDlgItemText( ); / SetDlgItemText( ); — читать / писать текст
GetDlgItemText( ); / SetDlgItemText( ); — читать / писать текст
CWnd::ShowWindow( isShow ? SW_HIDE : SW_SHOW ); скрыть / показать элемент управления (метод базового для них класса CWnd)
В заключении, у меня возникает большое желание обратить вас к литературе и справочной системе. В них все эти же знания, и ещё множество полезного, представленны в гораздо более систематизированной форме.
Посмтрите, на этом сайте довольно обширная коллекция рецензий. Вам нужно почитать о програмировании в Windows c использованием библиотеки MFC. В любой книжке по предмету все эти вопросы тщятельнейшим образом разжёваны.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Re[4]: использование Serialize
От:
Аноним
Дата:
26.05.06 01:39
Оценка:
Здравствуйте, Mr.ToNik, Вы писали:
MT>В заключении, у меня возникает большое желание обратить вас к литературе и справочной системе. В них все эти же знания, и ещё множество полезного, представленны в гораздо более систематизированной форме. MT>Посмтрите, на этом сайте довольно обширная коллекция рецензий. Вам нужно почитать о програмировании в Windows c использованием библиотеки MFC. В любой книжке по предмету все эти вопросы тщятельнейшим образом разжёваны.
Большое спасибо за детальный ответ. Я собсно и так изучаю статьи на RSDN, но в данном конкретном случае, без вашей помощи мне было не обойтись. Я уже пишу программу и думаю, что у меня могут возникнуть небольшие вопросы, но забивать ветку MFC простыми вопросами не хотелось бы, поэтому я прошу вас посетить мой форум, и зарегистрироваться, я буду рад если мы продолжим нашу дискуссию там.
/// Извиняюсь за оффтоп, но модерацию на свой анонимный пост я повесил сам. Т.к. я думал, что я могу самостоятельно удолять свои собщения, а аказалось — они только записываются в очередь на модерацию.
Здравствуйте, Аноним, Вы писали:
А> Большое спасибо за детальный ответ.
Пожалуйста.
А> Я собсно и так изучаю статьи на RSDN, но в данном конкретном случае, без вашей помощи мне было не обойтись.
Я имел в виду, что вам следует изучать литературу. Приобретите хорошую книжку, страниц на 800-1000. В названии должны содержаться слова "программирование с использованием MFC".
Я бы, со своей стороны порекомендовал вам "Visual C++ и MFC" А. Мешков, Ю Тихомиров, изд. BHV. Это одна из наиболее толковых книг по предмету, которые мне попадались. Систематично изложены все основы, показаны многие нетривиальные приёмы работы, приводятся даже те моменты, где в библиотеке допущенны ошибки или её повпедение неадекватно. ( такое тоже бывает). Описывается и логика программирования в Windows. Крме того, книга написанна просто и нескучно, при таком объёме это немаловажно.
Единственный минус книжки — она написанна ещё по VC6.0, по этому, хотя сама MFC практически не изменилась, многие моменты в самой среде разработчика (Studio) отричаются. Но, я уверен, в самой интегрированной среде вы сможете разобраться самостоятельно. В крайнем случае, у нас есть соответствующий форум. <b>средства разработки</b>.
Я уже пишу программу и думаю, что у меня могут возникнуть небольшие вопросы, но забивать ветку MFC простыми вопросами не хотелось бы, поэтому я прошу вас посетить мой форум, и зарегистрироваться, я буду рад если мы продолжим нашу дискуссию там.
К сожалению, не смогу присутствовать там постояно. Лучше обращайтесь к месной общественности, вас услышат. Не бойтесь быть посланными в поискили гуголь, и не бойтесь задавать вопросы. Единственное пожелание — будте более конкретны, и больше читайте.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Здравствуйте, Mr.ToNik, Вы писали:
MT>Здравствуйте, Аноним, Вы писали:
MT>К сожалению, не смогу присутствовать там постояно. Лучше обращайтесь к месной общественности, вас услышат. Не бойтесь быть посланными в поискили гуголь, и не бойтесь задавать вопросы. Единственное пожелание — будте более конкретны, и больше читайте.
Кхе-кхе, все понял. Книжку "А.Мешеков, Ю.Тихомиров — Visual c++ и MFC 2-е издание" я уже приобрел, но к сожалению из-за сжатости времени по выполнению задачи, пришлось обращаться на форумы RSDN. / Я не обязывал вас постоянно висеть на моем форуме, уж извняйте, я думал вы хоть зарегистрируйтесь, и то уже хорошо будет.
// К администрации -> Все, данную тему можно закрывать. Всем спасибо за внимание.
Здравствуйте, jason_, Вы писали:
_>Здравствуйте, Mr.ToNik, Вы писали:
MT>>Здравствуйте, Аноним, Вы писали:
MT>>К сожалению, не смогу присутствовать там постояно. Лучше обращайтесь к месной общественности, вас услышат. Не бойтесь быть посланными в поискили гуголь, и не бойтесь задавать вопросы. Единственное пожелание — будте более конкретны, и больше читайте.
_> Кхе-кхе, все понял. Книжку "А.Мешеков, Ю.Тихомиров — Visual c++ и MFC 2-е издание" я уже приобрел, но к сожалению из-за сжатости времени по выполнению задачи, пришлось обращаться на форумы RSDN.
ваш первый вопрос — с 535, сериализация.
обмен данными — с 368.
_> / Я не обязывал вас постоянно висеть на моем форуме, уж извняйте, я думал вы хоть зарегистрируйтесь, и то уже хорошо будет.
Естественно. Однако, какой смысл мне регистрироваться, если я не собираюсь его посещать?
_> // К администрации -> Все, данную тему можно закрывать. Всем спасибо за внимание.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.