C#(三十五)之在滚动窗口中绘图

53 篇文章 1 订阅

窗体中的三个属性:

Size:窗体大小(包括标题栏和边框)


ClientSize:工作区大小(不包括标题栏和边框)


AutoScrollMinSize:出现滚动条的最小尺寸


设置出现滚动条的最小尺寸

this.AutoScrollMinSize = new Size(300,250);

实例:

protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaintBackground(e);
            Graphics g = e.Graphics;
            // 当滚动条移动时坐标平移,使其始终保持在左上角原点
            g.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
            // 从0,0点向右伸展200,向下伸展150
            g.FillRectangle(Brushes.Bisque,0,0,200,150);
            // 从0,0点向右伸展300,向下伸展100
            g.FillEllipse(Brushes.DarkOliveGreen,0,150,300,100);
       
        }

当滚动条移动时坐标平移,使其始终保持在左上角原点

g.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C#实现歌词滚动效果的步骤: 1.读取歌词文件,将歌词按照时间轴排序。 2.在WPF创建一个Canvas控件,用于绘制歌词。 3.使用GDI+绘图技术,在Canvas上绘制歌词。 4.使用DispatcherTimer定时器,每隔一段时间更新歌词的位置。 5.根据当前播放时间,计算出当前应该显示的歌词,并将其高亮显示。 6.根据当前播放时间和歌词的时间轴,计算出歌词应该滚动的距离,并更新歌词的位置。 7.将Canvas控件添加到WPF窗口,即可实现歌词滚动效果。 以下是示例代码: ```csharp // 读取歌词文件,将歌词按照时间轴排序 List<Lyric> lyrics = ReadLyricFile("lyric.lrc"); lyrics.Sort(); // 在WPF创建一个Canvas控件,用于绘制歌词 Canvas canvas = new Canvas(); canvas.Width = 400; canvas.Height = 300; // 使用GDI+绘图技术,在Canvas上绘制歌词 Graphics graphics = Graphics.FromHwnd(new WindowInteropHelper(this).Handle); graphics.TextRenderingHint = TextRenderingHint.AntiAlias; graphics.SmoothingMode = SmoothingMode.AntiAlias; Font font = new Font("微软雅黑", 16, FontStyle.Regular); Brush brush = new SolidBrush(Color.White); for (int i = 0; i < lyrics.Count; i++) { graphics.DrawString(lyrics[i].Content, font, brush, new PointF(0, i * 20)); } // 使用DispatcherTimer定时器,每隔一段时间更新歌词的位置 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(100); timer.Tick += (sender, e) => { // 根据当前播放时间,计算出当前应该显示的歌词,并将其高亮显示 int index = GetLyricIndex(lyrics, currentTime); for (int i = 0; i < lyrics.Count; i++) { if (i == index) { graphics.DrawString(lyrics[i].Content, font, new SolidBrush(Color.Yellow), new PointF(0, i * 20)); } else { graphics.DrawString(lyrics[i].Content, font, brush, new PointF(0, i * 20)); } } // 根据当前播放时间和歌词的时间轴,计算出歌词应该滚动的距离,并更新歌词的位置 double offset = GetLyricOffset(lyrics, index, currentTime); canvas.Margin = new Thickness(0, -offset, 0, 0); }; // 将Canvas控件添加到WPF窗口 this.Content = canvas; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值