zoukankan      html  css  js  c++  java
  • 播放器

    最近用C#照千千静听写了一个音乐播放器,使用Windows MediaPlayer插件。虽说写的简陋但还是费了几天功夫。鄙人小菜,高手勿笑。界面如下:

     

    跟人家原有的功能打了很大的折扣。如:歌词播放效果、拖动歌词来控制播放进度、子窗体间粘连等。

    总的说,没什么技术性的活,但算是初学WinForm练练手而已。其中也学到一些知识点,但比较不成用,若不记下来,估计过不两天就忘了。

    1、 this.WindowState =FormWindowState.Minimized;只能将窗体最小化到任务栏,而非隐藏,且利用this.WindowState = FormWindowState.Normal;将其还原时,在构造函数中创建的子窗体失踪了,但在任务栏可见,灰常奇怪。所以利用NotifyIcon最小化窗体是最好调用所有窗体的Hide函数。

    2、 我的电脑->属性->高级->性能设置->视觉效果,若勾选“拖拉时显示窗口内容”,则在拖动窗体时,每移动一定的px值(大约是5)触发一次窗体PositionChange的事件;若不勾选,则拖动窗体时不触发,当松开鼠标时才触发。

    3、 不同版本的Windows Media Player中的Interop.WMPLib.dll不同,例如在装的10.0的系统上开发,换到11.0的系统可以运行,但一旦编译,则编译器会将11.0的Interop.WMPLib.dll拷贝到Debug下,使Windows Media Player的很多事件不能触发。

    程序还有改进的地方,如:自己用两个Lable+Timer模仿的暴风影音进度条,可以做成自定义控件;用循环来移动所有子窗体时,要判断子窗体是否与主窗体粘连,要用统一的类型,我将是否粘连写在了Teg中,我想规范的做法应该是写一个继承自Form的类,加一个属性,然后使子窗体继承此类

    因为将标题栏隐藏了,所以就要另外想办法来使窗体可拖动。在网上找的代码,相当的偏底层:

    #region 实现拖动无边框代码
    
            [DllImport("user32.dll")]//*********************拖动无窗体的控件
    
           public static extern bool ReleaseCapture();
    
            [DllImport("user32.dll")]
    
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam,int lParam);
    
            public const int WM_SYSCOMMAND = 0x0112;
    
            public const int SC_MOVE = 0xF010;
    
            public const int HTCAPTION = 0x0002;
    
            private void headPanel_MouseDown(object sender, MouseEventArgs e)
    
            {
    
                ReleaseCapture();
    
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION,0);//*********************调用移动无窗体控件函数
    
     
    
            }
    
     
    
            #endregion
    
    

    你只需将headPanel改成自己的控件,然后将自己的控件的MouseDown事件注册到此函数即可,当然这个控件可以是窗体本身。


    源代码


    warn
    作者:心亦
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Nacos配置失败(java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all server)
    数据库事务
    Consider defining a bean of type 'redis.clients.jedis.JedisPool' in your configuration.
    Mybatis+SpringBoot 项目All elements are null
    docker安装Sentinel
    docker安装nacos
    Docker 配置 Seata 集成 Nacos
    mybatis转义反斜杠_MyBatis Plus like模糊查询特殊字符_、、%
    在linux上配置Maven环境变量
    spring cache 学习——整合 redis 实现声明式缓存配置
  • 原文地址:https://www.cnblogs.com/szhx/p/3219347.html
Copyright © 2011-2022 走看看