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

 

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

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

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

Установка флага изменений
Класс CDocument поддерживает флаг изменений, показывающий, содержит ли документ не сохраненные данные. MFC проверяет этот флаг перед вызовом функции DeleteContents класса документа для удаления данных. MFC вызывает функцию DeleteContents перед созданием нового документа, открытием уже существующего или выходом из программы. Если флаг содержит значение true (в документе имеются не сохраненные данные), то выводится соответствующее сообщение.
Класс CDocument устанавливает значение флага в FALSE, когда документ открыт и сохранен. Для установки флага в TRUE (при каждом изменении данных документа) вызывается функция CDocument::SetModifiedFlag. Добавьте вызов функции SetModif iedFlag в функцию AddLine в файле MiniDrawDoc.cpp.
void CMiniDrawDoc: .-AddLine (int XI, int VI, int X2, int Y2)
(
CLine *PLine = new CLine (XI, У1, X2, Y2); m_LineArray.Add (PLine); SetModifiedFlag ( );
}
Теперь проделайте то же самое для функции OnEditClearAll в том же файле.
void CMiniDrawDoc::OnEditClearAll() (
// TODO: Здесь добавьте собственный код обработчика
DeleteContents (); UpdateAllViews (0); SetModifiedFlag ( );
)
И, наконец, добавьте вызов функции SetModif iedFlag в обработчик OnEditUndo в файле MiniDrawDoc.cpp.
void CMiniDrawDoc::OnEditUndo() (
// TODO: Здесь добавьте собственный код обработчика
int Index = m_LineArray.GetUpperBound (); if (Index > -1) {
delete m_LineArray.GetAt (Index); m_LineArray.RemoveAt (Index); }
UpdateAllViews (0); SetModifiedFlag ();
}
Так как параметр функции SetModif iedFlag имеет стандартное значение true, флаг изменений можно установить в true, вызывая эту функцию без аргументов. Чтобы установить флаг изменений в false, необходимо явно передать это значение (обычно эту задачу выполняет класс CDocument).
Поддержка технологии "drag-and-drop"
Если программа поддерживает традиционную технологию "drag-and-drop", можно открывать файл, перемешая объект файла из папки Windows (а также из окна программы Explorer или любого другого окна, поддерживающего эту операцию) и отпуская его в окне программы.
Для поддержки операции перетаскивания в программе MiniDraw вызовите функцию CWnd: : DragAcceptFiles для объекта главного окна. Поместите это обращение внутри функции Initlnstance класса приложения в файле MiniDraw.cpp после вызова UpdateWindow.
BOOL CMiniDrawApp::Initlnstance( ) {
// другие операторы
if (!ProcessShellCommand(cmdlnfо)) return FALSE;
mj?MainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow() ;
m_pMainWnd->DragAcceptFiles () ;
return TRUE;
}
Объект приложения содержит переменную mpMainWnd (определенную в классе CWinThread, базовом для CWinApp), являющуюся указателем на объект главного окна. Функция Initlnstance использует этот указатель для вызова функции DragAcceptFiles. Обращение к ней помещается после вызова функции
ProcessShellCommand, так как внутри последней создается главное окно и присваивается значение переменной m_pMainWnd.
После вызова функции DragAcceptFiles (когда пользователь отпускает перетаскиваемый значок файла) MFC автоматически открывает файл, создает объект класса CArchive и вызывает функцию Serialize. Следовательно, для поддержки операции перетаскивания писать дополнительный код не нужно.
Регистрация типа файла
В системный реестр Windows следует добавить информацию, позволяющую открыть файл программы MiniDraw (т.е. файл с расширением .drw), выполняя двойной щелчок на файле в папке Windows или в окне программы Explorer (или любом другом окне, поддерживающем указанную операцию). Для этого вызовите функции EnableShellOpen и RegisterShellFileTypes класса CWinApp из определения функции Initinstance в файле MiniDraw.cpp.
BOOL CMiniDrawApp::Initinstance() {
// другие операторы ...
AddDocTemplate (pDocTemplate);
EnableShellOpen (); RegisterShellFileTypes ();
// Анализ командной строки с целью поиска команд // оболочки, DDE, открытия файлов
CCommandLinelnfo cmdlnfo;
// другие операторы ...
}
Эти функции создают в реестре Windows связь между стандартным расширением файла программы MiniDraw (.drw) и самой программой. Объект, представляющий любой файл с этим расширением, отображает значок программы MiniDraw, а двойной щелчок на объекте запускает программу MiniDraw, если она еще не запущена, и открывает файл в этой программе. Такая связь остается в реестре до тех пор, пока она не будет изменена явным образом с использованием программы Explorer или другого средства.
Заметьте: обращения к функциям EnableShellOpen и RegisterShellFileTypes помещаются после вызова функции AddDocTemplate, добавляющей шаблон документа в приложение, чтобы информация о стандартном расширении файла и типе документа была доступна объекту приложения. (Стандартное расширение ВВОДИТСЯ В СТРОКОВЫЙ ресурс С идентификатором IDRMAINFRAME, КОТОрЫЙ
передается в шаблон.)
Мы рассмотрели изменения, вносимые в программу MiniDraw. Теперь ее можно скомпилировать и выполнить.
Исходный текст программы ШпЮгам
В следующих листингах (12.1 - 12.8) приведены тексты программы МшШгаш. Исходные файлы программы содержатся в каталоге \MiniDrw3 прилагаемого компакт-диска.
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100