设计各种形状的窗体界面
- 格式: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都能提供强大的界面设计和开发能力,帮助开发者快速构建出优秀的应用程序。
用设计各种形状的窗体界面一文章来源:互联网窗体是程序设计最常见,最普通,也是最容易受到程序员忽视的编程对象。
一般来说,在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. 至此在上述步骤都正确完成后,【中定制不规则窗体】项目的全部工作就基本完成了。