zoukankan      html  css  js  c++  java
  • 制作桌面精灵(动态桌面)——鼠标跟随的粒子效果

    这里使用了nowpaper的一个例子:

    我新建了一个WPF 3.5项目,将里面的代码添加了几个方法,就可以在桌面上使用这个效果。
    主要原理是用了一个鼠标的钩子的引用确定鼠标所在的指针位置。
    我修改了里面的一个类:Colorful_FollowMouse
    具体代码如下
    public class Colorful_FollowMouse : Colorful
    {

    public Colorful_FollowMouse()
    {
    MouseKeyboardLibrary.MouseHook mouseHook = new MouseKeyboardLibrary.MouseHook();
    mouseHook.MouseMove += new forms.MouseEventHandler(mouseHook_MouseMove);
    mouseHook.Start();
    }

    void mouseHook_MouseMove (object sender,forms.MouseEventArgs e)
    {
    addDotToGroup(e.X, e.Y);
    }
    }
    里边的MouseKeyboardLibrary类是一个鼠标的钩子(点此下载),然后设置一下MainWindow的最大化和AllowTransparent的属性。然后设置所有背景颜色为透明。另外还有一个鼠标穿透窗口的类:
    //鼠标穿透相关
    public static class MousePierce
    {
    const int WS_EX_TRANSPARENT = 0x00000020;
    const int GWL_EXSTYLE = -20;
    [DllImport("user32.dll")]
    static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);
    [DllImport("user32.dll")]
    static extern int GetWindowLong(IntPtr hwnd, int index);

    public static void setMousePierce(Window win)
    {
    var hwnd = new WindowInteropHelper(win).Handle;
    int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
    SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
    }
    }
    在MainWindow的Loaded事件里面使用这个类的setMousePierce()方法。可以使鼠标穿透窗口。不过问题还是CPU占用比较高,不知道有没有什么好的解决方法。希望有高手可以提供一下。
  • 相关阅读:
    7.12函数(四)
    7.11函数(三)
    7.10函数(二)
    7.9函数(一)
    7.8文件处理补充及函数简介
    7.5字符编码及文件处理
    7.4数据类型及内置方法(二)
    Android-------- AlertDialog中EditText无法弹出输入法的解决
    Android-----输入法的显示和隐藏
    Android——ExpandableListView事件拦截
  • 原文地址:https://www.cnblogs.com/plusky/p/2400618.html
Copyright © 2011-2022 走看看