播放器

来源:互联网 发布:上海单身公寓 知乎 编辑:程序博客网 时间:2024/04/26 03:19

最近用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事件注册到此函数即可,当然这个控件可以是窗体本身。


源代码


原创粉丝点击