www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 3 - События рамки окна

Создание проекта

Продолжаем развивать наш Step1. Как всегда вносим изменения и всё.

Создаем код

В описание рамки окна необходимо внести следующие изменения.
 class CMainWnd : public CFrameWnd
 {
 public:
   CMainWnd(); 
   afx_msg void OnLButtonDblClk( UINT, CPoint ); 
         // виртуальная процедура ответа на левую кнопку
   afx_msg void OnRButtonDblClk( UINT, CPoint ); 
         // виртуальная процедура ответа на правую кнопку
   afx_msg void OnKeyDown( UINT, UINT, UINT ); 
         // виртуальная процедура ответа на клавишу
 private:
   CStatic* MyStatic; 
   CButton* MyButton;
   CEdit* MyEdit; 
   DECLARE_MESSAGE_MAP(); // таблица откликов
};
И вписать следующие процедуры после описания класса
 BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd) 
     // таблица откликов на сообщения 
 ON_WM_LBUTTONDBLCLK()
     // реакция на нажатие левой кнопки мыши
 ON_WM_RBUTTONDBLCLK()
     // реакция на нажатие правой кнопки мышки
 ON_WM_KEYDOWN()
     // реакция на нажатие клавиши
 END_MESSAGE_MAP()

 void CMainWnd::OnKeyDown( UINT, UINT, UINT )
 {
    AfxMessageBox(" Key Button Down ");
 }

 void CMainWnd::OnRButtonDblClk( UINT, CPoint )
 {
    AfxMessageBox(" Rigth Button Click ");
 }

 void CMainWnd::OnLButtonDblClk( UINT, CPoint)
 {
    AfxMessageBox(" Left Button Click ");
 }

Описание

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

Добавление в класс макроса DECLARE_MESSAGE_MAP() говорит о том, что данный класс будет реагировать на события.

Если класс реагирует на события, то необходимо описать таблицу откликов на них. Таблица откликов находится между определениями BEGIN_MESSAGE_MAP(Класс реагирующий, Класс родитель) и END_MESSAGE_MAP(). Зачем при определении таблицы откликов указывать класс, который будет произволить реакцию ? Но таблиц откликов может быть много для разных классов и как интересно компилятор разберется кому она принадлежит ? Класс родителя необходим для обработки стандарных сообщения даже если вы их явно не обрабатываете, например, закрыть приложение.

Между этими определениями вы пишите реакцию. В MFC предусмотрена обработка кучи событий и их описание начинается с ON_WM_message. В нашем случае это стандартные события WINDOWS по реакции на нажатие клавиш и мыши.

Для каждого стандартного события описана виртуальная функция, которая будет вызыватся при его возникновении. Имя и параметры этой функции строго определены и ошибаться здесь нельзя. Правило выглядит так - хочешь реакцию на стандартное событие - опиши его в таблице откликов и замени виртуальную процедуру. Afxmsg воспринимайте как аналог virtual.

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


Шпаргалка

  1. Указать классу, что он реагирует на события
      DECLARE_MESSAGE_MAP();
    
  2. Создать таблицу откликов на события
      BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
         // таблица откликов на сообщения 
      ......................
      END_MESSAGE_MAP()
    
  3. Описать процедуры соотвествующие таблице в классе реагирующем на события.
      afx_msg void OnLButtonDblClk( UINT, CPoint ); 
      ...............
    
  4. Создать реализацию событий.
      void CMainWnd::OnKeyDown( UINT, UINT, UINT )
      {
         AfxMessageBox(" Key Button Down ");
      }
    
  5. Дальше Вам известно. Результат превосходит все ожидания. Только не забудьте, что реакция мышки на двойной щелчок.

Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz