C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 293 - Сообщения от мыши / MFC шаг за шагом / Visual C++

Шаг 293 - Сообщения от мыши

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

  • Сообщения от клиентской области
  • Сообщения от не клиентской области

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

Сообщения клиентской области:

  • ON_WM_MOUSEMOVE - мышь двигается
  • ON_WM_LBUTTONDBLCLK - двойной щелчок левой кнопкой
  • ON_WM_LBUTTONDOWN - левая кнопка нажата
  • ON_WM_LBUTTONUP - левая кнопка поднята
  • ON_WM_MBUTTONDBLCLK - двойной щелчок средней кнопкой
  • ON_WM_MBUTTONDOWN - средняя кнопка нажата
  • ON_WM_MBUTTONUP - средняя кнопка отпущена
  • ON_WM_RBUTTONDBLCLK - двойной щелчок правой кнопкой
  • ON_WM_RBUTTONDOWN - правая кнопка нажата
  • ON_WM_RBUTTONUP - правая кнопка поднята

Прототипы этих сообщений содержат два параметра, например:

afx_msg void OnMouseMove
( 
	UINT nFlags,
	CPoint point 
);

Первый параметр это битовая маска, с помощью которой можно определить была ли нажата виртуальная клавиша во время движения мыши. Вот какие клавиши могут быть:

  • MK_CONTROL - CTRL нажата
  • MK_LBUTTON - левая кнопка мыши нажата
  • MK_MBUTTON - средняя кнопка мыши нажата
  • MK_RBUTTON - правая кнопка мыши нажата
  • MK_SHIFT - SHIFT нажата.

Определить была ли нажата эта клавиша можно воспользовавшись логическим оператором &, вот так например:

If (nFlags & MK_CONTROL)
{
	// CTRL нажата
} else {
	// CTRL не нажата
}

Второй параметр Point говорит о координатах относительно верхнего левого угла окна.

Сообщения из не клиенткой области:

  • ON_WM_NCLBUTTONDBLCLK - двойной щелчок левой кнопкой
  • ON_WM_NCLBUTTONDOWN - левая кнопка нажата
  • ON_WM_NCLBUTTONUP - левая кнопка поднята
  • ON_WM_NCMBUTTONDBLCLK - двойной щелчок средней кнопкой
  • ON_WM_NCMBUTTONDOWN - средняя кнопка нажата
  • ON_WM_NCMBUTTONUP - средняя кнопка отпущена
  • ON_WM_NCRBUTTONDBLCLK - двойной щелчок правой кнопкой
  • ON_WM_NCRBUTTONDOWN - правая кнопка нажата
  • ON_WM_NCRBUTTONUP - правая кнопка поднята

Прототипы у этих функций следующие:

afx_msg void OnNcMButtonDblClk
( 
	UINT nHitTest, 
	CPoint point 
);

nHitTest показывает где именно на не клиентской части производить нажатие. Об этом смотри в "Шаг 45 - Константы неклиентской области".


| |
Автор Каев Артем.
[AD]