Окно без фокуса

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 29 ноя 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Как делаются popup-окошки (например сообщения аси или скайпа), которым не передается фокус? Я показываю popup-окно, и ему передается фокус. В связи с чем появляются некоторые нежелательные косметические моменты. Как избавиться от передачи фокуса? Создаю окно просто:
    Код (Text):
    1. window = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOOLWINDOW | WS_EX_TOPMOST, L"class", L"title", WS_POPUP | WS_VISIBLE, x, y, width, height, 0, 0, 0, 0);
     
  2. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Добавь к extended-стилям WS_EX_NOACTIVATE. С таким окном можно будет работать, но фокус оно получать не будет. Но если потом всё-таки фокус понадобится – вызываешь SetWindowLong и убираешь этот стиль.

    Код (Text):
    1. WS_EX_LAYERED
    Чё за extended-стиль? В MSDN к MS VS 2008 он не документирован. Кроме невидимости он что-нибудь ещё дает?
     
  3. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Crollspase:
    Нет, документирован, но почему-то не на всех страницах, где он, ИМХО, должен значиться в явной форме.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Crollspase

    Спасибо, то что нужно!


    Layered window - вроде как древний боян, еще с 2000 винды. Одна из фич - позволяет делать окно полупрозрачным по альфа-константе, или по альфа-каналу текстуры. Вот например: http://msdn.microsoft.com/en-us/library/ms633556(VS.85).aspx