设计各种形状的窗体界面
- 格式:pdf
- 大小:397.98 KB
- 文档页数:14
====================================================================== 相信大家看过许多形状怪异的窗口吧?可是在VB里,系统提供的只是一个矩形的窗体。
如何在VB里实现这种异形窗体呢?其实原理很简单。
首先,在内存中构建一个想要的图形,再通过API函数将窗体设置为此形状,最后将图片放上去就可以了。
关键在于如何构建这个想要的图形。
让我们看看下面这个图:。
这张图片中既有白色,也有其他彩色,而我们想要的颜色正是除白色以外的其它颜色。
我们可以这样想:在内存中创建一幅一样大小的空的图像,然后只把我们需要的颜色(即非白色)输入内存。
这样,就可以创建出我们想要的图形了。
以上是原理,接下来介绍几个API函数。
GetPixel:获取指定对象的某个点的颜色。
定义为:Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long其中hdc为图形对象的句柄,x、y为坐标。
SelectObject:向内存中的指定地点输入图形。
定义为:Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long其中hdc为内存中图形对象的句柄,hObject为欲输入的图像。
CreateCompatibleDC:在内存中创建一个与指定对象一样的场景(可以理解为图像)。
定义为:Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long其中hdc为指定对象的句柄。
WPF漂亮的窗体样式、按钮样式、复选框样式<!--窗体样式--><ControlTemplate x:Key="WindowTemplateKey" TargetType="{x:Type Window}"><Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"><Grid><AdornerDecorator><ContentPresenter/></AdornerDecorator><ResizeGrip x:Name="WindowResizeGrip" HorizontalAlignment="Right" VerticalAlignment="Bottom" IsTabStop="false" Visibility="Collapsed"/></Grid></Border><ControlTemplate.Triggers><MultiTrigger><MultiTrigger.Conditions><Condition Property="ResizeMode" Value="CanResizeWithGrip"/><Condition Property="WindowState" Value="Normal"/></MultiTrigger.Conditions><Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/></MultiTrigger></ControlTemplate.Triggers></ControlTemplate><ControlTemplate x:Key="WindowControlRectangleTemplate" TargetType="{x:Type Window}"><Border Background="{TemplateBinding Background}" BorderThickness="1,1,1,1" CornerRadius="0,0,0,0" ><Border.BorderBrush><ImageBrush ImageSource="/Controls;component\Images\bgtop.png"></ImageBrush></Border.BorderBrush><Grid Width="Auto" Height="Auto" VerticalAlignment="Stretch"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="25"/><RowDefinition/></Grid.RowDefinitions><Border x:Name="topborder" Margin="0" Grid.Column="0" BorderBrush="{x:Null}" BorderThickness="0" CornerRadius="0,0,0,0" Grid.ColumnSpan="1"><Border.Background><ImageBrush ImageSource="/Controls;component/images/bgtop.png"></ImageBrush></Border.Background><Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" Width="Auto" Height="Auto"><Grid.ColumnDefinitions><ColumnDefinition Width="9.27"/><ColumnDefinition Width="137.397"/><ColumnDefinition/><ColumnDefinition Width="28.207"/><ColumnDefinition Width="0"/><ColumnDefinition Width="27.398"/><ColumnDefinition Width="7.586"/></Grid.ColumnDefinitions><TextBlock Margin="0,0,0,-8" Name="txtTile" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" FontFamily="微软雅⿊" Height="25" Width="122" FontSize="12" Foreground="White"/><Button x:Name="btnMin" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2.668,2.795,2.777,3.776" Content="-" Style="{StaticResource ButtonMini}" Height="25" Width="30" Grid.Column="3" FontWeight= <Button x:Name="btnClose" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2.668,2.795,1.968,3.776" Content="×" Style="{StaticResource ButtonClose}" Height="25" Width="30" FontWeight="Bold</Grid></Border><Grid Margin="0" Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/></Grid.RowDefinitions><ContentPresenter HorizontalAlignment="Stretch" Margin="0" Width="Auto" Grid.Column="0" Grid.ColumnSpan="1" Grid.RowSpan="1"/></Grid></Grid></Border></ControlTemplate><Style x:Key="WindowRectangleStyle" TargetType="{x:Type Window}"><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/><Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/><Setter Property="Template" Value="{StaticResource WindowControlRectangleTemplate}"/><Style.Triggers><Trigger Property="ResizeMode" Value="CanResizeWithGrip"><Setter Property="Template" Value="{StaticResource WindowTemplateKey}"/></Trigger></Style.Triggers></Style><!--登录按钮样式--><Style x:Key="ButtonOther" TargetType="{x:Type Button}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><Grid><Grid.ColumnDefinitions><ColumnDefinition x:Name="columnDefinition1" Width="0.982*"/><ColumnDefinition x:Name="columnDefinition" Width="0.018*"/></Grid.ColumnDefinitions><Rectangle x:Name="rectangle" Stroke="{x:Null}" Fill="#dfa854" /><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding V </Grid><ControlTemplate.Triggers><Trigger Property="IsFocused" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#dfa854"/></Trigger><Trigger Property="IsDefaulted" Value="True"><Setter Property="Fill" TargetName="rectangle" Value="#dfa854"/><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#efbc6e"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#dfa854"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><!--最⼩化按钮样式--><Style x:Key="ButtonMini" TargetType="{x:Type Button}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><Grid><Grid.ColumnDefinitions><ColumnDefinition x:Name="columnDefinition1" Width="0.982*"/><ColumnDefinition x:Name="columnDefinition" Width="0.018*"/></Grid.ColumnDefinitions><Rectangle x:Name="rectangle" Stroke="{x:Null}" Fill="{x:Null}" /><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding V </Grid><ControlTemplate.Triggers><Trigger Property="IsFocused" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/></Trigger><Trigger Property="IsDefaulted" Value="True"><Setter Property="Fill" TargetName="rectangle" Value="#00a1da"/><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#00a1da"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#3e86cc"/><Setter Property="Width" TargetName="columnDefinition" Value="Auto"/><Setter Property="MinWidth" TargetName="columnDefinition" Value="0"/><Setter Property="Width" TargetName="columnDefinition1" Value="*"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><!--关闭按钮样式--><Style x:Key="ButtonClose" TargetType="{x:Type Button}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><Grid><Grid.ColumnDefinitions><ColumnDefinition x:Name="columnDefinition1" Width="0.982*"/><ColumnDefinition x:Name="columnDefinition" Width="0.018*"/></Grid.ColumnDefinitions><!--RadiusY="2" RadiusX="2"圆⾓属性--><Rectangle x:Name="rectangle" Stroke="{x:Null}" Fill="{x:Null}" Grid.ColumnSpan="1" /><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding V </Grid><ControlTemplate.Triggers><Trigger Property="IsFocused" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/></Trigger><Trigger Property="IsDefaulted" Value="True"><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/></Trigger><Trigger Property="IsMouseOver" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#d44027"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="#3e86cc"/><Setter Property="Width" TargetName="columnDefinition" Value="Auto"/><Setter Property="MinWidth" TargetName="columnDefinition" Value="0"/><Setter Property="Width" TargetName="columnDefinition1" Value="*"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Stroke" TargetName="rectangle" Value="{x:Null}"/><Setter Property="Fill" TargetName="rectangle" Value="{x:Null}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><!-- 复选框样式 --><Style TargetType="CheckBox"><Setter Property="Background"><Setter.Value><SolidColorBrush Color="#FFFFBA00"/></Setter.Value></Setter><Setter Property="Foreground" Value="#FF000000"/><Setter Property="HorizontalContentAlignment" Value="Left"/><Setter Property="VerticalContentAlignment" Value="Top"/><Setter Property="Padding" Value="4,1,0,0"/><Setter Property="BorderThickness" Value="1"/><Setter Property="BorderBrush" Value="#dcdcdc"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="CheckBox"><Grid><vsm:VisualStateManager.VisualStateGroups><vsm:VisualStateGroup x:Name="CommonStates"><vsm:VisualState x:Name="Normal"/><vsm:VisualState x:Name="MouseOver"><Storyboard><!--<DoubleAnimationUsingKeyFrames Storyboard.TargetName="BackgroundOverlay" Storyboard.TargetProperty="Opacity"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames><DoubleAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddleBackground" Storyboard.TargetProperty="Opacity"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames>--><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[3].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9ef"/></ColorAnimationUsingKeyFrames><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames></Storyboard></vsm:VisualState><vsm:VisualState x:Name="Pressed"><Storyboard><!--<DoubleAnimationUsingKeyFrames Storyboard.TargetName="BackgroundOverlay" Storyboard.TargetProperty="Opacity"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames><DoubleAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddleBackground" Storyboard.TargetProperty="Opacity"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames>--><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[3].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames><ColorAnimationUsingKeyFrames Storyboard.TargetName="BoxMiddle" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)"><SplineColorKeyFrame KeyTime="0" Value="#e9e9e9"/></ColorAnimationUsingKeyFrames><!--<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.Opacity)"><SplineDoubleKeyFrame KeyTime="00:00:00" Value="0.5"/></DoubleAnimationUsingKeyFrames>--></Storyboard></vsm:VisualState><vsm:VisualState x:Name="Disabled"><Storyboard><DoubleAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="(UIElement.Opacity)"><SplineDoubleKeyFrame KeyTime="0" Value=".55"/></DoubleAnimationUsingKeyFrames><DoubleAnimationUsingKeyFrames Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)"><SplineDoubleKeyFrame KeyTime="0" Value="0.55"/></DoubleAnimationUsingKeyFrames></Storyboard></vsm:VisualState></vsm:VisualStateGroup><vsm:VisualStateGroup x:Name="CheckStates"><vsm:VisualState x:Name="Checked"><Storyboard><DoubleAnimationUsingKeyFrames Storyboard.TargetName="CheckIcon" Storyboard.TargetProperty="(UIElement.Opacity)"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames></Storyboard></vsm:VisualState><vsm:VisualState x:Name="Unchecked"/><vsm:VisualState x:Name="Indeterminate"><Storyboard><DoubleAnimationUsingKeyFrames Storyboard.TargetName="IndeterminateIcon" Storyboard.TargetProperty="(UIElement.Opacity)"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames></Storyboard></vsm:VisualState></vsm:VisualStateGroup><vsm:VisualStateGroup x:Name="FocusStates"><vsm:VisualState x:Name="Focused"><!--<Storyboard><DoubleAnimationUsingKeyFrames Storyboard.TargetName="ContentFocusVisualElement" Storyboard.TargetProperty="Opacity"><SplineDoubleKeyFrame KeyTime="0" Value="1"/></DoubleAnimationUsingKeyFrames></Storyboard>--></vsm:VisualState><vsm:VisualState x:Name="Unfocused"/></vsm:VisualStateGroup></vsm:VisualStateManager.VisualStateGroups><Grid.ColumnDefinitions><ColumnDefinition Width="20"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="grid"><Rectangle Height="18" Margin="1" x:Name="Background" Width="18" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" RadiusX="1" RadiusY="1" Fill="{x:Null}"/><Rectangle Height="18" Margin="1" x:Name="BackgroundOverlay" Width="18" Opacity="0" Fill="{StaticResource NormalBrush}" Stroke="#00000000" StrokeThickness="1" RadiusX="1" RadiusY="1"/><Rectangle Height="14" x:Name="BoxMiddleBackground" Width="14" Fill="{TemplateBinding Background}" Stroke="#00000000" StrokeThickness="1" RadiusX="1" RadiusY="1"/><Rectangle Height="14" x:Name="BoxMiddle" Width="14" StrokeThickness="1" RadiusX="1" RadiusY="1" Stroke="{x:Null}"><Rectangle.Fill><LinearGradientBrush EndPoint="0.64,0.88" StartPoint="0.62,0.15"><GradientStop Color="#FFFFFFFF" Offset="0.013"/><GradientStop Color="#F9FFFFFF" Offset="0.375"/><GradientStop Color="#EAFFFFFF" Offset="0.603"/><GradientStop Color="#D8FFFFFF" Offset="1"/></LinearGradientBrush></Rectangle.Fill></Rectangle><Rectangle Height="14" x:Name="BoxMiddleLine" Width="14" Opacity=".4" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="2" RadiusX="1" RadiusY="1"/><Path Height="14" Margin="1,1,0,1.5" x:Name="CheckIcon" Width="14.5" Opacity="0" Fill="Green" Stretch="Fill" Data="M102.03442,598.79645 L105.22962,597.78918 L106.78825,600.42358 C106.78825,600.42358 108.51028 <!--<Rectangle Height="2" x:Name="IndeterminateIcon" Width="6" Opacity="0" Fill="#FF333333"/><Rectangle Height="14" x:Name="DisabledVisualElement" Width="14" Opacity="0" Fill="#FFFFFFFF" RadiusX="1" RadiusY="1"/>--><!--<Rectangle Height="16" x:Name="ContentFocusVisualElement" Width="16" IsHitTestVisible="false" Opacity="0" Stroke="{StaticResource HighlightBrush}" StrokeThickness="1" RadiusX="2" RadiusY="2"/>--></Grid><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" VerticalAlignment="{TemplateBinding VerticalContentAlignment}</Grid></ControlTemplate></Setter.Value></Setter></Style>以上代码是窗体各个控件的样式源码和效果图,简单的样式其实不复杂,但是如果想要界⾯效果惊艳⼀些;就需要使⽤微软的另⼀个⼯具Microsoft Expression Blend 4去画⾃⼰想实现呈现的效果。
一、按钮式的界面制作过程:1、打开GUI Design Studio,新建一个设计,从元件面板中的“窗体与对话框”中拖出一个应用程序添加到设计文档中。
按F10把应用程序窗口设置为主元素,单击右键选择“添加位图”,选择图片作为背景图,在进行相应的文字及效果处理。
结果如下图:2、在窗体中添加9个按钮和两个文本框,输入相应的文本。
如下图:中的内容,并将外部的设计与屏幕区域的元件连接起来。
如图:以浏览或修改表格的内容,右键单击“库存存货”可以隐藏该窗体。
后面的六个按钮具有同样的功能,制作中没有一一做出来。
左键单击“退出”按钮,弹出一个对话框,询问是否保存对系统的更改。
左键单击“恢复初始值”按钮,弹出一个提醒的对话框,询问是否确定恢复系统初始值。
二、菜单式的界面设计过程:在设置菜单栏时,我把“销售报告”和“输入销售数据”归类为“销售”,把“员工度假和病假时间”和“确定员工工作时间”归类为“员工管理”。
我认为只有确定了“员工度假和病假时间”,才能确定“员工工作时间”;当销售数据产生了,才会生成销售报告。
制作步骤如下:1、第一步和按钮式的设计相同,输出的结果如下图:2、在屏幕区域外部添加一个弹出菜单和两个对话框,弹出菜单和菜单栏中的“文件”项目连接,弹出菜单的项目有“保存”“另存为”“打印”“恢复初始值”“退出”等。
运行模拟器时,左键单击“文件”,出现下拉菜单,左键单击下拉菜单中的“恢复初始值”或“退出”,效果与按钮式界面的效果相同,就不再细说。
如图:3、在屏幕区域外部添加三个弹出菜单,他们分别是“员工管理”“销售”和“帮助”的下拉菜单。
“员工管理”的下拉菜单中包含“员工度假和病假时间”和“确定员工工作时间”两个项目,“确定员工工作时间”开始是禁用的,当“员工度假和病假时间”中有数据时才可用。
“销售”的下拉菜单中包含“销售报告”和“输入销售数据”两个项目,“销售报告”开始是禁用的,当“输入销售数据”中有数据时才可用。
用设计各种形状的窗体界面窗体是程序设计最常见,最普通,也是最容易受到程序员忽视的编程对象。
一般来说,在Visual 针对窗体的编程是不需要人为介入的,因为可视化编程工具Visual 已经按照窗体的缺省状态实现了。
但是在最近遇到的应用程序中。
我们发现越来越多的应用程序中使用到各种不同规则的窗体,这些不同规则的窗体给应用程序带来异常的情趣和不同平常的效果的同时,也促使使用者思考这样一个问题,如何创建这些窗体?在Visual 中提供了一种简单、直接创建不规则窗体的方法,本文的主要内容就是探讨一下这些方法具体的实现过程。
下面就来详细介绍在中实现五种不同规格窗体的方法,即:椭圆形、扇形、圆形、环形和三角形。
掌握了这五种不同形状窗体的实现方法后,我想对于其他规则的窗体就不应该有什么问题了。
Visual Basic .Net中创建、使用MDI窗体也是本文的重要内容之一,MDI是Multi DocumentInterface的简称,即:多文档界面,MDI最早出现于Windows2.0中,最先使用到MDI的应用程序是Excel电子表格。
为了方便使用者同时能够操作多份电子表格,Excel就采用了MDI来解决这个问题。
到了Windows3.1中,MDI在应用程序中得到了更大范围的应用。
其中Windows3.1中的程序管理器和文件管理器都采用了MDI。
目前MDI在应用程序中依然被广泛采用。
下面就首先来介绍一下Visual 创建不规则窗体的相关知识和具体实现方法。
一.简介Visual Basic .Net中定制不规则窗体时使用的类库:Visual 中定制不规则窗体主要使用到Region类和GraphicsPath类,其中以GraphicsPath类最为重要。
GraphicsPath类和Region类分别位于.Net FrameWorkSDK中的"System.Drawing.Drawing2D"命名空间和"System.Drawing"命名空间。
Visual Studio 窗体设计案例参考
以下是一个简单的Visual Studio窗体设计案例,它是一个登录界面:
1.打开Visual Studio,创建一个新的Windows窗体应用项目。
2.在窗体设计器中,从工具箱拖动一个Label控件、两个TextBox 控件和一个Button控件到窗体上。
3.设置Label控件的Text属性为“用户名”,TextBox控件的Text属性清空,设置Button控件的Text属性为“登录”。
4.双击Button控件,Visual Studio会自动生成一个点击事件处理方法。
在这个方法中,编写如下代码:
c
private void button1_Click(object sender, EventArgs e)
{
string username = textBox1.Text;
string password = textBox2.Text;
if (username == "admin" && password == "123456")
{
MessageBox.Show("登录成功!");
}
else
{
MessageBox.Show("用户名或密码错误!");
}
}
5.运行程序,测试登录功能是否正常。
以上是一个简单的Visual Studio窗体设计案例,通过这个案例可以了解如
何使用Visual Studio设计窗体界面和添加控件,以及如何编写事件处理方法。
当然,实际应用中窗体设计会更加复杂,需要更多的控件和事件处理方法来完成功能。
pythonGUI库图形界⾯开发之PyQt5美化窗体与控件(异形窗体)实例这篇⽂章主要介绍了python GUI库图形界⾯开发之PyQt5美化窗体与控件(异形窗体)实例,需要的朋友可以参考下在默认情况下,我们使⽤PyQt5创建出来的窗⼝和部件都是默认的样式,虽然谈不上很丑,但是也毫⽆美感可⾔。
其实,在PyQt5中,我们可以有较⾼的⾃由度来⾃定义窗⼝和各种⼩部件的样式,通过⾃定义这些样式,以达到美化图形界⾯的⽬的。
本篇⽂章中,我们就通过⼀个实际的例⼦,使⽤QSS和PyQt5的配置属性,实现图形⽤户界⾯的美化⼯作。
⾸先上效果图:⼀、对界⾯进⾏布局和组件的布置在图像界⾯编程中,⼀个好的布局有助于全局把控界⾯的形态,⽽在PyQt5中,有多种布局的⽅式供我们选择,⽐较常⽤的布局有以下⼏种:表单布局:QFormLayout⽹格布局:QGridLayout⽔平排列布局:QHBoxLayout垂直排列布局:QVBoxLayout每种布局都有⾃⼰对布局内⼩部件的控制⽅式和特点,在此我们选择⽹格布局作为本次图形界⾯布局的⽅案。
在⽹格布局内,使⽤两个QWidget()部件分别作为左侧菜单模块的部件和右侧内容模块的部件。
所以这个图形界⾯的最基本结构代码如下所⽰:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35# coding:utf-8from PyQt5 import QtCore,QtGui,QtWidgetsimport sysimport qtawesomeclass MainUi(QtWidgets.QMainWindow):def__init__(self):super().__init__()self.init_ui()def init_ui(self):self.setFixedSize(960,700)self.main_widget =QtWidgets.QWidget() # 创建窗⼝主部件self.main_layout =QtWidgets.QGridLayout() # 创建主部件的⽹格布局self.main_widget.setLayout(self.main_layout) # 设置窗⼝主部件布局为⽹格布局self.left_widget =QtWidgets.QWidget() # 创建左侧部件self.left_widget.setObjectName('left_widget')self.left_layout =QtWidgets.QGridLayout() # 创建左侧部件的⽹格布局层self.left_widget.setLayout(self.left_layout) # 设置左侧部件布局为⽹格self.right_widget =QtWidgets.QWidget() # 创建右侧部件self.right_widget.setObjectName('right_widget')self.right_layout =QtWidgets.QGridLayout()self.right_widget.setLayout(self.right_layout) # 设置右侧部件布局为⽹格self.main_layout.addWidget(self.left_widget,0,0,12,2) # 左侧部件在第0⾏第0列,占8⾏3列 self.main_layout.addWidget(self.right_widget,0,2,12,10) # 右侧部件在第0⾏第3列,占8⾏9列 self.setCentralWidget(self.main_widget) # 设置窗⼝主部件def main():app =QtWidgets.QApplication(sys.argv)gui =MainUi()gui.show()sys.exit(app.exec_())3536 37 38 39if__name__ =='__main__': main()运⾏代码,呈现出来的图形界⾯如下图所⽰:空空荡荡,下⾯我们就开始往⾥⾯填充⼩部件。
简述窗体的概念
窗体是指在计算机界面中,用于展示和交互处理的显示区域。
它是构成图形用户界面(GUI)的基本元素,通常呈现矩形或其他规则的几何形状,用户可以通过鼠标或键盘等输入设备与之交互。
窗体在计算机系统中扮演着重要的角色,它能够装载各种程序和应用程序,并将它们的界面呈现给用户。
一个窗体通常由标题栏、边框、菜单栏、工具条、内部控件、滚动条和关闭按钮等组成,用户可以通过这些元素进行各种操作,例如最小化、最大化、移动、调整大小、关闭、打开菜单等等。
窗体可以分为单文档界面(SDI)和多文档界面(MDI)两种。
SDI是指一个窗体仅显示一个文档,而MDI则允许在一个窗体下面显示多个文档,一般用于需要同时操作多个文件的应用程序中,例如文本编辑器、工程管理器等。
Windows操作系统中的窗体通常由钩子函数控制,这些钩子函数负责捕获和处理系统和用户交互事件,确保窗体的正常运行。
使用窗体可以简化用户的操作,提高应用程序的易用性和交互性,同时也可以使得程序更具美感和可读性。
在现代GUI框架中,使用窗体一般需要使用高级编程语言或开发工具,例如C#、、Java、Python、Qt、WPF等,这些语言和工具提供了丰富的控件库和开发工具,使得使用窗体更加便捷和高效。
此外,随着移动设备和平板电脑等多种终端设备的普及,窗体的设计也需要考虑兼容性和自适应性等因素,以适应
不同的屏幕尺寸和终端设备。
总之,窗体是图形用户界面中最基本的元素之一,它是应用程序提供交互和显示的重要场所,可以大大提高应用程序的易用性和交互性,同时也是GUI开发的基础知识之一。
qt界面设计例子Qt是一款跨平台的C++应用程序开发框架,提供了丰富的图形界面设计工具和组件,可以用于开发各种桌面应用程序。
下面是我列举的10个符合标题要求的Qt界面设计例子:1. 登录界面:一个简洁的界面,包含用户名和密码输入框以及登录按钮,用户可以输入用户名和密码进行登录操作。
2. 主界面:一个包含多个功能模块的界面,例如菜单栏、工具栏和主窗口,用户可以通过菜单或工具栏选择不同的功能模块进行操作。
3. 设置界面:用于设置应用程序的各种参数和选项,例如语言、主题、字体等,用户可以通过界面上的控件进行设置。
4. 列表界面:显示一个数据列表,例如联系人列表、文件列表等,用户可以通过界面上的滚动条或搜索框浏览和搜索列表中的数据。
5. 图表界面:显示各种统计图表,例如柱状图、折线图、饼图等,用户可以通过界面上的控件选择不同的数据和图表类型进行展示。
6. 文件浏览界面:用于浏览和管理文件和文件夹,界面上包含文件列表、文件预览窗口和操作按钮,用户可以通过界面上的控件进行文件操作。
7. 视频播放界面:用于播放视频文件,界面上包含视频播放窗口、播放控制按钮和播放进度条,用户可以通过界面上的控件控制视频的播放。
8. 图片编辑界面:用于编辑图片,界面上包含图片显示窗口、编辑工具栏和保存按钮,用户可以通过界面上的控件对图片进行裁剪、旋转、调整亮度等操作。
9. 聊天界面:用于实时聊天和交流,界面上包含聊天记录窗口、输入框和发送按钮,用户可以通过界面上的控件发送和接收消息。
10. 日历界面:用于显示和管理日期和日程安排,界面上包含日历控件、事件列表和添加按钮,用户可以通过界面上的控件查看和添加日程安排。
以上是我列举的10个符合要求的Qt界面设计例子,这些例子涵盖了常见的应用场景,通过合理的布局和丰富的控件,可以提供良好的用户体验。
无论是开发桌面应用程序还是嵌入式应用程序,Qt都能提供强大的界面设计和开发能力,帮助开发者快速构建出优秀的应用程序。
使用C++绘制不规则的窗体减小字体增大字体作者:不详来源:转载发布时间:2010-02-23 07:43:00一、序言在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。
矩形窗体,具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和简单小游戏中使用足矣。
但在某些娱乐游戏程序中使用就略显呆板些了,这时若用不规则窗体替代原先的矩形窗体,将会使这类程序更添情趣。
典型的例子有windows 自代的Media Player,新版本的Media Player 有个控制面板的选项,选中这些面板,播放器就以选中的面板形状出现,这时的播放器比以前版本的Media Player的古老矩形界面要生动有趣的多了。
要实现不规则窗体不是太难,知道了基本原理后,你也可以创建各种有趣的不规则窗体。
二、实现原理所有的Windows 窗体都位于一个称为“region”中,窗体的大小如果超出“region”的范围,windows 会自动裁剪超出"region"范围那部分的窗体,使其不可见。
所以,要创建不规则窗体有两个步骤:第一步就是创建不规则"region".第二步就是将窗体放到创建的“region”中。
其中第二步很简单就调用一条语句即可。
在SDK中调用API函数SetWindowRgn,该函数原型如下:int SetWindowRgn( HWND hWnd, HRGN hRgn, BOOL bRedraw );其中hWnd为待设置的窗体句柄,hRgn为已经创建的"region"句柄,bRedraw代表是否要重绘窗体。
在MFC 中使用窗口类CWnd的成员函数int CWnd::SetWindowRgn(HRGN hRgn, BOOL bRedraw );该函数的参数意义与API中同名函数相同。
相对与第二步,创建不规则窗体的第一步要复杂许多,并且不规则窗体越复杂,创建其"region"的过程也越复杂。
Visual C++窗体设计技巧集[前言:]有好的界面软件就成功了一半,本文将向您介绍怎样设计一些有“稀奇古怪”形状的窗体,如何设定窗体的颜色、如何设置任务栏和状态栏以及菜单图标等等,通过这些技巧能更深入的理解VC的文档-视图结构。
一、如何制作透明窗体使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。
不过此函数在w2k的user32.dll 里有实现,所以如果你不希望下载巨大的sdk的话,可以直接使用GetProcAddress获取该函数的指针。
SetLayeredWindowAttributes的函数原型如下:BOOL SetLayeredWindowAttributes(HWND hwnd, // handle to the layered windowCOLORREF crKey, // specifies the color keyBYTE bAlpha, // value for the blend functionDWORD dwFlags // action);Windows NT/2000/XP: Included in Windows 2000 and later.Windows 95/98/Me: Unsupported.(注意了,在win9x里没法使用的)Header: Declared in Winuser.h; include Windows.h.Library: Use User32.lib.一些常量:WS_EX_LAYERED = 0x80000;LWA_ALPHA = 0x2;LWA_COLORKEY=0x1;其中dwFlags有LWA_ALPHA和LWA_COLORKEYLWA_ALPHA被设置的话,通过bAlpha决定透明度.LWA_COLORKEY被设置的话,则指定被透明掉的颜色为crKey,其他颜色则正常显示.要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性(旧的sdk没有定义这个属性,所以可以直接指定为0x80000).例子代码:在OnInitDialog()加入://加入WS_EX_LAYERED扩展属性SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);HINSTANCE hInst = LoadLibrary("User32.DLL");if(hInst){typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);MYFUNC fun = NULL;//取得SetLayeredWindowAttributes函数指针fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");if(fun)fun(this->GetSafeHwnd(),0,128,2);FreeLibrary(hInst);}稍加修改还可以作出淡出淡入的效果. 注意第三个参数(128)不要取得太小了,为0的话就完全透明,看不到了。
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 班级学号姓名指导教师成绩
实验题目图形用户界面设计—窗口设计实验时间
一实验目的
1. 练习图形用户界面设计;
2. 实现一个单文档的窗体程序;
3. 掌握在Microsoft Visual 2012或者Java IDE环境下设计图形界面编程技术。
二实验平台
2.1操作系统:
Windows 7或者Windows 10
2.2开发环境:
Microsoft Visual 2012或者Java IDE。
三实验内容和要求
将实验一中实现的单文档程序,设计成图形用户界面程序。
主要实现以下功能。
(1)设计状态栏,对于选中的菜单项,在状态栏给出相应提示。
(2)窗口可以最大化和最小化,可以用鼠标缩放界面大小,并能自动根据窗体的大小调整界面控件的位置和大小。
(3)用户可以定制菜单和工具栏;
(4)关闭窗体时给出提示信息,让用户确认是否关闭程序。
四实验报告
4.1 实验环境:
4.2 实验内容与完成情况:
4.3 出现的问题:
4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题)
1。
【C#界面】完美实现无毛边异形窗体实现效果图1:实现效果图2:实现效果图3:异形窗体的实现思路(一)、采用UpdateLayeredWindow这个api函数基于Png图alpha通道绘制异形窗口优点:真正意义上的异形窗口缺点:用了WS_EX_LAYERED后当前窗体不处理paint事件,所以窗体上无法绘制控件,但这个控件确存在,而且可以响应事件解决无法绘制控件方法:1、思路:采用双层窗口:底层背景窗口层与顶层控件层,用控件层Show()背景层,同时处理窗体的窗口移动事件,让另外一个窗体同步移动或者做其它事情。
2、实现:底层背景层:采用UpdateLayeredWindow这个api函数基于带Alpha通道的Png 图绘制顶层控件层:方法一:采用无边框窗口,把窗口背景颜色BackColor设置一个不常用颜色例如:ff00ff颜色,且把窗口TransparencyKey颜色属性设跟背景色BackColor一样(意义:去除带背景色的区域从而显示后面背景层)方法二:采用无边框窗口,把窗口背景设为背景层对应位置的位图,给人一种透明的效果,但是编辑会有所限制。
(SkinWhetherTank属性可以切换这两种透明模式)优点:可以解决显示控件的问题,不影响控件的使用缺点:方法一会让部分控件有毛边,方法二会让窗体编辑受限制。
(缺点有待解决,望高手指点)属性:GradientTime:控件层渐变特效时长(越小越快)。
MainPosition:窗口在绘图层位置。
SkinBack:设置或获取绘图层窗口背景。
SkinMobile:窗体是否可以移动。
SkinOpacity:设置或获取绘图层窗口透明度(0-255)。
SkinShowInTaskbar:绘图层是否出现在Windows任务栏中。
SkinSize:设置或获取绘图层窗口大小。
SkinTrankColor:绘图层需要透明的颜色。
SkinWhetherTank:绘图层是否开启位图仿透明注意(SkinOpacity < 255时,此属性为False可达到背景透明,控件不透明的效果。
Winform⾃定义窗体样式,实现标题栏可灵活⾃定义
本⼈最近想做个桌⾯应⽤,参考了⼀下时下流⾏的各个软件,发现⼤部分软件的标题栏都是⾃定义的,甚⾄没有标题栏,整个窗⼝为⼀个整体。
从整体感来说,默认的标题栏⾮常的破坏软件风格的⼀致性,尤其是设置背景图时,标题栏的颜⾊会显得很碍眼。
所以,找了⼀些⼤神分享的技术贴,也同时给⼤家分享下我的⼼得。
【重点说明】
主要过程可分为两个部分:
1. 隐藏原有的标题栏
2. 个性定制⾃⼰的标题栏
【操作过程】
隐藏标题栏
简单的隐藏⽅式,是设置Form窗⼝的FormBorderStyle属性为FormBorderStyle.None。
但是缺点是,窗⼝尺⼨⽆法修改。
另外⼀种⽅案是设置Form窗⼝的ControlBox属性为False,并且Text设置为空。
下⾯就感受下吧
标准风格
ControlBox设置为 False
Text设置为空
个性定制标题栏
如果不需要标题栏,可直接忽略此部分内容
定制的⽅案有很多,最简单的⽅式就是增加⼀个置顶的Panel,放上最⼩/最⼤/关闭按钮。
创建磨砂窗体的方法
创建磨砂窗体的方法有很多种,以下提供两种:
方法一:
1. 打开一个窗口类,设置窗口的样式为无边框,并隐藏标题栏。
2. 创建一个窗口类,设置窗口的样式为无边框,并隐藏标题栏。
3. 在窗口类中添加一个图像控件,用于显示磨砂效果。
4. 在图像控件中加载一张图片,并设置其透明度为50%。
5. 在窗口类中添加一个定时器,每隔一段时间就对图像控件进行一次重绘,以实现磨砂效果。
6. 在定时器的重绘事件中,使用位运算将图像控件的像素值进行模糊处理,并使用透明度混合算法将模糊后的像素值与原始像素值进行混合。
7. 重复执行步骤6,直到达到所需的磨砂效果。
方法二:
1. 打开一个窗口类,设置窗口的样式为无边框,并隐藏标题栏。
2. 在窗口类中添加一个控件数组,用于显示磨砂效果。
3. 在控件数组中添加一些按钮控件或标签控件,用于模拟磨砂效果。
4. 在窗口类中添加一个定时器,每隔一段时间就对控件数组中的控件进行一次重绘,以实现磨砂效果。
5. 在定时器的重绘事件中,使用随机数生成器随机改变每个控件的透明度、大小和位置,以模拟磨砂效果。
6. 重复执行步骤5,直到达到所需的磨砂效果。
以上是两种创建磨砂窗体的方法,可以根据实际需求选择适合自己的方法。
用设计各种形状的窗体界面一文章来源:互联网窗体是程序设计最常见,最普通,也是最容易受到程序员忽视的编程对象。
一般来说,在Visual Basic .Net针对窗体的编程是不需要人为介入的,因为可视化编程工具Visual Studio .Net已经按照窗体的缺省状态实现了。
但是在最近遇到的应用程序中。
我们发现越来越多的应用程序中使用到各种不同规则的窗体,这些不同规则的窗体给应用程序带来异常的情趣和不同平常的效果的同时,也促使使用者思考这样一个问题,如何创建这些窗体?在Visual Basic .Net中提供了一种简单、直接创建不规则窗体的方法,本文的主要内容就是探讨一下这些方法具体的实现过程。
下面就来详细介绍在Visual Basic .Net 中实现五种不同规格窗体的方法,即:椭圆形、扇形、圆形、环形和三角形。
掌握了这五种不同形状窗体的实现方法后,我想对于其他规则的窗体就不应该有什么问题了。
Visual Basic .Net中创建、使用MDI窗体也是本文的重要内容之一,MDI是Multi Document Interface的简称,即:多文档界面,MDI最早出现于Windows 2.0中,最先使用到MDI的应用程序是E xcel电子表格。
为了方便使用者同时能够操作多份电子表格,Excel 就采用了MDI来解决这个问题。
到了Windows3.1中,MDI在应用程序中得到了更大范围的应用。
其中Windows 3.1中的程序管理器和文件管理器都采用了MDI。
目前MDI在应用程序中依然被广泛采用。
下面就首先来介绍一下Visual Basic .Net创建不规则窗体的相关知识和具体实现方法。
一.简介Visual Basic .Net中定制不规则窗体时使用的类库:Visual Basic .Net中定制不规则窗体主要使用到Region类和G raphicsPath类,其中以GraphicsPath类最为重要。
GraphicsPath类和Region类分别位于.Net FrameWork SDK中的"System.Drawing.Drawi ng2D"命名空间和"System.Drawing"命名空间。
在Visual Basic .Net中具体实现各种不规则窗体的过程中,GraphicsPath主要作用是根据程序员的要求,通过GraphicsPath中提供的方法绘制不同规则的形状。
Region的主要作用是依靠GraphicsPath实例来初始化Region对象,从而形成不规则窗体。
其具体的实现过程是,首先通过GraphicsPath类构造函数创建GraphicsPath实例,然后通过GraphicsPath中提供的方法按照程序员的要求绘制形状,最后以GraphicsPath实例来初始化Region对象。
完成不规则窗体。
可见了解、掌握GraphicsPath类对于理解本文介绍的实现方法是非常必要的。
表01和表02分别是GraphicsPath类的常用方法和常用属性及其说明:在本文用Visual Basic .Net实现的椭圆形、扇形、圆形、环形和三角形等形状窗体中就使用到GraphicsPath中的AddEllipse方法(绘制椭圆形)、AddPie方法(绘制扇形)、AddLine方法(绘制直线)等方法。
GraphicsPath中提供了丰富的方法,这对实现更复杂的窗体形状是非常有用的,但完全掌握这些方法的使用方法也需要花费大量的时间和精力。
二.Visual Basic .Net中定制不规则窗体的具体步骤:正如前文所说在Visual Basic .Net定制不同规则的窗体是比较容易的,再了解了上面内容后,下面就是在Visual Basic .Net实现椭圆形、扇形、圆形、环形和三角形等五种形状窗体的具体实现步骤:1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual Basic项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【中定制不规则窗体】。
6. 在【位置】的文本框中输入【E:\项目】,然后单击【确定】按钮,这样在"E:\项目"目录中就产生了名称为"VB. NET中定制不规则窗体"的文件夹,并在里面创建了名称为" 中定制不规则窗体"的项目文件。
具体如图01所示:图01:【中定制不规则窗体】新建项目对话框7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:五个Button组件,用以定制五种不同形状窗体,并在这个Butt on组件拖入Form1的设计窗体后,双击它们,则系统会在Form1.vb 文件分别产生这五个组件的Click事件对应的处理代码。
4. 在上述组件拖入窗体后,分别按照图02所示排列并设置窗体中的各组件:图02:【中定制不规则窗体】项目的设计界面Regin对象System.Drawing的一个对象,指示由矩形和由路径构成的图形形状的内部。
因为区域的坐标是在全局坐标中指定的,所以可对它进行缩放。
然而,在绘制表面上,它的内部取决于表示它的像素的大小和形状。
应用程序可以使用若干区域来堆砌绘图操作的输出。
窗口管理器则使用区域来定义窗口的绘制区域。
这些区域被称为剪辑区域。
应用程序还可以在命中检测的操作中使用区域,例如检查一个点或矩形是否与某个区域相交。
应用程序可通过使用Brush 对象来填充一个区域。
GraphicsPath表示一系列相互连接的直线和曲线,应用程序使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域。
图形引擎在全局坐标空间中维护路径内的几何形状的坐标。
路径可由任意数目的图形(子路径)组成。
每一图形都是由一系列相互连接的直线和曲线或几何形状基元构成的。
图形的起始点是相互连接的一系列直线和曲线中的第一点。
终结点是该序列中的最后一点。
几何形状基元的起始点和终结点都是由基元规范定义的。
8. 把Visual Basic .Net当前窗口切换到Form1.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为椭圆形:Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.ClickDim p As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath ( )Dim Width As Integer = Me.WidthDim Height As Integer = Me.Heightp.AddEllipse( 0 , 20 , Width -50 , Height -100 )'根据要绘制椭圆的形状来填写AddEllipse方法中椭圆对应的相应参数Region= New Region ( p )End Sub9. 用下列代码替换Form1.vb中的Button2的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为扇形:Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.ClickDim p As System.Drawing.Drawing2D.GraphicsPath = New S ystem.Drawing.Drawing2D.GraphicsPath ( )p.AddPie( 10 , 10 , 250 , 250 , 5 , 150 )'根据要实现的扇形形状来填写AddPie方法中的相应参数Me.Region = New Region ( p )End Sub10. 用下列代码替换Form1.vb中的Button3的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为圆形:Private Sub Button3_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button3.ClickDim p As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath ( )Dim Width As Integer = Me.WidthDim Height As Integer = Me.Heightp.AddEllipse( 0 , 0 , Height , Height )Me.Region = New Region ( p )'圆形即是椭圆的一种特例,End Sub11. 用下列代码替换Form1.vb中的Button4的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为环形:Private Sub Button4_Click ( ByVal sender As System.Object ,ByVal e As System.EventArgs ) Handles Button4.ClickDim p As System.Drawing.Drawing2D.GraphicsPath = New S ystem.Drawing.Drawing2D.GraphicsPath ( )Dim Height As Integer = Me.HeightDim width As Integer = 100p.AddEllipse ( 0 , 0, Height , Height )p.AddEllipse ( width , width , Height -( width * 2 ) , Heig ht -( width * 2 ) )'根据环形的形状来分别填写AddEllipse方法中相应的参数Me.Region = New Region ( p )End Sub12. 用下列代码替换Form1.vb中的Button5的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为三角形:Private Sub Button5_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button5.ClickDim p As System.Drawing.Drawing2D.GraphicsPath = New S ystem.Drawing.Drawing2D.GraphicsPath ( )p.AddLine ( 0 , 0 , 250 , 150 )p.AddLine ( 250 , 150 , 0 , 300 )p.AddLine ( 0 , 0 , 0 , 300 )'根据三角形的形状特征来分别填写AddLine方法中相应的参数Me.Region = New Region ( p )End Sub13. 至此在上述步骤都正确完成后,【中定制不规则窗体】项目的全部工作就基本完成了。