学习笔记--实现类似酷狗音乐歌词的效果

一直以来都是,想起一个问题了,就网上查资料,就看别人的博客。这样发现好多时候,其实这个问题以前查过了,每次都得浪费精力再查,而且结果还不一定好。所以呢,以后遇到问题还是要找个靠谱的地方记录下来,学着在这里写点东西做记录。

科技改变生活,我最喜欢这句话了,我们的生活无时不是被改变着,可是,却没有一样是因为我自己而改变的,都是被动着由别人改变。最近要努力学习开发,步入程序猿的行列,我也希望有一天,生活是由我来改变着。学东西不喜欢那种一本书一本书的看,一个知识点一个知识点的记,估计这也是为什么我学习成绩那么差。看别人的东西,看来看去就只体会到一样,就是那人很牛X,始终那都是别人的东西。顶多模仿能力强的人,能模仿者作者的思维,可是模仿再像也成不了大师,自认为我模仿能力还是不错滴。

这么多年来,也都养成了无数的坏习惯,一直也都想改,不过说实话,靠意志力这种事,是最不靠谱的。发展到后来,就在手机上定了N个闹钟,来提醒我到什么时候了,有没有什么事还没做。不过效果也不好,毕竟手机闹钟这种东西,提醒的直观性不高,很多随手就给关了。现在学了一点编程的技术,就想自己做个小程序,能够在电脑屏幕上浮出几个字来提醒我该做什么事。想了想,显示的方式就像是酷狗的歌词那样的效果。

首先当然是拿稍微熟悉的winform来练手了,现在得显示一个完全透明的窗口,窗口上面只显示几个文字。

第一步就要实现完全透明的窗口。这个就比较简单了,学winform基础时候晓得有FormBorderStyle熟悉可以设置窗体的边框样式,通过BackColor和TransparencyKey属性就能让窗口完全透明。

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.BackColor = System.Drawing.Color.Yellow;
this.TransparencyKey = System.Drawing.Color.Yellow;

然后在Form里面加一个label,写几个字,运行一下,发现效果还不错,跟我想的一样,屏幕上什么都没有,就只有label的文字。但是多看一下发现一个问题,虽然说窗口没显示,但实际上窗口是存在的,也就是当文字盖在某个窗体上面时,在Form区域点击鼠标是无效的。也就是说窗体不能接收鼠标事件,鼠标事件是穿透到下面的窗口了的。然后百度了一下鼠标穿透的实现,下面的代码是百度上来的,暂时还没研究原理。

[DllImport("user32", EntryPoint = "SetWindowLong")]
private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong);

[DllImport("user32", EntryPoint = "GetWindowLong")]
private static extern uint GetWindowLong(IntPtr hwnd, int nIndex);
private const int GWL_EXSTYLE = -20;
private const uint WS_EX_LAYERED = 0x80000;
private const int WS_EX_TRANSPARENT = 0x20;

private void CanPenetrate()
{
    uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
    uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
}

private void Form2_Load(object sender, EventArgs e)
{
    CanPenetrate();
    this.TopMost=true;
}

再运行程序,想要的效果就达到了。接着呢就再试试在WPF上实现这样的效果,在WPF上想法也一样,一上来就先试试让窗体完全隐藏,就设置完WindowStyle属性和Background属性。

<Window x:Class="FU1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None" Background="Transparent" 
        Title="MainWindow" Height="350" Width="525">
    <Grid >
        <TextBlock Text="测试测试" FontSize="50" />
    </Grid>
</Window>

运行程序,就发现效果完全不是那么回事,窗体就是一整块黑的。然后呢就想可能和WinForm也一样,不能直接设置背景,得用TransparencyKey,找了一下,发现WPF没这个属性。然后就再一个个的看一遍WPF窗口的属性,结果就被我发现了AllowsTransparency属性,获取或设置窗口是否支持透明。设置上看看效果,就发现那效果就这么简单的实现完了,鼠标的问题也解决了。

然后呢就给加上Timer,让他来做一个闹钟的提示,就完成了一个可视性强的闹钟,用自己的能力改变了自己的生活,嘚瑟嘚瑟。。

最后呢,就得加上开机自启动的问题,总不能每次都得我来给运行起来。想一下这个就应该是设置一下注册表,但是就是不知道是哪个,百度一下得到结果“CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”。接着就直接写的试试,再看效果。

private void Form2_Load(object sender, EventArgs e)
{
    string path = Application.ExecutablePath;
    SetAutoRun("TestAutoRun", path);
    CanPenetrate();
    this.TopMost=true;
}
private void SetAutoRun(string keyName, string filePath)
{
    try
    {
        RegistryKey runKey = Registry.LocalMachine.OpenSubKey(@"\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
        runKey.SetValue(keyName, filePath);
        runKey.Close();
    }
    catch {}
}

到此就全部实现完了,可能呢会有童鞋找什么资料呢会查到,不过呢,这只是我对自己学习的笔记,追求技术性的童鞋们就小小失望一下。

大笑得意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值