共用方式為


ITaskbarList3::SetProgressValue 方法 (shobjidl_core.h)

顯示或更新任務列按鈕中裝載的進度列,以顯示完整作業完成的特定百分比。

語法

HRESULT SetProgressValue(
  [in] HWND      hwnd,
  [in] ULONGLONG ullCompleted,
  [in] ULONGLONG ullTotal
);

參數

[in] hwnd

類型: HWND

視窗的句柄,其相關聯的任務欄按鈕正做為進度指標。

[in] ullCompleted

類型: ULONGLONG

應用程式定義的值,指出呼叫 方法時已完成的作業比例。

[in] ullTotal

類型: ULONGLONG

應用程式定義的值,指定作業完成時 ullCompleted 的值。

傳回值

類型: HRESULT

如果此方法成功,則會傳回 S_OK。 否則,它會傳回 HRESULT 錯誤碼。

備註

判斷進度列生命週期

應用程式會先呼叫 SetProgressValue ,開始顯示確定的進度列,然後視需要再次呼叫它,以在進度變更時更新列。 當進度完成時,應用程式必須使用 TBPF_NOPROGRESS 旗標呼叫 SetProgressState ,才能關閉進度列。

任務欄按鈕如何選擇群組的進度指標

任務列按鈕一次只能顯示一個視窗的進度指示器。 當任務欄按鈕代表群組,且該群組中的一個以上的視窗正在廣播進度資訊時,任務欄按鈕會根據下列狀態優先順序選擇其進度顯示。
優先順序 State
1 TBPF_ERROR
2 TBPF_PAUSED
3 TBPF_NORMAL
4 TBPF_INDETERMINATE
 

除非 SetProgressState 已設定視窗的封鎖狀態 (TBPF_ERROR 或TBPF_PAUSED) ,否則 對 SetProgressValue 的呼叫會假設TBPF_NORMAL狀態,即使未明確設定也一樣。 呼叫 SetProgressValue 會覆寫並清除TBPF_INDETERMINATE狀態。

如果是兩個視窗廣播確定進度的優先順序衝突,則會使用具有最少進度的視窗。

根據該優先順序,這可決定 (特定百分比) 進度指標,在這些情況下會顯示:

  • 任務欄按鈕不代表群組,而它所代表的單一視窗是透過此方法廣播確定進度資訊。
  • 任務欄按鈕代表群組,該群組中只有一個視窗正在廣播進度資訊,而該視窗會透過此方法廣播確定進度資訊。
  • 任務欄按鈕代表群組、該群組中的多個視窗正在廣播進度資訊、至少其中一個視窗是透過此方法廣播進度資訊,而且這些視窗都沒有設定 TBPF_ERRORTBPF_PAUSED 狀態。

如果群組中的視窗已設定 TBPF_ERRORTBPF_PAUSED,該狀態將會用於按鈕顯示。 不過,您仍然可以在其他群組中解除封鎖的視窗上呼叫 SetProgressValue ,以在背景更新其進度。

範例

以下是應用程式在執行作業時如何使用 ITaskbarList3 來顯示進度的範例。

HRESULT CMyApp::ShowProgressInTaskbar(HWND hwnd, __in ITaskbarList3 *pTL)
{
    // Set the progress state of the button to indeterminate while you calculate
    // the number of operations to be performed.
    HRESULT hr = pTL->SetProgressState(hwnd, TBPF_INDETERMINATE);

    // Calculate the number of operations to perform.
    int cTotalOperations = _CalculateNumberOfOperationsToPerform();

    for (int i=0; i < cTotalOperations && SUCCEEDED(hr); i++)
    {
        // Update the progress. This call to SetProgressValue cancels the
        // indeterminate state and puts the button into normal progress mode.
        pTL->SetProgressValue(hwnd, i, cTotalOperations);
       
        // Do whatever operation your application needs to perform.
        hr = _PerformOperation(i);
    }

    // Tell the button that progress no longer needs to be displayed.
    pTL->SetProgressState(hwnd, TBPF_NOPROGRESS);
    
    return hr;
}

規格需求

需求
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
目標平台 Windows
標頭 shobjidl_core.h (包含 Shobjidl.h)
程式庫 Explorerframe.lib
Dll Explorerframe.dll

另請參閱

ITaskbarList

ITaskbarList2

ITaskbarList3

ITaskbarList3::SetProgressState

任務列延伸模組