Как сохранить фокус окну?

Тема в разделе "WASM.WIN32", создана пользователем clubnr, 17 июл 2006.

  1. clubnr

    clubnr New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2006
    Сообщения:
    11
    Адрес:
    Russia
    Привет!

    Заметил такие вещи:
    1. Если программа не делает вызов SetWindowsHookEx или снимает сделанный хук, то при обработке сообщения wm_KillFocus SetFocus(hWindow) отрабатывает нормально (не возвращает 0), но фокус мое окно не сохраняет.
    Если программа сделала вызов SetWindowsHookEx и не сняла его, то при обработке сообщения wm_KillFocus вызов SetFocus(hWindow) возвращает фокус окну программы, и окно всегда в фокусе.
    Вопросы такие: почему так происходит, и как сохранять фокус (ввода клавиатуры) на моем окне, не делая hook?
    Кстати, почему в справке Windows по SetWindowsHookEx написано, что функция обработки hook должна быть внутри dll, хотя,
    если она сидит внутри самой программы, то работает нормально?
    2. Если в цикле обработки сообщений стоит GetMessage, то сообщения wm_MouseMove посылаются окну только когда курсор движется над ним, а если стоит PeekMessage, то эти сообщения посылаются окну всегда, даже если оно не активно?
     
  2. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    В 1 нивига не понял... :)

    PeekMessage не снимает сообщение с очереди, а GetMessage снимает
     
  3. Bohdan200

    Bohdan200 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2005
    Сообщения:
    134
    Адрес:
    Lviv
    На счет 1)

    LockSetForegroundWindow
    This function is provided so applications can prevent other applications from making a foreground change that can interrupt its interaction with the user.