随鼠标移动而变色的背景
第01个小程序:随鼠标移动而变色的背景(VaryTheBackground.cs) 程序运行时,当鼠标指针靠近窗口中心程度不同,客户区的背景颜色也不同。 using System; using System.Windows; using System.Windows.Input; using System.Windows.Media; namespace Chapter02 { public class VaryTheBackground : Window { SolidColorBrush brush = new SolidColorBrush(Colors.Black); //创建画刷 。SolidColorBrush是最简单的画刷。 [STAThread] public static void Main() { Application app = new Application(); app.Run(new VaryTheBackground()); } public VaryTheBackground() { Title = "Vary the Background"; Width = 384; Height = 384; Background = brush; } //鼠标移动事件 protected override void OnMouseMove(MouseEventArgs args) { //窗口呈现尺寸-边框和标题栏的尺寸 double width = ActualWidth - 2 * SystemParameters.ResizeFrameVerticalBorderWidth; double height = ActualHeight - 2 * SystemParameters.ResizeFrameHorizontalBorderHeight - SystemParameters.CaptionHeight; Point ptMouse = args.GetPosition(this); //获取鼠标位置 Point ptCenter = new Point(width / 2, height / 2); //窗口中心 Vector vectMouse = ptMouse - ptCenter; //向量。向:中心指向鼠标位置;量:鼠标位置与中心距离 double angle = Math.Atan2(vectMouse.Y, vectMouse.X); Vector vectEllipse = new Vector(width/ 2 * Math.Cos(angle), height / 2 * Math.Sin(angle)); Byte byLevel = (byte)(255 * (1 - Math.Min(1, vectMouse.Length / vectEllipse.Length))); Color clr = brush.Color; clr.R = clr.G = clr.B = byLevel; brush.Color = clr; } } } 【随鼠标移动而变色的背景】小程序是一个基于WPF(Windows Presentation Foundation)技术的简单应用,它展示了如何响应鼠标的移动并动态改变窗口的背景颜色。程序的核心是利用鼠标移动事件(OnMouseMove)来计算鼠标相对于窗口中心的位置,并根据这个位置调整背景颜色。 1. **命名空间引用**: - `using System`:引入了.NET Framework的基础类库,包含常用的基本类型和系统服务。 - `using System.Windows`:提供了WPF框架的基础类和接口,包括UI元素和数据绑定等。 - `using System.Windows.Input`:提供了与用户输入相关的类,如鼠标和键盘事件。 - `using System.Windows.Media`:包含了用于图形绘制和颜色处理的类,例如我们用到的`SolidColorBrush`和`Color`。 2. **VaryTheBackground类**: - 继承自`Window`类,表示应用程序的主窗口。 - 成员变量`SolidColorBrush brush`用于存储背景颜色,初始化为黑色。 3. **Main方法**: - 使用`[STAThread]`特性标记,表明该方法是单线程 Apartment 模式,这是大多数Windows GUI应用程序的默认模式。 - 创建一个新的`Application`实例,并运行`VaryTheBackground`窗口。 4. **构造函数**: - 设置窗口的标题、宽度和高度,并将`brush`作为背景颜色。 5. **OnMouseMove事件处理**: - 获取窗口的实际宽度和高度,减去边框和标题栏尺寸,得到可用的客户区尺寸。 - 计算鼠标位置相对于窗口中心的向量`vectMouse`,以及理想状态下从窗口中心到边缘的向量`vectEllipse`。 - 使用`Math.Atan2`计算角度,然后通过正弦和余弦函数调整`vectEllipse`,使其与`vectMouse`同向。 - 计算颜色的级别(`byLevel`),根据鼠标位置到中心的距离,让颜色逐渐由深变浅。 - 更新背景颜色,使R、G、B三个通道的值相等,即背景颜色为灰度。 6. **颜色处理**: - WPF中的颜色通过`Color`结构表示,它具有红、绿、蓝和Alpha(透明度)四个通道。在这个程序中,我们只关注RGB,且保持它们的值一致,以得到不同的灰色调。 这个小程序通过监听鼠标移动事件,实时计算鼠标位置与窗口中心的关系,进而改变窗口背景的灰度,实现了视觉上随着鼠标接近窗口中心颜色逐渐变淡的效果。这展示了WPF事件处理机制以及色彩操作的基本用法。