0
点赞
收藏
分享

微信扫一扫

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

千行 2022-10-31 阅读 159


目录

  • ​​目录​​
  • ​​先看一下效果图​​
  • ​实现要关注以下几点​
  • ​​WindowsAPI——如何获取桌面图标个数​​
  • ​​WindowsAPI——如何获取桌面分辨率*​​
  • ​​WindowsAPI——如何设置每个图标的位置​​
  • ​​WindowsAPI——如何更新所有图标的信息​​
  • ​​Qt——定时器如何使用​​
  • ​​Qt——容器如何使用​​
  • ​​算法——如何控制图标跑起来​​
  • ​​仍然存在的问题​​


先看一下效果图

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

实现要关注以下几点

  • 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),系统并不会移动图标到这个位置,而是移动图标到最近的网格布局的位置中。

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


举报

相关推荐

0 条评论