原创

Qt小娱乐,让桌面图标跑起来

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://shazhenyu.blog.csdn.net/article/details/80183498

目录

先看一下效果图

这里写图片描述

实现要关注以下几点

  • WindowsAPI——如何获取桌面图标个数
  • WindowsAPI——如何获取桌面分辨率
  • WindowsAPI——如何设置每个图标的位置
  • WindowsAPI——如何更新所有图标的信息
  • Qt——定时器如何使用
  • Qt——容器如何使用
  • 算法——如何控制图标跑起来

WindowsAPI——如何获取桌面图标个数

注意:这里要引用的文件有:

#include "Windows.h"
#include "CommCtrl.h" // ListView_GetItemCount
#pragma comment(lib, "User32.lib")

代码如下:

    HWND m_hDestTop;
    m_hDestTop = ::FindWindow(L"progman", NULL);
    m_hDestTop = ::FindWindowEx(m_hDestTop, 0, L"shelldll_defview", NULL);
    m_hDestTop = ::FindWindowEx(m_hDestTop, 0, L"syslistview32", NULL);
    int Nm=(int)::SendMessage( m_hDestTop, LVM_GETITEMCOUNT, 0, 0);
    return Nm;

WindowsAPI——如何获取桌面分辨率*

代码如下:

    int width = GetSystemMetrics ( SM_CXSCREEN );
    int height= GetSystemMetrics ( SM_CYSCREEN );

WindowsAPI——如何设置每个图标的位置

::SendMessage( m_hDestTop,   LVM_SETITEMPOSITION, index,   MAKELPARAM( x, y ));

WindowsAPI——如何更新所有图标的信息

    ListView_RedrawItems(m_hDestTop, 0, LVM_GETITEMCOUNT- 1);
    ::UpdateWindow(m_hDestTop);

Qt——定时器如何使用

先引用头文件

#include <QTimer>

如何使用定时器:

    QTimer *m_timer = Q_NULLPTR;
    m_timer = new QTimer(this);

    //在槽里面控制移动
    connect(m_timer, &QTimer::timeout, this, &MainWindow::onDoRunning);


    //控制定时器的开关,注意start里面是指定定时器的时间间隔
    if(m_timer->isActive()) { 
        m_timer->stop();
    } else {
        m_timer->start(100);
    }

Qt——容器如何使用

如何使用List容器:

    QList <QPoint> m_list;

    //用QList来装每个图标的点信息        
    m_list << QPoint(x, y);

    //打印容器内某个图标的点信息
    qDebug() << m_list.at(i);

    //删除最后一个图标点信息
    m_list.removeLast();

    //插入一个坐标到第一个点
    m_list.insert(0, QPoint(x, y));
C++——如何控制坐标到指定位置转弯

算法——如何控制图标跑起来

1、初始化各个图标位置
2、让各个图标按照我们想要的顺序排列
3、把各个图标位置装到QList容器中
4、调用WinAPI把图标移动到指定位置
5、每次跑动时,删除QList最后一项,然后在QList首项前插入我们算好的预跑坐标
6、按照QList中的数据更新所有图标位置。

仍然存在的问题

系统不会按照预期的图标位置移动图标。比如说:(10,10),系统并不会移动图标到这个位置,而是移动图标到最近的网格布局的位置中。

~~ 如有更好的办法,欢迎提出来,大家一起讨论 ~~


文章最后发布于: 2018-05-03 17:32:39
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览