File: ...\Samples\Solution\Toledo\Irregular.scx
The main Visual FoxPro window and any forms you create have rectangular-shaped client areas by default. To change the shape, you can use the Windows API SetLayeredWindowAttributes function, which sets the opacity and transparency color key of a layered window. SetLayeredWindowAttributes is supported in Microsoft Windows 2000 and Windows XP.
Windows API Function Declarations
In this sample, the form's Init event contains the following declarations for the necessary API functions:
В | Copy Code |
---|---|
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 |
For more information about the Init event, see Init Event. For detailed information about these declarations and functions, see MSDN online at
Displaying Irregularly-Shaped Windows
You can display a nonrectangular form by using the SetLayeredWindowAttributes function and setting a transparent color. Shapes that are drawn using this color appear transparent. Also, any mouse clicks in these shapes pass through to the visible form.
This functionality is supported only in Microsoft Windows 2000 and Windows XP but is more efficient than previous techniques for setting a bounding region on the form. Although this technique makes a form transparent, the form must be set up properly to work with this functionality.
To set up the form
-
On the form, set the FormВ ShowWindow property to 2 (As Top-Level Form) to make it possible to draw a layered window.
-
Turn off the window frame because it is not drawn when transparent by setting the following properties for the form:
В Copy Code BorderStyle = 0 Caption = "" Closable = .F. ControlBox = .F. TitleBar = 0
-
In the MakeIrregular method of the sample, set the magenta areas, as specified by the
nColor
variable, to transparent using the following code:В Copy Code * 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)
For more information, see Form Designer, Creating Forms, and ShowWindow Property.