Вашей программе поступает огромное количество сообщений от мыши. Условно их можно разделить на два типа:
Вспомним, что не клиентская область это кнопки сворачивания, заголовок окна, меню и так далее. Так вот и эти сообщения можно обрабатывать в программе. Давайте посмотрим какие сообщения поступают из клиентской области.
Сообщения клиентской области:
Прототипы этих сообщений содержат два параметра, например:
afx_msg void OnMouseMove ( UINT nFlags, CPoint point );
Первый параметр это битовая маска, с помощью которой можно определить была ли нажата виртуальная клавиша во время движения мыши. Вот какие клавиши могут быть:
Определить была ли нажата эта клавиша можно воспользовавшись логическим оператором &, вот так например:
If (nFlags & MK_CONTROL) { // CTRL нажата } else { // CTRL не нажата }
Второй параметр Point говорит о координатах относительно верхнего левого угла окна.
Сообщения из не клиенткой области:
Прототипы у этих функций следующие:
afx_msg void OnNcMButtonDblClk ( UINT nHitTest, CPoint point );
nHitTest показывает где именно на не клиентской части производить нажатие. Об этом смотри в "Шаг 45 - Константы неклиентской области".