Файл: ...\Samples\Solution\Toledo\Irregular.scx

Главное окно Visual FoxPro и создаваемые пользователем Формы обычно имеют прямоугольную форму. Для изменения  указанной характеристики можно применить функцию Windows API SetLayeredWindowAttributes , которая может изменять коэффициент прозрачности и цветовой оттенок. Функция SetLayeredWindowAttributes поддерживается Операционными системами Microsoft Windows 2000 и Windows XP.

Объявление функций Windows API

В данном примере, в событии Init, объявляются необходимые функции API :

  Копировать код
DECLARE INTEGER SetLayeredWindowAttributes IN win32api;
INTEGER HWND, INTEGER crKey, INTEGER bAlpha, INTEGER dwFlags

DECLARE INTEGER SetWindowLong IN user32.DLL ;
INTEGER hWnd, INTEGER nIndex, INTEGER dwNewLong

DECLARE INTEGER GetWindowLong IN user32.DLL ;
INTEGER hWnd, INTEGER nIndex

См. дополнительно:  Событие Init .  См. также  MSDN online в http://msdn.microsoft.com.

Отображение Окна нестандартной формы

Указанная выше функция SetLayeredWindowAttributes может отобразить непрямоугольную форму, или изменить оттенок прозрачности для формы. В  этом случае  формы отображаются в полупрозрачном цвете. Однако могут управляться простым кликом манипулятора мыши.

Данная функциональность поддерживается только в ОС Microsoft Windows 2000 и Windows XP, однако для использования перечисленных дополнительных свойств необходимо выполнение некоторых условий.

Установить для формы следующие характеристики

  1. Установит свойство формы Form ShowWindow = 2 (As Top-Level Form), чтобы обеспечит многоуровневость окна. 

  2. Необходимо определить свойства окна (формы), как показано далее: 

      Копировать код
    BorderStyle   = 0
    Caption = ""
    Closable = .F.
    ControlBox = .F.
    TitleBar = 0
  3. В соответствующем методе MakeIrregular разместите следующий программный код. 

      Копировать код
    * Gets existing flags from the window.
    lnFlags = GetWindowLong(nHWND, GWL_EXSTYLE)
    ThisForm.nFlags = lnFlags
    * Appends Layered flag to existing flags.
    lnFlags = BITOR(lnFlags, WS_EX_LAYERED)
    * Sets new flags to the window.
    SetWindowLong(nHWND, GWL_EXSTYLE, lnFlags)
    SetLayeredWindowAttributes(nHWND, nColor, 0, LWA_COLORKEY)

Для дополнительной информации, см. разделы:  Дизайнер Форм, Создание Форм , и Свойство ShowWindow.

См. также