C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
WM_..., Мышь...
olegenty
Отправлено: 17.08.2004, 10:25


Ветеран

Группа: Модератор
Сообщений: 2412



Мыш была над контролом. Замечательно. И вот она с контрола ушла. Как завётся тот WM_... по которому определить, что мышь ушла, но так, чтобы не использовать другие контролы. Т.е. никто, кроме самого контрола, ничего знать о контроле не должен. Обыскался, но нет такого события, или я его не нахожу...
Иван
Отправлено: 17.08.2004, 10:41


Машинист паровоза

Группа: Участник
Сообщений: 207



Сейчас у меня под рукой нет, но дома где-то был справочник этих самых
WM_...
sad.gif
Как только посмотрю напишу...
xTrim
Отправлено: 17.08.2004, 10:55


Машинист паровоза

Группа: Участник
Сообщений: 208



CM_MOUSELEAVE
olegenty
Отправлено: 17.08.2004, 11:05


Ветеран

Группа: Модератор
Сообщений: 2412



это Win32 SDK. и всё это там есть. просто я искать затрахался...
olegenty
Отправлено: 17.08.2004, 11:16


Ветеран

Группа: Модератор
Сообщений: 2412



Та-а-а-ак... в Index CM_MOUSELEAVE и WM_MOUSELEAVE отсутствуют...
в Search WM_MOUSELEAVE присутствует...

добавляю обработчик WM_MOUSELEAVE в WndProc... и событие НИКОГДА не происходит...
olegenty
Отправлено: 17.08.2004, 11:28


Ветеран

Группа: Модератор
Сообщений: 2412



подставил CM_MOUSELEAVE — всё пучком работает (неожиданная недокументированность, блин, моего hlp)

осталась одна трабла: если мышь уходит на это же приложение — работает. если на другое — нет, пока не наведёшь снова на текущее...
Boyko
Отправлено: 17.08.2004, 12:43


Станционный диспетчер

Группа: Участник
Сообщений: 88



QUOTE (olegenty @ 17/08/2004, 12:30)
осталась одна трабла: если мышь уходит на это же приложение — работает. если на другое — нет, пока не наведёшь снова на текущее...

SetCaptureControl()
olegenty
Отправлено: 17.08.2004, 14:58


Ветеран

Группа: Модератор
Сообщений: 2412



не понял сути совета. ну и что? я уже пробовал работать с SetCapture и GetCapture (Win API), но кроме глюков пока ничего не поимел... ещё не доразобрался в организации захвата всех событий мыши.
timson
Отправлено: 17.08.2004, 19:36


Станционный диспетчер

Группа: Участник
Сообщений: 82



эх, MSDN увас нету что-ли, иль вы вдались в компоненты готовые, а про API забывать стали:
чтобы получать сообщение WM_MOUSELEAVE нада предварительно вызвать сообщить системе, что мы ожидаем такое сообщениеTrackMouseEvent
CODE

WM_MOUSELEAVE
The WM_MOUSELEAVE message is posted to a window when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent.

A window receives this message through its WindowProc function.

LRESULT CALLBACK WindowProc(
 HWND hwnd,       // handle to window
 UINT uMsg,       // WM_MOUSELEAVE
 WPARAM wParam,   // not used
 LPARAM lParam    // not used
);
Parameters
This message has no parameters.

Return Values
If an application processes this message, it should return zero.

Remarks
All tracking requested by TrackMouseEvent is canceled when this message is generated. The application must call TrackMouseEvent when the mouse reenters its window if it requires further tracking of mouse hover behavior.

Requirements
 Windows NT/2000: Requires Windows NT 4.0 or later.
 Windows 95/98: Requires Windows 98 or later.
 Header: Declared in Winuser.h; include Windows.h.
olegenty
Отправлено: 18.08.2004, 09:39


Ветеран

Группа: Модератор
Сообщений: 2412



да, MSDN у меня нет.
да, это первый контрол, который я пишу сам, соответственно, переопределяя WndProc. контрол-то сам по себе бестолковый — поле морского боя. так, чтобы чуть чуть развеяться от программирования БД, решил переписать свой старенький морской бой. вот переписываю. вернее, сам фоновый класс-поле, автоматическая расстановка кораблей за количесво проходов по полю, равное числу кораблей — это всё написано. теперь пишу контрол, который всё это визуализирует + реагирует на действия юзера. негоже это делать в программе. намного удобнее — кинул 2 контрола-поля, установил указатели на конкурирующие поля, и всё. а в самой программе только выставляешь опции полей и режимы игры. smile.gif

Вернуться в Вопросы программирования в C++Builder