总的思路很简单,就是获取鼠标的位置,然后再鼠标周围随机进行动画。实现主要分为这几个函数。
InitProperty(); //初始化动画配置,放到多大,透明度多少,持续时间
InitGraph(); //初始化需要放大的样式,只要继承FrameworkElement类就可以了
MaxmizeAndTransparenceWindow(); //窗口设置,设置全屏,还有一个坑(放大比)
StartMarvellousMouse(); //核心代码,随机生成小球
这里动画主要是样式放大的一些设置:长宽,透明度。是WPF比较基础的类FrameworkElement的属性。
private void InitProperty()
{
MyStoryBoard = new Storyboard();
//MyStoryBoard.RepeatBehavior = RepeatBehavior.Forever;
DAWidth = new DoubleAnimation();
DAWidth.From = 0;
DAWidth.To = 2 * Radius;
DAWidth.Duration = new Duration(TimeSpan.FromMilliseconds(DurationTime));
DAHeight = new DoubleAnimation();
DAHeight.From = 0;
DAHeight.To = 2 * Radius;
DAHeight.Duration = new Duration(TimeSpan.FromMilliseconds(DurationTime));
DAOpacity = new DoubleAnimation();
DAOpacity.From = 0;
DAOpacity.To = 0.7;
DAOpacity.Duration = new Duration(TimeSpan.FromMilliseconds(DurationTime));
MyStoryBoard.Children.Add(DAWidth);
MyStoryBoard.Children.Add(DAHeight);
MyStoryBoard.Children.Add(DAOpacity);
}
这里一开始是使用WPF的自定义控件比如ellipse,等。后来给妹汁做格桑花的时候,突然想到:图片不就是天然的FrameworkElement嘛,所以理论上啥样式都已放进图片并显示。顺带说一句,图片资源获取网上搜一下,然后在Google活bing的识图里面找类似的。
很难找到背景透明的图(比如带白底),可以用ps工具,或者网上的去底色工具或网址(我直接百度搜了个网址就可以用)。反正图片放大的也不大,略微丢失一点边边角角无伤大雅。
private void InitGraph()
{
var elements =ElementProvider.GetElements<MyImage>();
if (elements != null)
{
foreach (var item in elements)
{
this.canvas.Children.Add(item);
}
}
NumofGrap = this.canvas.Children.Count;
}
这里的一个坑就是,不是所有的屏幕都是100%放大,在一些笔记本上可能分辨率调的超级高,然偶后放大到200%,所以鼠标位置会有问题。这里计算了下放大比,然后鼠标的XY乘以系数。
private void MaxmizeAndTransparenceWindow()
{
this.Width = SystemParameters.PrimaryScreenWidth;
this.Height = SystemParameters.PrimaryScreenHeight;
var hdc = GetDC(GetDesktopWindow());
int ResolutionHeight = GetDeviceCaps(hdc, 10); //高
int ResolutionWidth = GetDeviceCaps(hdc, 8); //宽
ScaleX = (double)(ResolutionWidth / Width);
ScaleY = (double)(ResolutionHeight / Height);
this.Top = 0;
this.Left = 0;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
this.Topmost = true;
}
就是不停地获取鼠标位置,然后随机再鼠标周围生成图案。这里因为是死循环疯狂更新,所以内存会爆炸。所以设置线程需要休息一会会再发送(及时1ms也足够了)。
private void StartMarvellousMouse()
{
POINT lpPoint;
var widthProperty = new PropertyPath("Width");
var heightProperty = new PropertyPath("Height");
var opacityProperty = new PropertyPath("Opacity");
new Thread(() =>
{
while (true)
{
for (int i = 0; i < NumofGrap; i++)
{
GetCursorPos(out lpPoint);
Dispatcher.BeginInvoke(new Action(() =>
{
if (i == NumofGrap) return; //防止循环i=NumofGrap的时候,ui线程正好访问
var item = (FrameworkElement)this.canvas.Children[i];
Canvas.SetLeft(item, (lpPoint.X - Radius + RandomDistance) / ScaleX);
Canvas.SetTop(item, (lpPoint.Y - Radius + RandomDistance) / ScaleY);
//item.Fill = RandomColor;
Storyboard.SetTarget(DAWidth, item);
Storyboard.SetTargetProperty(DAWidth, widthProperty);
Storyboard.SetTarget(DAHeight, item);
Storyboard.SetTargetProperty(DAHeight, heightProperty);
Storyboard.SetTarget(DAOpacity, item);
Storyboard.SetTargetProperty(DAOpacity, opacityProperty);
MyStoryBoard.Begin();
}));
Thread.Sleep((int)DurationTime / NumofGrap);
}
}
}).Start();
}
我正在编写一个Gmail上下文小工具,为了在服务器上正确验证用户身份,我需要知道他们的完整电子邮件地址(john@googleapps.com)。我可以检索域(googleapps.com)但不能检索用户名。使用内容提取器,我可以获得电子邮件中的“收件人”字段,唯一的问题是如果同一域中有两个用户发送电子邮件(即john@googleapps.com和james@googleapps.com)。有什么想法吗? 最佳答案 您需要在上下文小工具中实现SSO(单点登录)。当加载上下文小工具时,它会传递用户的opensocialid。您必须在
我正在开发一个需要从Excel文档中提取数据的Windows7小工具。问题是,在我检索到我需要的数据后,Excel进程不会卸载。这是我在初始化函数中使用的代码:varExcel=newActiveXObject("Excel.Application");Excel.Visible=false;Excel.DisplayAlerts=false;varworkbooks=Excel.Workbooks;varworkbook=workbooks.Open("\\\\SERVER\\Documents\\Sample.xlsx",0,true);varactivesheet=workboo
我正在编写一个谷歌小工具(除了普通的html+javascript),使用网站api将文件上传到私有(private)谷歌网站。http://code.google.com/apis/sites/docs/1.0/developers_guide_protocol.html#UploadingFiles我只能使用多部分表单上传文件。但它不起作用,因为api需要oauth身份验证。身份验证涉及在POST请求中设置一些header字段。不幸的是,表单提交不允许我们设置标题,因此没有身份验证。由于跨域限制,我无法进行ajax调用。关于可以做什么的任何想法?我能想到的一种方法是使用进行身份验证
我正在创建一个Vista小工具,但我无法让JQuery工作。我已经尝试了一些非常简单的调用,如下所示:$(function(){$('a').click(function(){$('#box').html("test");});});我知道您可以使用JavaScript,所以我不明白为什么您不能使用库。谁知道有没有例子? 最佳答案 Here是用jquery完成的vista小部件。可能对你有帮助。以上链接已失效-这是另一个https://code.google.com/archive/p/timetablegadget/source/
我想为gmail开发一个内部上下文小工具。问题是谷歌改变了这样做的方式。它始于2013年11月,并于2014年10月完全弃用了旧方法。所以:我应该关注哪个网页?我应该使用哪种Google服务?in-housecontextualgadget是否仍然存在,或者它可能已被弃用?例子:code.google.com/googleapps/console中的GoogleAppsEngine(GAE)不允许我部署应用程序因为它需要OAuth2.0。我应该使用developersconsole(在console.developers.google.com中)吗?有一个网页https://devel
我正在尝试创建一个非常基本的Windows桌面小工具来显示我的StackOverflowFlair。我在html或web开发方面没有太多经验。我已尝试按照说明进行操作here,但是当我安装小工具时它很小:是的,就是那个白色的小方block。我试过设置背景图片,但它似乎也不起作用(我实际上并不需要背景图片,我只是想让它起作用)。如果我单独运行html源文件,那么它会在浏览器中正确显示:这是来自html源文件(名为MySOFlair.html)的代码:这是来自list文件(Gadget.xml)的代码:MySOFlair1.0.0.0MtStackOverflowFlairGadget--
假设您有一些来自unix世界的源代码。这个源代码由一些文件组成,这些文件将创建一个库和许多编译成命令行工具的小.c文件(比如20个左右),每个文件都有自己的main()函数,这将使用该库。在unixy系统上,您可以使用makefile轻松地完成此操作,但对windows/VisualStudio世界最天真的转换涉及为每个工具创建一个单独的项目,尽管它可以工作,但需要大量的设置和工作在文件系统和项目/解决方案级别同步并且更难以导航。我考虑过使用不同的配置,其中除了一个.c文件之外的所有文件都被排除在构建之外,但这会使一次构建所有工具变得不可能。是否有一种从单个“事物”(项目、msbuil
我想将网页转换为Windows小工具。基本上,网页只有2或3张图片和倒计时。我尝试这样做,但不幸的是,小工具的大小缩小到大约2像素宽乘8像素高。我尝试了AmnestyGenerator,但我希望该小工具也能离线工作。附言我将html页面制作成液体,这样小工具就不会出现任何问题。问候,网友 最佳答案 请务必在您的CSS中设置元素的高度和宽度。body{height:150px;width:300px;} 关于html-将HTML网页转换为Windows小工具,我们在StackOverflo
我正在尝试使用WPF创建类似“小工具”的应用程序。目标是获得与普通Windows7小工具相同的行为:没有任务栏条目当您alt+tab窗口时不显示并不总是在最前面,应用程序可以在最前面执行“AeroPeek”时可见使用“显示桌面”/Windows+D时可见我已经能够完成前四个目标,但无法找到第五个问题的解决方案。我最接近的是使用HowdoyoudoAppBardocking(toscreenedge,likeWinAmp)inWPF?中的实用程序类,但这会将应用程序变成一个“工具栏”,从而将应用程序从屏幕上放置我的小工具GUI的部分中移除。我可以看到以前在Stackoverflow上提出
文章目录全流程实现博客链接前引(十八)----对服务器做最后的压力测试WebBench压测小工具项目迎来终章1、正确处理Vmware-Station处理器设置(初步调试过程)2、正确处理Vmware-Station处理器设置(设置结果)3、c10k压力测试对比Linya学长的WebServer(短连接)3、c10k压力测试对比Linya学长的WebServer(长连接存疑?!)4、c10k压力测试对比muduo库的Webserver(短连接)结束语全流程实现博客链接从零开始自制实现C++High-PerformanceWebServer全流程记录(基于muduo网络库)前引没想到这个系列写到第