VB ¿Pequeño programa interesante?
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
.