Qt讓桌面圖示跑起來
阿新 • • 發佈:2018-12-09
效果如下:
實現要關注以下幾點
- 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中的資料更新所有圖示位置。