仿迅雷悬浮窗,解决拖放链接时的样式问题
这是困扰我好久的一个问题,这只是一个鼠标样式的小问题,园子里、baidu、google中没有找到解决这个问题的方法,在老赵的问题帖里提过可能太忙也没有回复。
好了,现在切入正题。我要做的是一个类似于迅雷的悬浮窗的那么一个小窗口,要求支持拖放连接、和文本,大家都知道只要将控件的AllowDrop属性设置为true很容易实现,但基本功能是实现了,外观上出现一点小问题就是在拖放链接时鼠标变成了禁止的样式,mm们对于外观比较在意,虽然她们没说一定要改掉,但是我总是想着这么一回事,什么都经不住惦记终于被我找到了罪魁祸首。
下面是实现中的一些要点:
一、外观
需要设置窗体的这些属性
FormBorderStyle = None
MaximumSize = 40
MinimumSize = 40
Size = 40,40
BackgroundImage = 图标背景(ps成窗体一样大小或者比窗体小)
BackgroundImageLayout = Center
Opacity = 40%
TopMost = true
设置好这些样子差不多了,但是还缺一个细细的边框,我用了下面的方法给窗体加边框不知道是不是还有更好更简单的办法。
{
base.OnPaint(e);
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Black);
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
g.DrawRectangle(pen, 0, 0, e.ClipRectangle.Width - 1, e.ClipRectangle.Height - 1);
pen.Dispose();
}
接下来就是困扰我很久的影响鼠标的样式的代码,一开始我用的是DragDropEffects.All,Vs2008的提示里是这样写的:“System.Windows.DragDropEffects.Copy、System.Windows.Forms.DragDropEffects.Link、System.Windows.Forms.DragDropEffects.Move 和 System.Windows.Forms.DragDropEffects.Scroll 效果的组合。”
但实际证明,下面的代码才是正确的。
{
if (e.Data.GetDataPresent(DataFormats.Text) || e.Data.GetDataPresent(DataFormats.SymbolicLink))
{
e.Effect = DragDropEffects.Copy | DragDropEffects.Link;
}
}
二、功能
都很简单只简单说一下。
需要设置窗体的属性
AllowDrop = true
由于没有标题栏,窗体移动需要自己实现,这点不多讲了,园子里好多这样文章了。
退出和一些其他功能可以用右键菜单或者任务栏小图标实现。
接受数据
{
string proUrl = e.Data.GetData(DataFormats.Text, true).ToString();
//其他处理
}
ps:这是我在园子里的第一篇原创随笔,大家多批评批评,多拍拍转