DOSUG CZ– розовая кнопка на сайте!
Logo

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

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

    Вот что можно сделать буквально за пять минут с помощью API Windows 2000. Программа делает прозрачным любое указанное мышью окно. Запустите программу и нажмите кнопку "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 может использоваться и для создания эффектов "затухания", а также для создния окон произвольной формы (обычно это делается с использованием регионов, однако предлагаемый способ работает гораздо быстрее).

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

главная - о проекте - контакты - реклама на сайте
 
LBN100 Elite

SoftStudio.Ru - студия разработки программ
LBN100 Elite