olegenty |
Отправлено: 17.08.2004, 10:25 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Мыш была над контролом. Замечательно. И вот она с контрола ушла. Как завётся тот WM_... по которому определить, что мышь ушла, но так, чтобы не использовать другие контролы. Т.е. никто, кроме самого контрола, ничего знать о контроле не должен. Обыскался, но нет такого события, или я его не нахожу...
|
|
Иван |
Отправлено: 17.08.2004, 10:41 |
|
Машинист паровоза
Группа: Участник
Сообщений: 207
|
Сейчас у меня под рукой нет, но дома где-то был справочник этих самых
WM_...
Как только посмотрю напишу...
|
|
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 контрола-поля, установил указатели на конкурирующие поля, и всё. а в самой программе только выставляешь опции полей и режимы игры.
|
|