Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 119

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 113 114 115 116 117 118 < 119 > 120 121 122 123 124 125 .. 204 >> Следующая

Таблица 12. 2. Свойства пунктов, добавляемых в меню New программы File MiniEdrt
идентификатор надпись другие свойства
ID_FILE_NEW &New\tCtrl+N Отсутствуют
ID_FILE_OPEN SOpen...\tCtrl+0 Отсутствуют
ID_FILE_SAVE &Save\tCtrl+S Отсутствуют
ID FILE_SAVE_AS Save SAs... Отсутствуют
Отсутствует Отсутствует Разделитель
ID FILE MRU FILE1 Recent File Недоступен
MINIEDIT.RC IDFI„MAINFRAMF; [Emjlis... fkrb
tfew CM*N
qpan CMtO
save O/WS seveat.
Рис. 12.4. Окончательное меню File для программы MiniEdit
Измените строковый ресурс с идентификатором IDRMAINFRAME, чтобы задать стандартное расширение файлов .txt по методике, применявшейся в программе MiniDraw (параграф "Добавление команд в меню File").
Строку необходимо отредактировать, чтобы она выглядела так.
MiniEdit\n\nMiniEd\nMiniEdit Files (*.txt)\n.txt\nMiniEdit.Document\nMiniEd Document
Добавление иода поддержки
Для реализации команд меню необходимо переопределить виртуальную функцию DeleteContents в виде функции класса документа CMiniEditDoc. MFC вызывает эту функцию перед созданием нового документа, открытием существующего или окончанием работы программы для удаления данных документа. Чтобы создать объявление функции и ее минимальное определение, используйте мастер ClassWizard (см. параграф "Удаление данных документа" гл. 11). К определению функции DeleteContents, сгенерированной мастером в файле MiniEditDoc.cpp, добавьте следующий фрагмент.
111111111111111П1111П1111111111111111111П11111111111111111111 II Функции класса CMiniEditDoc
void CMiniEditDoc::DeleteContents()
{
II TODO: Здесь добавьте собственный код обработчика // и/или вызов базового класса
POSITION Pos = GetFirstViewPosition();
CEditView *PCEditView = (CEditView *)GetNextview (Pos); if (PCEditView)
PCEditView->SetWindowText ("") ;
CDocument::DeleteContents() ;
)
Так как класс представления порожден от класса CEditView, текст документа сохраняется в самом окне представления. Чтобы его удалить, функция DeleteContents сначала вызывает функции GetFirstViewPosition и GetNextview класса CDocument для получения указателя на класс представления документа. Как будет описано в гл. 13, документ может иметь более одного присоединенного к нему представления. Эти две функции позволяют обращаться ко всем присоединенным представлениям. Функция GetFirstViewPosition получает индекс первого объекта представления - единственного в программе MiniEdit. Затем функция GetNextview возвращает указатель на этот объект и заменяет параметр Pos индексом следующего представления в списке или присваивает параметру Pos значение 0, если другие представления отсутствуют (как в данном случае). Обратите внимание: функция GetNextview может изменять значение параметра Pos, передаваемого как ссылочный параметр.
Примечание
Класс CEditView присваивает окну предстааления класс EDIT. Окно, принадлежащее этому классу, называется текстовым элементом управления (или редактируемым полем). При его поддержке не только сохраняется отображаемый текст, но и обеспечивается большой набор средств редактирования.
Если функция GetNextview возвращает ненулевой адрес объекта представления, то функция DeleteContents использует его для вызова функции CWnd:: SetWindowText, чтобы записать в окно пустую строку, тем самым удаляя текст документа. Если же GetNextview возвращает нулевое значение, то DeleteContents не удаляет текст документа. При завершении программы MFC удаляет объект представления, а затем вызывает функцию DeleteContents. В этом случае функция GetNextview возвращает нуль, потому что объект представления удален, и у DeleteContents нет необходимости удалять текст.
Примечание
Размер буфера, используемого для хранения текста, ограничивается приблизительно 50 Кбайтами. При попытке открыть файл большего размера класс CEditView выводит предупреждение и не читает файл. При вводе текста большего объема прием символов прекращается без предупреждения.
Чтобы реализовать технологию "drag-and-drop", включите вызов функции DragAcceptFiles в функцию Initlnstance в файле MiniEdit.срр.
BOOL CMiniEditApp::Initlnstance() {
// Другие функции ...
if (!ProcessShellCommand(cmdlnfо)) return FALSE;
m_pMainWnd->DragAcceptFiles () ;
return TRUE;
}
В программе MiniEdit не нужно устанавливать флаг изменений (как в программе MiniDraw), так как класс CEditView делает это автоматически.
Примечание
В программе MiniEdit не нужно изменять функцию serialize класса документа, поскольку при построении класса представления из класса CEditView мастер AppWizard автоматически добавляет требуемый код в Serialize. Этот код вызывает функцию SeriaiizeRaw класса CEditView, которая читает и записывает данные, отображаемые окном представления в виде чистого текста (т.е. информация о классе или версии не сохраняется в файле).
Функции Read и Write класса CArchive
В этой главе рассматривались чтение и запись переменных, относящихся к базовым типам данных, с помощью перегруженных операторов « и » класса CArchive, а также чтение и запись объектов с помощью функции Serialize. Класс CArchive предоставляет также функции Read и Write для чтения или записи произвольных блоков данных, например, структуры или текстового буфера.
Предыдущая << 1 .. 113 114 115 116 117 118 < 119 > 120 121 122 123 124 125 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100