Страница: 1 | 2 |
Вопрос: Отловить потерю фокуса формой!
Добавлено: 07.02.05 14:11
Автор вопроса: mayevskyy | ICQ: 1234567890
Добрый день.
Если кто знает как отловить потерю фокуса фомрой, используя WIN32API, то, пожалуйста, поделитесь на примере.
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 07.02.05 15:17
Надо ловить сообщение WM_ACTIVATE и проверить нижнее слово wParam на значение WA_INACTIVE
WM_ACTIVATE
fActive = LOWORD(wParam);
fMinimized = (BOOL) HIWORD(wParam);
hwndPrevious = (HWND) lParam;
//fActive - activation flag
//fMinimized - minimized flag
//hwndPrevious - window handle
fActive может принимать значения констант:
WA_ACTIVE
WA_CLICKACTIVE
WA_INACTIVE
Номер ответа: 2
Автор ответа:
mayevskyy
ICQ: 1234567890
Вопросов: 7
Ответов: 4
Профиль | | #2
Добавлено: 07.02.05 16:38
спасибо. буду пробовать
Номер ответа: 3
Автор ответа:
Андрей
ICQ: 201110705
Вопросов: 1
Ответов: 14
Профиль | | #3
Добавлено: 07.02.05 19:13
А надоли всё усложнять?
Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
'код для события потери активности формы в любом случае
End Sub
Номер ответа: 4
Автор ответа:
Андрей
ICQ: 201110705
Вопросов: 1
Ответов: 14
Профиль | | #4
Добавлено: 07.02.05 19:31
Ах да, если есть огромное желание использовать API, то это тоже реально - используя DefWindowProc. Дерзай
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 07.02.05 21:12
Андрей, ты далеко не самый умный и не следует критиковать способы если 100% не уверен в том что предложенный тобою лучше!
К примеру твой способ работает-лишь при переключении форм твоего приложения, и вовсе никак не реагирует на потерю фокуса, если, к примеру, передать фокус окну другого процесса...
И второе, зачем это мне может понадобиться DefWindowProc в этом сабже...
Пойму еще SetWindowLong & CallWindowProc, но зачем то что ты предложил, остается только догадываться...
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 07.02.05 21:14
P.S.
Общий форум - это не .NET
Как понимаешь еще не все програмисты съели микрософтовскую фишку... Есть еще "отсталые" личности, к таким отношусь и я, что предпочитают машинный код...
Номер ответа: 7
Автор ответа:
Андрей
ICQ: 201110705
Вопросов: 1
Ответов: 14
Профиль | | #7
Добавлено: 07.02.05 21:40
sne
Ок, умыл.........)
>К примеру твой способ работает-лишь при переключении
>форм твоего приложения, и вовсе никак не реагирует на
>потерю фокуса, если, к примеру, передать фокус окну
>другого процесса...
Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate
Static i As Integer
i += 1
Console.WriteLine (i)
End Sub
Здесь i почемуто увеличивается на один, при любом случае потери активности формы.
По второму вопросу.........ну здесь чуть сложнее, мож я и не прав
function WindProc&byVal hwnd&, byVal messg&, byVal wparam&, byVal lparam)
select case maessg&
case WM_KILLFoCUS
end select
WindProc&=DefWindowProc&hwnd&, messg&, wparam&, lparam)
end function
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 08.02.05 04:04
Ну собственно мыть я никого не собирался Но на VB6 то что ты предложил - не работает... А форум "Общий" как раз и относится к VB6... Существует еще так-же и .NET форум... там обсуждаются вопросы связанные с .НЕТ
по второму... я тоже полагаю такой поворот события
Номер ответа: 9
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #9
Добавлено: 08.02.05 09:17
Сообщения, которые твоя WndProc пропустила "мимо ушей" и не стала обрабатывать, должны быть обработаны. Для этого и существует дефолтный обработчик DefWindowProc, а не для обработки потери фокуса.
Номер ответа: 10
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #10
Добавлено: 08.02.05 12:54
Хм,
DefWindowProc - Default Window Procedure
Говоря на сленге - родная оконная процедура.
По моему тут нет разницы. Что CallWindowProc с адресом родной процедуры, что DefWindowProc c хендлом окна делают одно и тоже.
Андрей,
Ты просто не можешь сориентироваться или решил что давно уже пора сделать .NET форум общим?
А вообще правильно, нечего в углу .NET-чикам сидеть. Пусть вливаются в коллектив если коллектив не вливается в них.
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 08.02.05 16:49
2CyRax: откуда такая доброта к .NETчикам?
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 08.02.05 20:22
У VB нет стандартной процедуры, отличной от DefWindowProc, VB ведь всё-таки обычное Win32 приложение. Хотя и вывернуто все задом наперед, но в конечном итоге все выверты приводят к стандартным API, или нет?
Номер ответа: 13
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #13
Добавлено: 09.02.05 00:37
Да ну хоть даже dragAndDrop оно обрабатывает само, те же события формы, та же кнопка со знаком вопроса!?
Номер ответа: 14
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #14
Добавлено: 09.02.05 01:03
А, допёр
Номер ответа: 15
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #15
Добавлено: 09.02.05 18:10
А использование DefWindowProc при подмене оконной процедуры, это есть ламерство! Откуда мы знаем что в стандартной процедуре у VB творится!?
Нам этого знать не нужно. Точно так же как и при CallWindowProc.
При субклассинге твоя процедура встревает перед родной, обрабатывает какие хочет сообщения, изменяет их как хочет и передаёт управление родной процедуре.
При этом родная процедура может получить как исходное, так и изменённое тобой сообщение.
ИМХО, давайте не будем создавать мифов о своей непогрешимости. Не ошибаются только правильно запрограммированные компьютеры