Рисующее приложение в версии .NET, страница 14

Сохранение рисунков в файле происходит аналогичным образом. Вам придется ввести обработчик команды меню Save, выбрав в качестве имени все ту же функцию MenuItemHandler, затем ввести в класс главного окна функцию Save и добавить в класс документа новую функцию SaveDocument. Для ускорения дальнейшей разработки советую сразу ввести один и тот же обработчик MenuItemHandler для всех оставшихся команд меню.

private void Save()

{

DrawView view = (DrawView)this.ActiveMdiChild;

SaveFileDialog dlg = new SaveFileDialog();

dlg.Filter = "Draw Files (*.img)|*.img|All Files (*.*)|*.*";

dlg.DefaultExt = ".img";

dlg.FileName = "Draw1.img";

DialogResult res = dlg.ShowDialog ();

if (res == DialogResult.OK)

view.GetDocument().SaveDocument(dlg.FileName);

}

public void SaveDocument(string fileName)

{

try

{

Stream s = File.Open(fileName, FileMode.Create);

BinaryFormatter fmt = new BinaryFormatter();

fmt.Serialize(s, lineList);

s.Close();

isDirty = false;

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

}

В настоящий момент ваше приложение должно создавать рисунки, сохранять их в файлах с расширением img, затем открывать эти файлы и вновь воспроизводить рисунки в окнах документов.

Функция обработки событий панели инструментов

Как вы, вероятно, заметили кнопки на панели инструментов пока бездействуют. В соответствии со стандартом их нажатие должно дублировать соответствующие команды меню. В Visual С++ для этого достаточно было задать для кнопок те же идентификаторы, что и для команд меню. Но здесь нам придется немного поработать.

¨  Переведите фокус в окно MainWindow.cs[Design], щелкните на панели инструментов и убедитесь, что в окне Properties появился идентификатор нашей панели инструментов toolBar.

¨  В окне Properties нажмите кнопку Events, выберите событие Button Click и дважды щелкните на нем.

¨  Откроется окно с кодами класса, в котором вы увидите каркас функции обработки toolBar_ButtonClick.

Структура этой функции будет такой же как и функции MenuItemHandler, но вместо анализа первого параметра sender, производится анализ второго аргумента, который представляет собой ссылку на объект класса ToolBarButtonClickEventArgs, производного от класса EventArgs. Класс имеет свойство Button, которое дает доступ к объекту класса ToolBarButton. Свойствами последнего мы пользовались при создании облика панели инструментов. Это происходило в диалоге ToolBarButton Collection Editor. Здесь же проверяется лишь свойство Button той кнопки, которую нажал пользователь (то есть адрес конкретного объекта класса ToolBarButton).

private void toolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e)

{

if (e.Button == toolBarButtonNew)

New();

else if (e.Button == toolBarButtonOpen)

Open();

else if (e.Button == toolBarButtonSave)

Save();

else if (e.Button == toolBarButtonPreview)

PrintPreview();

else if (e.Button == toolBarButtonPrint)

Print();

else if (e.Button == toolBarButtonHelp)

ShowHelpTopics();

}

Вы можете проверить функционирование кнопок при условии, что закомментируете вызовы еще не существующих функций.


Немного о GDI+

¨  Graphics Interchange Format (GIF). GIF is a common format for images that appear on Web pages. GIFs work well for line drawings, pictures with blocks of solid color, and pictures with sharp boundaries between colors. GIFs are compressed, but no information is lost in the compression process; a decompressed image is exactly the same as the original. GIF files can store only colors with 1, 2, 4, or 8 bits per pixel.

¨  Joint Photographic Experts Group (JPEG). JPEG is a compression scheme that is used for natural scenes such as scanned photographs. Some information is lost in the compression process, but often the loss is imperceptible to the human eye. JPEGs store 24 bits per pixel, so they are capable of displaying more than 16 million colors.