У меня есть объект COleControl в моем проекте.
Внутри этого COleControl у меня есть объект CRectTracker.
Я хочу обработать сообщение Windows (событие) WM_LButtonUp. (когда пользователь перестает нажимать левую кнопку мыши).
В моем .h файле я написал:
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
В моем файле .cpp, в
BEGIN_MESSAGE_MAP(CMyControl, COleControl)
я добавил
ON_WM_LBUTTONUP()
Затем я разработал метод
void CMyControl::OnLButtonUp(UINT nFlags, CPoint point)
Я сделал то же самое для сообщения Windows LButtonDown.
Когда я оставляю левую кнопку мыши внутри моего элемента управления, метод получает дескрипторы, и все работает нормально.
Проблема возникает, когда я оставляю левую кнопку мыши, когда трекер мыши находится на объекте CRectTracker. В этом случае сообщение мыши LButtonUp не обрабатывается.
Я попытался использовать Spy ++, и я вижу, что сообщение Windows WM_LButtonUp существует и происходит, как ожидалось. Но это мой код, он не обрабатывается (на случай мыши на CRectTracker).
Событие LButtonDown обрабатывается успешно все время, даже когда я нажимаю кнопку мыши, когда мышь находится на CRectTracker.
В чем может быть проблема с сообщением LButtonUp?
Спасибо
Это просто неизбежный побочный эффект от работы трекера. После того, как вы нажмете на трекер или один из маркеров размеров, MFC захватывает мышь и запускает модальный цикл сообщений. Который собирается снимать сообщения о перемещении мыши и кнопках для реализации операции отслеживания. Этот цикл не завершается до тех пор, пока не будет отображено левое сообщение о кнопке, не будет отображена клавиша Escape или не будет потеряна запись. Соответственно, ваша функция OnLButtonUp () не может выполняться, пока этот цикл активен, сообщение было перехвачено, прежде чем оно могло быть отправлено.
Вам нужно будет сделать это по-другому, не полагаясь на OnLButtonUp (). Трудно дать конкретный совет, так как вы не описали, зачем он вам нужен. Исходный код для модального цикла находится в atlmfc / src / mfc / trckrect.cpp, CRectTracker :: TrackHandle (), если вам нужно больше понимания.
Других решений пока нет …