Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
65-96.doc
Скачиваний:
5
Добавлен:
11.11.2019
Размер:
340.99 Кб
Скачать

Установка флага изменений

Класс CDocument поддерживает флаг изменений, показывающий, содержит ли документ не сохраненные данные. MFC проверяет этот флаг перед вызовом функции DeleteContents() класса документа для удаления данных. MFC вызывает функцию DeleteContents() перед созданием нового документа, открытием уже существующего или выходом из программы. Если флаг содержит значение TRUE (в документе имеются не сохраненные данные), то выводится соответствующее сообщение. Класс CDocument устанавливает значение флага в FALSE, когда документ открыт и сохранен. Для установки флага в TRUE (при каждом изменении данных документа) вызывается функция CDocument::SetModifiedFlag(). Так как параметр функции SetModifiedFlag() имеет стандартное значение TRUE, флаг изменений можно установить в TRUE, вызывая эту функцию без аргументов. Чтобы установить флаг изменений в FALSE, необходимо явно передать это значение (обычно эту задачу выполняет класс CDocument).

  1. Добавьте вызов функции SetModifiedFlag() в функцию CMуPaintDoc::AddLine() в файле MуPaintDoc.cpp.

void CMуPaintDoc::AddLine(int X1, int Y1, int X2, int Y2) { CLine *PLine = new CLine(X1, Y1, X2, Y2); m_LineArray.Add(PLine); SetModifiedFlag(); }

  1. Повторите такие же действия для функции OnEditClearAll() в том же файле.

void CMуPaintDoc::OnEditClearAll() { DeleteContents (); UpdateAllViews (0); // TODO: Add your command handler code here SetModifiedFlag(); }

  1. В функцию OnEditUndo() файла MуPaintDoc.cpp добавьте вызов функции SetModifiedFlag().

void CMуPaintDoc::OnEditUndo() { // TODO: Add your command handler code here int Index = m_LineArray.GetUpperBound (); if (Index > -1) { delete m_LineArray.GetAt (Index); m_LineArray.RemoveAt (Index); } UpdateAllViews (0); SetModifiedFlag (); }

  1. Скомпонуйте программу и запустите ее на выполнение.

Регистрация типа файла

В системный реестр Windows следует добавить информацию, позволяющую открыть файл программы MуPaint (т.е. файл с расширением .drw), выполняя двойной щелчок на файле в папке или в окне программы Explorer, или любом другом окне, поддерживающем указанную операцию. Для этого вызовите функции EnableShellOpen() и RegisterShellFileTypes() класса CWinApp из определения функции InitInstance() в файле MуPaint.cpp.

BOOL CMуPaintApp::InitInstance() { // Standard initialization //. . .... AddDocTemplate (pDocTemplate); EnableShellOpen (); RegisterShellFileTypes (); //Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; //. . . }

Эти функции создают в реестре Windows связь между стандартным расширением файла программы MуPaint (.drw) и самой программой. Объект, представляющий любой файл с этим расширением, отображает значок программы MуPaint, а двойной щелчок на объекте запускает программу MуPaint, если она еще не запущена, и открывает файл в этой программе. Такая связь остается в реестре до тех пор, пока она не будет изменена явным образом с использованием программы Explorer или другого средства.

Вызовы функций EnableShellOpen() и RegisterShellFileTypes() помещаются после вызова функции AddDocTemplate(), добавляющей шаблон документа в приложение, чтобы информация о стандартном расширении файла и типе документа была доступна объекту приложения. (Стандартное расширение вводится в строковый ресурс с идентификатором IDR_MAINFRAME, который передается в шаблон.)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]