Red de conocimiento informático - Problemas con los teléfonos móviles - VB ¿Pequeño programa interesante?

VB ¿Pequeño programa interesante?

Crea formas de formas extrañas con VB

Las formas ordinarias son cuadradas y puedes usar funciones API para crear algunas formas extrañas. Por ejemplo, la forma es un rectángulo redondeado con un agujero ovalado excavado en el medio.

Primero, debes entender un concepto importante: región. Una región es un objeto GDI que describe una parte de una escena de dispositivo y cada región tiene un identificador. Una región puede ser un rectángulo, un polígono complejo o incluso varias regiones organizadas juntas. El área predeterminada del formulario es el rectángulo que vemos y, por supuesto, no es necesario usar esta área predeterminada.

Para comenzar ahora, primero cree un área rectangular redondeada en el formulario, que es el esquema aproximado del formulario. Determine otra área elíptica en el rectángulo redondeado, luego organice las dos áreas en una y establezca el área del formulario en esta área organizada.

La función CreateRoundRectRgn se usa para crear un área rectangular redondeada; CreateEllipticRgn se usa para crear un área elíptica; la función CombineRgn se usa para fusionar dos áreas en una nueva área; área de la ventana. También puedes utilizar otras funciones para crear otras formas más extrañas.

El código fuente es el siguiente:

OptionExplicit

'Declaración de función API

PrivateDeclareFunctionCreateRectRgnLib "gdi32"(ByValX1AsLong, ByValY1AsLong, ByValX2AsLong , ByValY2AsLong) Mientras AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong)AsLong

PrivateDeclareFunctionCombineRgnLib "gdi32"(ByValhDestRgnAsLong, ByValhSrcRgn1AsLong, ByValhSrcRgn2AsLong, ByValnCombineModeAsLong) AsLong

PrivateDeclareFunctionSetWindowRgnLib "user32"(ByValhWndAsLong, ByValhRgnAsLong , ByValbRedrawAsBoolean) es largo

PrivateDeclareFunctionDeleteObjectLib "gdi32"( ByValhObjectAsLong)AsLong

' Declaración constante

PrivateConstRGN_DIFF=4

'El objetivo El área se establece en la parte separada de las dos áreas

'Declaración de variable a nivel de módulo

PrivateOutRgnAsLong

'Fuera del área rectangular redondeada

PrivateInRgnAsLong

'Dentro del área elíptica

PrivateMyRgnAsLong

'El área después del área de la esquina redondeada recorta el área elíptica y la forma final del table

PrivateSubForm_Click()

IfOutRgnlt;gt;0AndInRgnlt ;gt;0AndMyRgn lt;gt;0ThenExitSub

DimwAsLong, hAsLong

w =ScaleX(Form1.Width, vbTwips, vbPixels)

h=ScaleY(Form1.Height, vbTwips, vbPixels)

MyRgn=CreateRectRgn(0, 0, 0, 0)

OutRgn=CreateRoundRectRgn(30, 30, w-30, h-30, 100, 100)

InRgn= CreateEllipticRgn(100, 100, w-100, h-100)

CallCombineRgn(MiRgn, OutRgn, InRgn, RGN_DIFF)

C

allSetWindowRgn(Form1.Width=7800

Form1.gt;0ThenDeleteObjectInRgn

EndSub

Después de que se ejecute el programa, haga clic en el formulario, el formulario se deformará y luego haga doble clic en la ventana El cuerpo finaliza el programa. Vale la pena señalar que cuando se descarga el formulario, el área definida se eliminará usando la función DeleteObject

.