Содержание

Слайд 2

09/02/2023 Содержание Понятие окна, разновидности окон Характеристики окон Сообщения, иерархия сообщений Механизм обработки сообщений

09/02/2023

Содержание

Понятие окна, разновидности окон
Характеристики окон
Сообщения, иерархия сообщений
Механизм обработки сообщений

Слайд 3

09/02/2023 Понятие окна Приложения пользователя и элементы управления отображаются в интерфейсе

09/02/2023

Понятие окна

Приложения пользователя и элементы управления отображаются в интерфейсе через окна
Окно

– (прямоугольная) область экрана, предназначенная для сбора и/или вывода информации от пользователя
Окно связано с определенным классом, реализующим его логику поведения
Окна идентифицируются и управляются менеджером окон
Слайд 4

09/02/2023 Элементы окна

09/02/2023

Элементы окна

Слайд 5

09/02/2023 Разновидности окон Окна приложений Элементы управления Диалоги Окна многодокументного интерфейса

09/02/2023

Разновидности окон

Окна приложений
Элементы управления
Диалоги
Окна многодокументного интерфейса

Слайд 6

09/02/2023 Создание окна using System; using System.Windows.Forms; class MyFirstApp { static

09/02/2023

Создание окна

using System;
using System.Windows.Forms;
class MyFirstApp {
static void Main() {
Form form

= new Form(); Application.Run(form);
}
}
Слайд 7

09/02/2023 Характеристики окна Название окна Размер и позиция окна на экране

09/02/2023

Характеристики окна

Название окна
Размер и позиция окна на экране
Оформление окна (стиль рамки,

кнопки, цветовые характеристики)
Элементы управления
Иконка, шрифт, курсор
Слайд 8

09/02/2023 Иерархия окон Окна располагаются на экране иерархически Позиция окна в

09/02/2023

Иерархия окон

Окна располагаются на экране иерархически
Позиция окна в иерархии определяется z-порядком
Окна

потомков всегда находятся перед окном родителя
Сиблинги – окна, созданные одним родителем
Слайд 9

09/02/2023 Окно - контейнер public Button button1; public Form1() { button1

09/02/2023

Окно - контейнер

public Button button1;
public Form1() {
button1 = new

Button();
button1.Size = new Size(40, 40);
button1.Location = new Point(30, 30);
button1.Text = "Click me";
this.Controls.Add(button1);
}
Слайд 10

09/02/2023 Сообщения Способ реакции интерфейса на происходящие вне и внутри его

09/02/2023

Сообщения

Способ реакции интерфейса на происходящие вне и внутри его события
Обработка сообщений

возлагается на оконную процедуру
Передача сообщений, их создание и управление очередью возлагается на механизмы интерфейса
Слайд 11

09/02/2023 Делегаты Windows Классы реализации механизма обработки событий Содержат ссылку на

09/02/2023

Делегаты Windows

Классы реализации механизма обработки событий
Содержат ссылку на метод
Делегат принимает ссылки,

соответствующие его синтаксису
Поддерживает мультикаст
delegate void EventHandler(object sender, EventArgs e);
Слайд 12

09/02/2023 Добавление обработчика сообщений private void button1_Click(object sender, System.EventArgs e) { } button1.Click += new EventHandler(button1_Click);

09/02/2023

Добавление обработчика сообщений

private void button1_Click(object sender, System.EventArgs e)
{
}
button1.Click += new

EventHandler(button1_Click);
Слайд 13

09/02/2023 Иерархия сообщений System.EventArgs System.Windows.Forms.PaintEventArgs System.Windows.Forms.ControlEventArgs System.Windows.Forms.MouseEventArgs System.Windows.Forms.DragEventArgs System.Windows.Forms.FormClosedEventArgs System.Windows.Forms.KeyEventArgs System.Windows.Forms.ScrollEventArgs System.Drawing.Printing.PrintPageEventArgs System.Windows.Forms.Integration.ChildChangedEventArgs

09/02/2023

Иерархия сообщений

System.EventArgs
System.Windows.Forms.PaintEventArgs
System.Windows.Forms.ControlEventArgs
System.Windows.Forms.MouseEventArgs
System.Windows.Forms.DragEventArgs
System.Windows.Forms.FormClosedEventArgs
System.Windows.Forms.KeyEventArgs
System.Windows.Forms.ScrollEventArgs
System.Drawing.Printing.PrintPageEventArgs
System.Windows.Forms.Integration.ChildChangedEventArgs

Слайд 14

09/02/2023 Создание событий на базе EventArgs public class AlarmEventArgs : EventArgs

09/02/2023

Создание событий на базе EventArgs

public class AlarmEventArgs : EventArgs
{
private

readonly int nrings = 0;
private readonly bool snoozePressed = false;
//Constructor.
public AlarmEventArgs(bool snoozePressed, int nrings)
{
this.snoozePressed = snoozePressed;
this.nrings = nrings;
}
//Properties.
public string AlarmText { ... }
public int NumRings { ... }
public bool SnoozePressed{ ... }
}
Слайд 15

09/02/2023 Реализация события public delegate void AlarmEventHandler(object sender, AlarmEventArgs e); public

09/02/2023

Реализация события

public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
public class AlarmClock {
...

public event AlarmEventHandler Alarm;
protected virtual void OnAlarm(AlarmEventArgs e)
{
if (Alarm != null) Alarm(this, e);
}
}
public class AlarmClock {
...
public void Start() {
...
System.Threading.Thread.Sleep(300);
AlarmEventArgs e = new AlarmEventArgs(false, 0);
OnAlarm(e);
}
}
Слайд 16

09/02/2023 Обработка сообщений

09/02/2023

Обработка сообщений

Слайд 17

09/02/2023 Дескриптор сообщения typedef struct { HWND hwnd; UINT message; WPARAM

09/02/2023

Дескриптор сообщения

typedef struct {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}

MSG, *PMSG;
дескриптор окна
тип сообщения
первый параметр
второй параметр
момент времени
координаты мыши
Слайд 18

09/02/2023 Сообщения в очереди Помещаются в системную очередь сообщений Вызываются событиями

09/02/2023

Сообщения в очереди

Помещаются в системную очередь сообщений
Вызываются событиями интерфейса, например, пользовательским

вводом
Функции для работы с сообщениями в очереди:
PostMessage(), PostThreadMessage()
GetMessage(), PeekMessage(), DispatchMessage()
GetMessageTime(), GetMessagePos()
WaitMessage()
SendMessageExtraInfo(), GetMessageExtraInfo()
Слайд 19

09/02/2023 Сообщения вне очереди Направляются непосредственно оконной процедуре Вызываются системой, например,

09/02/2023

Сообщения вне очереди

Направляются непосредственно оконной процедуре
Вызываются системой, например, событие создания окна,

получение фокуса и т.д.
Функции для работы с сообщениями вне очереди:
SendMessage(), SendMessageCallback()
BroadcastSystemMessage(), BroadcastSystemMessageEx()
SendMessageTimeout()
Слайд 20

09/02/2023 Основной цикл обработки сообщений MSG msg; BOOL bRet; while( (bRet

09/02/2023

Основной цикл обработки сообщений

MSG msg;
BOOL bRet;
while( (bRet = GetMessage(&msg, NULL, 0,

0 )) != 0) {
if (bRet == -1) {
// ошибка
}
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

Функция GetMessage()возвращает FALSE, когда из очереди поступает WM_QUIT
TranslateMessage (&msg) передает структуру msg обратно Windows для трансляции клавиатуры

Слайд 21

09/02/2023 Оконная процедура Обрабатывает все сообщения, поступающие в окно от устройств

09/02/2023

Оконная процедура

Обрабатывает все сообщения, поступающие в окно от устройств ввода

или системы
switch (iMsg) {
case WM_CREATE : [обработка WM_CREATE]
return 0 ;
case WM_PAINT : [обработка WM_PAINT]
return 0 ;
case WM_DESTROY : [обработка WM_DESTROY]
return 0 ;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
Слайд 22

09/02/2023 Порядок событий в окне Form.Load – загрузка формы Form.Activated –

09/02/2023

Порядок событий в окне

Form.Load – загрузка формы
Form.Activated – активация формы
Form.Shown

– первый вывод формы на экран
Form.FormClosing – закрытие формы
Form.FormClosed – форма закрыта
Form.Deactivate – деактивация формы
Слайд 23

09/02/2023 События, связанные с фокусом Control.Enter – получение фокуса Control.GotFocus –

09/02/2023

События, связанные с фокусом

Control.Enter – получение фокуса
Control.GotFocus – получение фокуса
Control.Leave

– потеря фокуса
Control.Validating – проверка данных
Control.Validated – завершение проверки
Control.LostFocus – потеря фокуса
Слайд 24

09/02/2023 Диалоговые окна Временные окна, создаваемые с целью приема пользовательского ввода

09/02/2023

Диалоговые окна

Временные окна, создаваемые с целью приема пользовательского ввода
Строятся на

основе шаблона окна – перечня элементов управления с информацией об их размещении
Предопределенные окна –диалоги для выполнения часто используемых операций, общих для всех приложений
Диалоги жестко привязаны к владельцу, находясь в z-порядке над ним
Слайд 25

09/02/2023 Виды диалоговых окон Модальное – требует ввода информации или отмены

09/02/2023

Виды диалоговых окон

Модальное – требует ввода информации или отмены окна,

прежде чем приложение продолжит работу.
Dialog.ShowDialog()
Немодальное – позволяет вводить информацию и переключаться на основное окно приложения без закрытия.
Dialog.Show()
Модальные окна более просты в управлении
Слайд 26

09/02/2023 Вывод диалогового окна private void button1_Click(object sender, System.EventArgs e) {

09/02/2023

Вывод диалогового окна

private void button1_Click(object sender, System.EventArgs e) {
Form dlg1

= new Form();
dlg1.ShowDialog();
}
Слайд 27

09/02/2023 Получение данных через свойства Класс свойства, связанный с элементом управления

09/02/2023

Получение данных через свойства

Класс свойства, связанный с элементом управления
public string

Name {
get {
return nameTextBox.Text;
}
set {
nameTextBox.Text = value;
}
}
Слайд 28

09/02/2023 Получение данных в диалоге Вывод диалога private void ShowMyDialog() {

09/02/2023

Получение данных в диалоге

Вывод диалога
private void ShowMyDialog() {
Form1 dlg =

new Form1(); dlg.ShowDialog();
if (dlg.DialogResult == DialogResult.OK) {
MessageBox.Show (dlg.Name);
}
}