русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Windows message


Дата добавления: 2015-07-09; просмотров: 736; Нарушение авторских прав


Прежде всего, Message – это СТРУКТУРА, представляющая в .NET сообщения Windows. Те самые, которые адресуются приложению и используются системой как средство уведомления выполняющихся в Windows приложений.

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

Объект-представитель Message structure, может быть создан с использованием метода Create (создать – не означает отправить).

Список членов Message structure

 

Члены Объявление
HWnd property. Gets or sets the window handle of the message. public IntPtr HWnd(get; set;)
Msg property. Gets or sets the ID number for the message. public int Msg {get; set;}
WParam property. Gets or sets the WParam field of the message. Значение этого поля зависит от конкретного сообщения. Use the WParam field to get information that is important to handling the message. Это поле обычно используется для фиксирования small pieces of information, например, значений флагов. public IntPtr WParam {get; set;}
LParam property. Gets or sets the LParam field of the message. The value of this field depends on the message. Use the LParam field to get information that is important to handling the message. This field is typically used to store an object if it is needed by the message. public IntPtr Lparam {get; set;}
Result property. Specifies the value that is returned to Windows in response to handling the message. public IntPtr Result {get; set;}
Create method. Создает новую структуру Message. public static Message Create ( IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
Equality operator. Сравнивает два сообщения на предмет определения их идентичности. public static Boolean operator ==( Message left, Message right);
Inequality operator. Сравнивает два сообщения на предмет определения их различия. public static Boolean operator !=( Message left, Message right);
Equals метод. Compares two message structures to determine if they are equal. public override bool Equals(object o)
GetHashCode method. Gets the hash code of the message handle. public override int GetHashCode();

 



При этом IntPtr – это platform-specific тип, который используется для представления указателей или дескрипторов. Предназначен для представления целочисленных величин, размеры которых зависят от характеристик платформы (is platform-specific). То есть ожидается, что объект этого типа будет иметь размер 32 бита на 32-разрядных аппаратных средствах и операционных системах, и 64 битах на аппаратных средствах на 64 бита и операционных системах.

Тип IntPtr может использоваться языками, которые поддерживают механизм указателей, и как общее средство для обращения к данным между языками, которые поддерживают и не поддерживают указатели.

Объект IntPtr может быть также использован для поддержки дескрипторов.

For example, instances of IntPtr are used extensively in the System.IO.FileStream class to hold file handles.

Существует ещё один экзотический тип – UIntPtr, который в отличие от IntPtr не является CLS-compliant типом.

Только IntPtr тип используется в common language runtime.

UIntPtr тип разработан в основном для поддержки архитектурной симметрии (to maintain architectural symmetry) с IntPtr типом.

Примеры перехвата сообщений

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

 

using System;

using System.Windows.Forms;

 

namespace MessageLoop01

{

// A message filter.

public class MyMessageFilter : IMessageFilter

{

long nMess = 0;

public bool PreFilterMessage(ref Message m)

{

nMess++;

Console.WriteLine

(“Processing the messages: {0} - {1}: {2}”,m.Msg,

nMess,

Application.MessageLoop);

return false;

}

}

 

/// <summary>

/// Summary description for Class1.

/// </summary>

class Class1

{

/// <summary>

/// The main entry Point for the application.

/// </summary>

 

static void Main(string[] args)

{

Application.AddMessageFilter(new MyMessageFilter());

Application.Run();

}

}

}

 

В следующем примере объект-представитель класса Form связан с оконной процедурой, в рамках которой и запускается цикл обработки сообщений. Замечательное сочетание консольного приложения с окном формы.

 

using System;

using System.Windows.Forms;

 

namespace MessageLoop01

{

 

// A message filter.

public class MyMessageFilter : IMessageFilter

{

long nMess = 0;

public bool PreFilterMessage(ref Message m)

{

nMess++;

Console.WriteLine

(“Processing the messages: {0} - {1}:{2} > {3}”,m.Msg,m.LParam,m.WParam,nMess);

return false;

}

}

 

class MyForm:Form

{

public MyForm()

{

 

if (Application.MessageLoop) Console.WriteLine(“Yes!”);

else Console.WriteLine(“No!”);

 

Application.AddMessageFilter(new MyMessageFilter());

 

}

}

 

/// <summary>

/// Summary description for Class1.

/// </summary>

class Class1

{

/// <summary>

/// The main entry Point for the application.

/// </summary>

[STAThread]

static void Main(string[] args)

{

if (Application.MessageLoop) Console.WriteLine(“Yes!”);

else Console.WriteLine(“No!”);

 

Application.Run(new MyForm());

}

}

}



<== предыдущая лекция | следующая лекция ==>
События класса Application | Метод WndProc


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.026 сек.