Четверг, 16.05.2024, 14:14
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » Visual C++ и MFC

Система сообщений Windows:
Система сообщений Windows

Система сообщений Windows:

Вот и наступил исторический момент прощания c легендарным чёрным окном. Мавр сделал своё дело, мавр может уходить... Жаль, так уходит история, хотя с другой стороны пора развиваться дальше!!!

Старая и новая концепция программирования:

Все программы, которые были написаны вами до этого момента, имели структуру программ под DOS (хотя и назывались они консольными приложениями под Windows). Они использовали традиционный, процедурный подход к программированию. Что это значит? Программа выполнялась последовательно от начала (от первой строки функции main) до конца в предопределенном порядке. Наиболее часто выполняемые блоки программ выделялись в подпрограммы. Налицо последовательное выполнение программы. Продолжим дальше. Во многих операционных системах взаимодействие между системой и программой инициализирует программа. Например, в DOS программа запрашивает разрешение на ввод и вывод данных. Говоря другими словами, не- Windows-программы (программы, написанные без использования архитектуры Windows-приложения) сами вызывают операционную систему. Операционная система не вызывает прикладную программу. В Windows-приложениях все совершенно наоборот: именно система вызывает программу. Этот процесс осуществляется следующим образом: программа ждет, пока не получит сообщение от Windows.

Сообщение - это сигнал от системы о том, что произошло какое-то событие.

Любое событие, происходящее в системе, будь то создание окна или перемещение мыши, сопровождается соответствующим сообщением, которое посылается либо конкретному окну, либо некоторым, либо всем окнам. Иногда одно событие влечет за собой еще несколько событий и сообщений. Например, событие создание окна влечет за собой событие перерисовки окна, акивизации окна, а так же событие создания окна для дочерних окон (кнопок, полей ввода) и так далее. Сообщение передается программе через специальную функцию, вызываемую Windows. После того как сообщение получено, программа ищет функцию-обработчик данного сообщения, если он определен в коде программы, то выполняется его тело, иначе вызывается стандартный Windows-обработчик (стандартная функция обработки события для этого сообщения). После завершения обработки сообщения программа ожидает следующего. Windows может посылать программе сообщения различных типов. Например, каждый раз при щелчке мышью в окне активной программы посылается соответствующее сообщение. Другой тип сообщений посылается, когда необходимо обновить содержимое активного окна. Сообщения посылаются также при нажатии клавиши, если программа ожидает ввода с клавиатуры. Необходимо запомнить одно: по отношению к программе сообщения появляются случайным образом. Вот почему Windows-программы похожи на программы обработки прерываний: невозможно предсказать, какое сообщение может появиться в следующий момент. Естественно всё это вносит коррективы в традиционный, процедурный подход к программированию. Типичная Windows-программа выполняется нелинейно. Невозможно предсказать, какой фрагмент кода будет выполняться через минуту. Это связано с тем, что сообщения приходят в программу абсолютно произвольно. Сообщение характеризуется номером и двумя числовыми параметрами. Номер сообщения должен быть уникальным, по крайней мере, в пределах одного приложения. Чаще всего пользуются мнемоническим обозначением сообщения ( например, WM_CREATE вместо 0x1 ). Список сообщений находится в файле winuser.h. Например, типичная строка из этого файла:

#define WM_PAINT 0x000F

Параметры сообщения носят название wParam и lParam. Значения и смысл этих параметров зависят от конкретного сообщения.

Примеры сообщений :

События мыши:

С мышью связан целый ряд событий и это вполне естественно, так как мышь является незаменимым механизмом для работы в Windows.

WM_LBUTTONDOWN Сообщение приходит, когда пользователь нажимает левую кнопку мышки
Прототип обработчика этого сообщения:

afx_msg void OnLButtonDown( UINT nFlags, CPoint point );

Параметр nflags - показывает, какие кнопки были нажаты,
когда произошло событие.
Префикс afx_msg показывает, что данная функция является обработчиком
какого-то события.
Этот параметр может быть комбинацией следующих значений:

MK_CONTROL - была нажата кнопка CTRL.

MK_LBUTTON - была нажата левая кнопка мышки.

MK_MBUTTON - была нажата средняя кнопка мышки. 

MK_RBUTTON - была нажата правая кнопка мышки. 

MK_SHIFT - была нажата кнопка SHIFT.

Параметр point - содержит координату x и y позиции точки,
где находился указатель мыши в тот момент, когда произошло событие.
Эти координаты считаются относительно левого 
верхнего угла окна.
WM_RBUTTONDOWN Сообщение приходит, когда пользователь нажимает правую кнопку мышки
Прототип обработчика этого сообщения:

afx_msg void OnRButtonDown( UINT nFlags, CPoint point );

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

afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point );


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

afx_msg void OnRButtonDblClk( UINT nFlags, CPoint point );


Всё, что было сказано о предыдущем сообщении, верно и для этого.
WM_MOUSEMOVE Сообщение приходит, когда пользователь передвигает мышку.
Прототип обработчика этого сообщения:

afx_msg void OnMouseMove( UINT nFlags, CPoint point );


Всё, что было сказано о предыдущем сообщении, верно и для этого.

Событие диалога :

WM_INITDIALOG Сообщение приходит приложению (в частности, классу, производному от класса CDialog) перед тем, как диалог показывается на экран.
Прототип обработчика этого сообщения:

virtual BOOL OnInitDialog( );

Этот обработчик вызывается перед показом на экран диалога.
В нем можно проводить подготовительные мероприятия
(например, инициализацию переменных диалога, настройку необходимых
параметров, вызов функций, которые должны выполняться сразу
после отображения окна диалога на экране и т. п.).
Категория: Visual C++ и MFC | Добавил: slava (26.09.2009)
Просмотров: 3933 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]