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

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 148

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 142 143 144 145 146 147 < 148 > 149 150 151 152 153 154 .. 320 >> Следующая

// Мы должны указать это пространство имен 1 using Microsoft.Win32;
II Создаем класс - фильтр сообщений
public class MyMessageFilter : IMessageFi iter
І
public bool PreFi IterMessage(ref Message m) {
II Перехватываем нажатие правой кнопки мыши
if (m.Msg = = 513) Il WM LBUTTONOOWN = 513
{
MessageBox.Show("WM_LBUTTOllDOWN is: " + m.Msg): return true;
}
return false; // Вез остальные сообщения игнорируются
}
I
После того как новый реализующий интерфейс IMessageFilter, создан,
мы должны создать объект этого класса и зарегистрировать его при помощи статического метода AddMessageFi 1 ter(). Новый вариант нашего класса MainForm может выглядеть так:
public class MainForm : {
private MyMessageFilter msgFilter = new MyMessageFilterO;
public
{
It Добавляен (регистрируем) фильтр сообщений Applі cation.AddMessageFi1ter(msgF і Iter):
}
Обработчик событий
Анатомия формы 357
private void Forn_OiiExit(Gh;o?tt sender. EventArg; evArgs)
{
Messageeox.ShowC'See уз!". "This app is dead...");
Il Удаляен фильтр сообщений
ftpplіcation.RemoveMessageFiltertmsgFiIter);
I
]
Теперь при щелчке левой кнопкой мыши на любом месте формы появится окно сообщения, представленное на рис. 8.10. Однако, как мы потом увидим, реалі повывать таким образом фильтрацию сообщений приходится редко. Есть и более удобные способы организовывать реакцию на события. Здесь мы поместили эту конструкцию только для чтобы разобраться в деталях механизма работы с сообщениями Windows в .NET.
¦i :WM_LBUTT0NCOWN is: 51Э
OK
Рис. 8.10. Фильтрация сообщений Код приложения AppClass Example найти в подкаталоге Chapter
Анатомия формы
Мы с вами разобрались с ролью и возможностями объекта Application, и следующая наша задача — понять, как устроена сама форма, то есть класс System.Windows . Forms. Form. Каждый раз при создании нового окна приложения нам необходимо определять новый класс, производя его от System. Wi ndows. Forms. Form. В результате создаваемый нами класс наследует от базового множество возможностей. Сам класс Form является производным от других классов в длинной цепочке наследования и собирает воедино возможности множества базовых классов. Вся цепочка наеле-представлена на рис.
Если бы мы захотели подробно описать каждый член каждого класса в этой
цепочке, пришлось бы написать еще одну небольшую книгу. Однако разобраться в основных возможностях, которые передают нашему окну самые важные из базовых классов, все же необходимо.
Классы и MarshalByRefObject
Как мы уже много раз говорили, главный тип, от которого производятся любые другие типы .NET, - это тип System.Object. Поэтому Form наследует полный набор членов, определенных в System. Object (о них подробно говорилось в главе 2). Функциональность, унаследованная от MarshalByRefObject, гарантирует, что обращение к этому типу будет производиться по ссылке вместо создания локальной копии. Таким образом, к примеру, если мы обратимся к форме на удаленном компьютере, мы будем работать со ссылкой на нее, а не с локальной копией.
358 Глава 8 • Окна становятся лучше: !зведений в Windows.Forms
Object
г
- ->
Marshal By RefObject
Component
Control
>| ScrollableCoiitrol
Щ ConteiinerContral
Form
YourWIndow
Рис. 8.11. Цепочка наследования класса Form
Класс Component
Первый базовый класс, представляющий действительный интерес, — это Component.. В этом классе имеется «лолуфабрі і катпая » pea;1 изация интерфейса I Component. Она включает в себя свойство Site, которое возвращает еще один интерфейс — ISite. Кроме того, IComponent содержит событие Di spo:;ed:
public interface IComponent : IDisposable {
// Свойстао Site
public ISite Site virtual get; virtual sst: }
Il Событие Disposed
public event EventHandler Disposed:
Интерфейс ISite возвращает набор МЄТОДОї?, позволяющих элементу управления (например, кнопке — Button) взаимодействоватьсконтейнером,вкоторомэтот элемент управления расположен (например, с формой):
public interface ISite : !ServicePrsvider
I
// Сзойствї внтеофейса ISite public IComponent Component { virtual get: } public !Container Container ( virtual get: } public bool DesignMode { virtua' get: } public string Name { virtual get; virtual set: }
Как правило, свойства, определяемые интерфейсом ISite, становятся объектом внимания программиста только в тех СптуаїШЯл, когда ему нужно разработать свой
Класс Control 359
собственный элемент управления. Помимо свойства Site, Component также обеспечивает реализацию метода DisposeO. Этот метод вызывается тогда, когда объект класса, производного от Cor;iponent, больше не нужен. Основное его назначение — освобождать ресурсы. Например, когда окно приложения (объект, производный от Form) закрывается, метод Dl sposeO автоматически вызывается идля самой формы, и для всех размещенных на ней элементов управления.
Если вы знаете, как можно лучше освободить ресурсы, занятые вашим приложением, то вы вполне можете заместить метод Di spcseO:
public override void DisposeO {
base. DisposeO;
Il Выполняем необходимые действия
Предыдущая << 1 .. 142 143 144 145 146 147 < 148 > 149 150 151 152 153 154 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100