Logo

Как сделать окна прозрачными

  • Скачать исходный текст приложения - 13 Kb
  • Скачать исполняемый файл (необходимы динамические библиотеки MFC) - 5 Kb

    Вот что можно сделать буквально за пять минут с помощью API Windows 2007. Программа делает прозрачным любое указанное мышью окно. Запустите программу и нажмите кнопку "Hide". В системном трее появится новая иконка с изображением буквы "Т". Затем сделайте активным любое окно и щелкните левой кнопкой мыши на иконке. Voila, окно стало прозрачным! .

    А ведб основная функциональность программы заключается всего в 4 строках кода (6 с объявлениями переменных). Все остальное - сгенерированный MFC шаблон:

    HWND hWnd;
    POINT pt;
    ::GetCursorPos(&pt);
    hWnd=::WindowFromPoint(pt);
    SetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE)^WS_EX_LAYERED);
    SetLayeredWindowAttributes(hWnd,RGB(0,0,0),m_slider.GetPos(),LWA_ALPHA);
    

    Первое, что делается в этом фрагменте - определяется окно, находящееся под курсором мыши - это выполняется при помощи функций GetCursorPos() и WindowFromPoint, затем у этого окна устанавливается стиль WS_EX_LAYERED (новый в W2k) с помощью функции SetWindowLong, и, наконец, прозрачность окна устанавливается в значение (в диапазоне от 0 до 255), определяемое слайдером. Функия SetLayeredWindowAttributes доступна только в Windows 2000. Эта функция может ыть использована и для задания цветового ключа, т.е. значения цвета, который становится абсолютно прозрачным, в то время как остальные цвета остаются неизменными. Эти два эффекта можно комбинировать.

    Функция SetLayeredWindowAttributes определяется следующим образом:

    BOOL SetLayeredWindowAttributes(
      HWND hwnd,           // хэндл нужного окна
      COLORREF crKey,      // цветовой ключ
      BYTE bAlpha,         // значение прозрачности
      DWORD dwFlags        // выполняемое действие
    );
    

    Функция SetLayeredWindowAttributes может использоваться и для создания эффектов "затухания", а также для создния окон произвольной формы (обычно это делается с использованием регионов, однако предлагаемый способ работает гораздо быстрее).

    Ну, вот и все. Удачного программирования!

Форум: Как сделать окно прозрачным (Всего 4 сообщения)
» Новое сообщениеРежим просмотра : полный | предпросмотр | заголовки | обновить
начало | пред. | след. | конец
Thank youД'Артаниан22.04.2008
(anonymous)04.11.2008
Не буду многословной - статья просто бомба(anonymous)02.03.2008
Очень полезная статьяAnton15.11.2007
 
главная - о проекте - контакты - реклама на сайте
 
LBN100 Elite
Rambler's Top100 TopList
LBN Elite
LBN100 Elite