Как сделать многооконное приложение c
После запуска C++ Builder в вашем распоряжении имеется только одна форма Form1 – стартовая форма будущего приложения для Windows. Если вы хотите построить приложение, использующее в своей работе, например, три окна – кликните мышью на значок New Form (Новая форма) два раза. Вы получили две новые формы: Form2 и Form3. Такого же результата можно добиться по-другому. А именно в меню File выберите команду New, а затем Form. Во время работы приложения на экране могут одновременно отображаться все три формы, или любые две, либо любая одна из них. Для того чтобы из любой формы можно было управлять остальными формами, их файлы Unit1.h, Unit2.h и Unit3.h необходимо связать. В заголовочной части файла Unit1.cpp для первой формы нужно дописать директивы:
Расположите их под уже имеющейся директивой, которую сгенерировала сама среда разработки во время создания первой формы:
Для второй и третьей форм сделать аналогичные записи в файлах Unit2.cpp и Unit3.cpp. После этого формы начнут «чувствовать» друг друга – станет возможно управление из любой формы оставшимися другими. Если в процессе разработки многооконного приложения какая-либо из форм окажется недоступной, для ее появления на экране выберите в меню View (Просмотр) команду Forms… (Формы) или с клавиатуры отработайте клавишный аккорд Shift+F12. Можно просто кликнуть на соответствующий значок с изображением нескольких форм.
На базе связанных между собой форм можно смело приступать к построению многооконного приложения. Для вызова из одной формы другой можно воспользоваться методом Show(), который загрузит указанную форму в оперативную память компьютера и покажет ее на экране. Метод Hide() скрывает форму от взора пользователя, без выгрузки ее из оперативной памяти. Например, строка программного кода, написанная в подходящей процедуре прерывания первой или второй формы, покажет на экране третью форму:
Form3->Show(); //показать третью форму
Убрать эту форму с экрана без выгрузки из оперативной памяти можно с помощью инструкции:
Form3->Hide(); //скрыть третью форму
Полностью закрыть форму можно с помощью инструкции:
Form3->Close(); //выгрузить третью форму
Построим многооконное приложение, состоящее из двух довольно самостоятельных частей. Первая часть будет информировать пользователя о текущих времени и дате, а также будет содержать календарь. Вторая часть предоставит в руки пользователя виртуальный генератор звуковых волн. Такой генератор будет интересен и полезен тем, кто увлекается физикой.
Создайте приложение на базе трех форм и свяжите их между собой. Общие размеры всех форм уменьшите примерно в два раза и расположите их пока произвольно в разных частях экрана. Измените заголовки каждой формы приложения. Пусть окна будут называться: «Главное меню», «Электронные часы. Календарь» и «Виртуальный генератор звуковых волн». Снабдите первую и вторую форму подходящими фоновыми рисунками с помощью знакомого уже вам компонента Image.
На первой форме установите две электронные кнопки. Увеличьте их ширину в два-три раза, для того чтобы их можно было подписать «Электронные часы» и «Виртуальный генератор» соответственно. Напишите функцию обработки Button1Click:
Form2->Show(); //показать вторую форму
Form1->Hide(); //скрыть первую форму
Затем для второй кнопки напишите функцию обработки Button2Click:
Form3->Show(); //показать третью форму
Form1->Hide(); //скрыть первую форму
Form1->Show(); //показать первую форму
Form2->Hide(); //скрыть вторую форму
Обустройте третье окно аналогично второму, соответственно изменив программный код. У второй и третьей форм удалите три кнопки управления окном. Для этого обратитесь к их составному свойству BorderIcons, которое отвечает за вид окна, кликнув на «плюс». Чтобы исчезли кнопки управления окном, свойству biSystemMenu (Системное меню) придайте значение false.
Запустите приложение на исполнение. Посредством электронных кнопок попробуйте управлять многооконным приложением для Windows. Если все окна корректно появляются и исчезают, то можно достроить второе и третье окна, так чтобы они отвечали задуманному нами в самом начале назначению.
На вторую форму добавьте компоненты Label1 и Label2. Сюда же установите компонент Timer1 из вкладки System и компонент MonthCalendar1 (Ежемесячный календарь) из вкладки Win32. Для компонента Timer1 его свойству Interval придайте значение 10. В функцию обработки Timer1Timer запишите инструкции:
Label1->Caption = Date(); //показать дату
Label2->Caption = Time(); //показать время
Через каждую одну сотую секунды (10 миллисекунд) дата и время будут обновляться. Если вы хотите чтобы дата и время одновременно выводились в одном поле вывода текста Label1, то две предыдущие инструкции можно заменить одной:
Label1->Caption = Now(); //показать дату и время
Если вам необходимо чтобы календарь показывал на экране несколько месяцев одновременно, значительно увеличьте размеры компонента MonthCalendar1. При этом размеры второй формы можно и не увеличивать, так как если ежемесячный календарь не сможет разместиться на форме по размерам, автоматически появятся полосы прокрутки по вертикали и горизонтали.
После проверки функций второго окна, можно приступать к построению третьего окна, которое будет представлять виртуальный генератор звуковых волн.
На третью форму добавьте компоненты Button2, Label1, TrackBar1, Image1, Image2. Компонент TrackBar1 (Движок-регулятор) можно извлечь из вкладки Win32. Ширину компонента TrackBar1 увеличьте примерно в два-три раза. Свойству Max (Максимальное положение движка) этого компонента придайте значение 50. Очистите свойство Caption у компонента Label1. В функцию обработки Button2Click впишите инструкцию, которая будет генерировать колебания звуковой частоты:
Beep(TrackBar1->Position*100, 1000); //звук
Этот оператор, отвечающий за генерацию звука, имеет два аргумента. Первый задает частоту звука в герцах, второй – длительность в миллисекундах. Свойство Position (Позиция движка) компонента TrackBar1 управляет изменением частоты звука. В нашем случае можно получить звук частотой от 100 до 5000 Гц с шагом в 100 Гц длительностью в одну секунду. Электронную кнопку Button2Click назовите «Пуск». Генератор уже работоспособен, но для вывода информации о частоте звука необходимо в функцию обработки TrackBar1Change (Изменение позиции движка) записать инструкцию:
Label1->Caption = "Частота звука = " +
Заметьте, здесь одна инструкция записана с переносом, а поэтому расположилась в двух строках.
Запустите приложение и проверьте работоспособность третьего окна. Поэкспериментируйте с оператором звука Beep, изменяя оба его аргумента. Будьте осторожны с величиной второго аргумента, так как он отвечает за время звучания.
Добавьте в окно генератора простейшую анимацию. Для этого вставьте два подходящих изображения, которые будут отображать состояние генератора, в поля компонентов Image1, Image2. Этими изображениями могут быть, например, обезьяна в двух разных состояниях. Когда генератор молчит – обезьяна в задумчивости, когда присутствует звук – обезьяна улыбается разводит руки. Оба изображения наложите, друг на друга, так как появляться они будут в разное время. Свойству Visible компонента Image2 придайте значение false. Теперь функция обработки Button2Click будет выглядеть так:
Beep(TrackBar1->Position*100, 1000); //звук
Image1->Visible = true; //показать первый рисунок
Image2->Visible = false; //скрыть второй рисунок
Необходимо так же будет написать функцию обработки Button2MouseDown:
Image1->Visible = false; //скрыть первый рисунок
Image2->Visible = true; //показать второй рисунок
Запустите приложение. Посмотрите, как теперь работает виртуальный генератор в сопровождении анимации.
Самостоятельно достройте третье окно, так чтобы можно было регулировать длительность звучания, например, до трех секунд с шагом в полсекунды. Для регулировки длительности звука воспользуйтесь компонентом TrackBar2. Для вывода информации о длительности звукового сигнала используйте компонент Label2.
Microsoft Visual Studio 2005 позволяет создавать две разновидности многооконных приложений: SDI - и MDI-приложения. SDI-приложения состоят из нескольких независимых форм (окон). По умолчанию будет создано SDI-приложение. В MDI-приложении имеется одна главная форма, остальные формы находятся в пределах главной; из главной формы можно управлять подчиненными формами. Единственное меню MDI-приложения находится в главном окне.
Перед созданием многооконного приложения его необходимо проектировать: продумать вопрос о том, какие окна нужны и что на них будет отображено. Форма – это разновидность класса. Экземпляры классов, как известно, необходимо создавать. Это правило распространяется и на формы: автоматически создается лишь одна форма – главная. Создание всех остальных форм лежит на программисте. Закрытие формы функцией Close(); или нажатием на кнопку вызывает уничтожение формы, и в случае необходимости она должна быть создана заново.
В принципе, любую задачу можно решить как с помощью SDI-приложения, так и с помощью MDI-приложения. Пожалуй, создание SDI-приложения проще. MDI-приложение можно рекомендовать при необходимости создать и работать одновременно с несколькими одинаковыми формами. Сам Microsoft Visual Studio 2005 является SDI-приложением.
4.5.1. Создание sdi-приложения
Пусть наше приложение содержит следующие формы:
главная форма с меню;
форма для определения режимов работы программы;
форма «О программе» (About);
форма для ввода исходных данных и вывода результата.
В момент запуска приложения на экране появляются первые две формы, остальные появляются при выборе соответствующего пункта меню.
Пусть меню имеет следующую структуру:
File Windows Help
Главная форма содержит только меню, и поэтому она здесь не приводится. Форма для определения режимов работы (Form2) программы приведена на рис. 4.4.
Две радиокнопки имеют имена rB1 и rB2; две кнопки выбора –имена cB1 и cB2; строка редактирования textBox1. Реализация единственной командной кнопки: Hide(); (убрать с экрана, но не уничтожить, в таком случае ее можно позже только открыть, нет необходимости ее заново создавать).
Занесение на форму перечисленных компонентов ничем не отличается от рассмотренного выше и мы на этом останавливаться не будем. В связи с тем, что эта форма участвует в многооконном приложении, требуется выполнить дополнительные действия.
Во избежание случайного закрытия этой формы уберем с нее кнопку . Для этого дадим ее свойству ControlBox значение False. В нашем приложении мы предусмотрим только открытие этой формы во время работы приложения. Ее создание выполняется автоматически при запуске. Поэтому при случайном ее закрытии (с уничтожением) пользователь лишен возможности ее заново создать.
Необходимо обеспечить доступ к радиокнопкам, кнопкам выбора и строке редактирования извне. По умолчанию они имеют атрибут доступа private и являются переменными своего класса (в нашем случае Form2). Для этого их свойствам Modifiers дадим значение public.
Желаемое местоположение формы обеспечивается изменением значений двух ее свойств: для StartPosition выберем значение Manual и для Location задаем подходящие значения координат X и Y верхнего левого угла. Таким образом можем подбирать местоположение любой формы, в том числе и главной.
Для обеспечения создания и открытия формы при запуске приложения в класс главной формы внести следующие дополнения:
Объявление Form2 f2; в раздел переменных.
В конструктор Form1 добавить
f2 = new Form2();
5. Реализация пункта меню Open Dialog: f2.Show();
Для создания формы «О программе» используем заготовку: ставим курсор мыши на имя нашего приложения, нажмем правую клавишу, из выпадающего меню выберем Add – New Item, затем из списка About Box и нажмем на кнопку Add. На экране появится заготовка формы «О программе». На ней имеются компоненты типа Label, поэтому внесение изменений в заготовку не вызывает трудностей. Реализация единственной кнопки этой формы Close();
Реализация пункта меню About:
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
AboutBox1 ab1;
ab1 = new AboutBox1();
ab1.ShowDialog();
Возникает вопрос: какая разница между двумя способами открытия форм ShowDialog()и Show()? При открытии формы через ShowDialog()заблокируется доступ к другим формам, пока эта форма не закрыта. При открытии через Show()на экране компьютера появится еще одна форма, но между открытыми формами можно переключаться.
Внешний вид формы (Form3) для ввода исходных данных и вывода результата показан на рис. 4.5. Для ввода одномерного массива используем строку. При работе с этой формой необходимо ссылаться на переменные диалоговой формы (Form2). Но они являются переменными другого класса, поэтому ссылка на них возможна только через указатель на экземпляр соответствующего класса. Для обеспечения такой ссылки включим в число переменных Form2:
public Form2 f22;
Реализация пункта меню New:
private void newToolStripMenuItem_Click(object sender, EventArgs e)
f3 = new Form3();
f3.f22 = f2; //для обеспечения ссылки на диалоговое окно
Реализация командной кнопки «Вычислить» (в зависимости от состояния кнопок выбора вычисляют или нет сумму/произведение; в зависимости от состояний радиогруппы обрабатывают числа больше/меньше заданного в диалоговом окне значения):
Многооконная структура программы
Перетаскивание файлов в приложение
Часть урока для новичков
Приложения MDI и приложения SDI.
Прежде чем устанавливать вид и свойства вашего приложения надо подумать о том, какой вид приложения вы желаете создать. Это во многом зависит от его функционального назначения. Можно выбирать между так называемыми MDI- или SDI-приложениями.
MDI - сокращенно от Multiple Document Interface (интерфейс для одновременной работы со многими документами), а SDI - от Single Document Interface (интерфейс для работы с одним документом). В MDI приложениях два или более окон могут быть активны одновременно. В SDI-приложениях это невозможно. Здесь в каждый момент времени может быть активным только одно окно.
MDI -приложения являются удобным средством для одновременного выведения на экран текста или данных, которые хранятся в различных файлах. Такую структуру построения окон можно использовать для редактирования текстов, открывая и выводя на экран одновременно несколько различных документов. С помощь этих приложений можно также производить табличные вычисления, обрабатывая несколько таблиц одновременно, перенося или сравнивая данные из одной в другую. Пример такой работы над файлами - программа MS Word. Здесь файлы текстового и графического формата открываются в отдельных окнах, находящихся внутри главного окна программы.
Различные открываемые документы в окнах имеют общее рабочее пространство, в пределах которого они отображаются, называемое родительским окном. Всегда в MDI-приложении родительское окно является главной формой приложения. Все внутренние формы, называемые дочерними окнами отображаются в пределах рабочего пространства родительского окна и не могут быть помещены за ее пределы. Даже при свертывании. При максимизации таких окон, они занимают все рабочее пространство родительского окна, оставаясь внутри его.
Родительское окно может быть в MDI-приложениях только одно, а дочерних окон может быть теоретически бесконечно.
Большинство MDI-приложений имеют меню " Window " ("Окно") со следующими пунктами: Cascade, Arrange Icons, Tile Horizontal, Tile Vertical . С их помощью пользователь может управлять дочерними окнами приложения. Обычно нижняя часть меню отделена и представляет список всех открытых окон. Это свойство весьма удобно для быстрого перехода к тому или иному редактируемому файлу.
Все SDI-окна можно разделить по свойствам доступа друг к другу как модальные и немодальные. Они определяют, может пользователь или нет переключаться на другие окна. Когда модальное окно открыто, все другие открытые окна становятся недоступными. Пример можно увидеть практически из любой программы, вызвав пункт меню "About" ("О программе"). Отображаемое окно в приложении, как правило, не дает переключится на другое, пока не будет закрыто. Такое свойство иногда бывает очень полезным. Например, когда нужно чтобы пользователь ввел пароль, а затем получил доступ к определенному окну с данными, или окно фильтра данных, указав условия отбора, получает доступ к результату.
Итак, модальными или немодальными могут быть только SDI-окна.
С сегодняшнего урока мы с вами начинаем разрабатывать довольно сложный пример простого многооконного текстового редактора.
-
Запускаем Delphi. В меню "File" выбираем пункт "New Application".
Поскольку в этом окне создается другое, то в переименованный модуль MainUnit необходимо подключить ChildUnit . Для этого выбираем из меню " File " пункт "Use Unit: " и указываем модуль ChildUnit . Нажимаем OK.
Все, запускаем программу на выполнение. Во время работы обратите внимание на список появившихся окон в меню "Окна", по которым удобно переключаться на необходимое окно.
В следующих уроках мы подробнее остановимся на написании этого примера. Если в этом уроке у вас что-то не получается, то пример на данном этапе разработки можно скачать здесь (2 KB). Если вы в последствии открываете свой или скаченный проект, не забывайте, что нужно открывать DPR файл.
Часть урока для продвинутых программистов
Перетаскивание файлов в приложение
Иногда очень полезно избавить пользователя от лишних операций при открытии файла. Он должен нажать на кнопку "Открыть", затем найти интересующий каталог, выбрать файл. Проще перетащить мышкой файл сразу в окно приложения. Рассмотрим пример перетаскивания Drag & Drop в окно произвольного текстового файла, который сразу же открывается в компоненте Memo1.
Для начала в разделе Uses необходимо подключить модуль ShellAPI .
В private области окна нужно вставить следующую строку:
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char; // переменная, хранящая имя файла
begin
try
If DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH)>0 then // получение пути файла
begin
Form1.Caption:=CFileName; // имя файла в заголовок окна
Memo1.Lines.LoadFromFile(CFileName); // открываем файл
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop); // отпустить файл
end;
end;
Для того, чтобы форма знала, что может принимать такие файлы, необходимо в процедуре создания окна указать:
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
Целью данной части главы будет закрепление навыков работы с оконными приложениями. Мы рассмотрим на примере, как создаются элементы меню, панели инструментов, увидим, как создаются и вызываются дополнительные диалоговые окна, как работать с окнами выбора файлов. Также мы познакомимся еще с несколькими элементами управления и научимся динамически загружать изображения в форму.
Первоначально, создайте новый проект, указав в качестве шаблона Windows Form Application и назовите second_application. Затем нажмите OK.
Здесь все предельно просто: чтобы добавить меню в приложение, сначала откройте окно Toolbox (Панель элементов).
Нам потребуется разворот Menus & Toolbars (Меню и панели инструментов). В нем нас интересует элемент MenuStrip (рис. 1).
Рисунок 1. Выбор элемента для созданию меню.
Зажмите его левой клавишей мыши и перетащите на форму. На нашей форме отразиться элемент меню, как показано на рисунке 2.
Рисунок 2. Создание элементов меню.
Теперь, щелкнув на строке «введите здесь» вы можете ввести название меню: назовем его «File». При этом добавятся 2 дополнительных элемента – один снизу, он будет доступен при открытии меню, второй справа - для создания новых разделов меню (рис. 3).
Рисунок 3. Процесс добавления элементов меню.
Перед нами откроется код функции обработчика:
Так как этот элемент меню отвечает за выход из приложения, добавим в него код, который будет генерировать MessageBox с вопросом о подтверждении выхода из приложения. Если пользователь подтвердит выход – приложение будет завершено.
Новый код функции с комментариями:
Теперь можно откомпилировать приложение и проверить работоспособность кнопки.
Часто панель управления (Toolbar) дублирует элементы меню для быстрого к ним доступа.
Нам снова нужно перейти к окну Toolbox (Панель инструментов) и развороту Menus & Toolbars. В этот раз мы выберем элемент ToolStrip (рис. 5).
Рисунок 5. Окно Toolbox.
Перетащите элемент управления на окно и вы увидите, как вдоль его верхней границы разместиться панель ToolBar (рис. 6).
Рисунок 6. Добавленный элемент Toolbar.
Мы изменим положение привязки нашего ToolBar’a. Для этого щелкнем по нему правой кнопкой и в открывшемся контекстном меню выберем пункт Свойства. Откроется окно свойств: здесь мы изменим привязку на левую часть окна, внеся изменения в параметр Dock, как показано на рисунке 7.
Рисунок 7. Привязка панели инструментов к левой стороне.
Теперь увеличим размеры кнопок на Toolbar'e. Для этого сначала необходимо в его свойствах установить параметр AutoSize равным false. Теперь мы можем изменить размеры самих кнопок: установим параметры Size - Width равным 44. Поле станет шире (рис. 8).
Рисунок 8. Установка размеров изображений, размещаемых на кнопках создаваемого Toolbar.
Теперь добавим 3 кнопки на наш ToolBar. Для этого щелкните по нему и в раскрывающемся списке элементов, которые мы можем добавить, выберите элемент button (рис. 9).
Рисунок 9. Добавление кнопок на панель элементов (Toolbar).
Повторите операцию, чтобы кнопок на панели стало две. Теперь поочередно выберите каждую кнопку и в ее свойствах установите AutoSize равный false. После это перейдите к полю Size и установите высоту равную 42. Теперь кнопки примут квадратный вид.
Мы будем использовать 3 следующих изображения:
Изображение для кнопки 1: будет назначено кнопке, отвечающей за открытие дополнительного диалогового окна.
Два следующих изображения будут назначены кнопкам, которые будут отвечать за загрузку файлов jpg и png.
Изображение для кнопки 2.
Изображение для кнопки 3.
(. ) Обратите внимание, что у данных изображений прозрачный фон.
2 кнопки будут дублировать меню с функциями загрузки изображений, 1-я кнопка будет предназначена для вызова окна, с отображением картинки, которую мы загрузили.
Теперь для установки изображений необходимо перейти в свойства картинки, после чего мы установим значение параметра ImageScaling равным none, чтобы изображение не масштабировалось. Теперь в параметре Image мы можем выбрать изображение для загрузки, как показано на рисунке 11.
Рисунок 11. Установка изображений на кнопки.
В процессе выбора откроется окно, показанное на рисунке 12.
Рисунок 12. Импорт рисунка для установки на кнопке.
Теперь щелкните на кнопке Import и выберите необходимый рисунок. Аналогично повторите с другими рисунками. В результате вы получите 3 красивые кнопки, как показано на рисунке 13.
Рисунок 13. Пример созданной панели инструментов.
Для того чтобы создать обработчики нажатий на кнопки этого ToolBox'а, достаточно совершить двойной щелчок мыши на каждом из них – MS Visual Studio автоматически сгенерирует код обработчик события и заготовки функций.
В будущем мы добавим вызов необходимых нам функций из этого обработчика.
Чтобы пользователь мог выбирать файл для загрузки через стандартное в Windows окно загрузки файлов, мы выполним следующие действия.
Перейдите к окну ToolBox (Панель элементов).
Теперь перетащите элемент управления OpenFileDialog (рис. 15) на форму.
Рисунок 15. Добавление элемента OpenFileDialog.
Местоположение, куда вы перетащите элемент, неважно: он добавится в поле под окном, к другим специфическим объектам (рис. 16).
Рисунок 16. Элемент OpenFileDialog, расположенный под редактируемой формой.
Как видно из рисунка 16, к дополнительным элементам, уже установленным на наше окно (меню и ToolBox), добавился еще и элемент OpenFileDialog1.
Теперь мы реализуем код открытия окна выбора файла, с необходимыми нам параметрами.
Если вы еще не создали обработчики нажатия на кнопки загрузки и элементы меню, так же предназначенные для загрузки, сделайте это с помощью двойных щелчков по ним.
Код сгенерированных функций выглядит следующим образом:
Теперь напишем следующую функцию LoadImage.
Далее функции обработчики нажатий пунктов меню и кнопок на панели управления реализуют вызов функции загрузки с необходимым флагом.
Добавление и вызов дополнительного диалогового окна
Для этого перейдите к окну Solution Explorer (Обозреватель решений), после чего щелкните на названии проекта правой кнопкой мыши и в открывшемся контекстном меню выберите Add->Form, как показано на рисунке 18.
Рисунок 18. Добавление в проект нового диалогового окна.
В открывшемся окне введите названия класса, который будет отвечать за генерацию нашего вспомогательного окна – Preview.cs (рис. 19).
Рисунок 19. Установка названия создаваемой формы для нового диалогового окна.
Теперь измените размер окна так, как показано на рисунке 20. Затем на форме разместите элемент panel. Внутри элемента panel разместите элемент pictureBox, как показано на рисунке 20.
Рисунок 20. Размещение элементов panel и picturebox на созданном диалоговом окне.
Данное окно будет получать при загрузке в качестве параметра ссылку на наше загруженное изображение. Затем оно будет устанавливать границы элемента pictureBox равными размерам полученного изображения, после чего устанавливать его в элемент pictureBox.
Перейдите к свойствам элемента panel и установите значение параметра AutoScroll равное true. Теперь, в том случае, если размер изображения будет превышать размер элемента panel1, будут появляться вертикальная и горизонтальная полоса прокрутки, с помощью которых можно будет просмотреть изображение.
Теперь рассмотрим исходный код, необходимый для реализации данных возможностей.
Первым делом назначим обработчик кнопки с изображением стрелки направленной вправо на нашем главном окне. Щелкните по ней дважды, после чего вы перейдете к редактированию кода функции, которая будет вызвана при щелчке по данной кнопке.
Он будет выглядеть следующим образом:
Как видно из исходного кода, класс Preview получает в качестве параметра наше загруженное изображение. Для правильной работы программы мы должны изменить конструктор класса Preview, а также реализовать остальную функциональность программы.
Перейдите к окну Preview, после чего сделайте двойной щелчок левой клавшей мыши на нем (НЕ на размещенных на нем объектах).
Откроется для редактирования функция:
Но мы сначала изменим код конструктора класса, теперь он будет выглядеть следующим образом:
Теперь отредактируем код функции Preview_Load. Он будет выглядеть следующим образом:
В заключении, самостоятельно добавьте обработчик нажатия кнопки закрыть. Функция закрытия будет выглядеть следующим образом:
В следующей главе мы познакомимся с методами создания многопоточных приложений на примере разработки двух приложений.
Читайте также: