1. 程式人生 > >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中的資料更新所有圖示位置。