共用方式為


顯示進度指示器

適用於:Outlook 2013 |Outlook 2016

若要顯示進度指示器,請呼叫 IMAPIProgress::GetFlags 來擷取目前的旗標設定。

如果已設定MAPI_TOP_LEVEL旗標,請完成下列步驟:

  1. 將變數設定為等於作業中要處理的項目總數。 例如,如果您要複製資料夾的內容,這個值會等於資料夾中的子資料夾數目加上訊息數目。

  2. 將變數設定為1000除以項目數。

  3. 如果您要顯示子對象的進度,請呼叫進度物件的 IMAPIProgress::SetLimits 方法,並傳遞下列三個參數的值:

    • lpulMin 參數設定為 0。

    • lpulMax 參數設定為 1000。

    • lpulFlags 參數設定為 MAPI_TOP_LEVEL。

  4. 針對要處理的每個物件,請完成下列步驟:

    1. 呼叫 IMAPIProgress::SetLimits ,並傳遞下列三個參數的值:
    • lpulMin 參數設定為步驟 2 中設定的變數,乘以目前專案減 1。

    • lpulMax 參數設定為步驟 2 中設定的變數,乘以目前的物件。

    • lpulFlags 參數設定為 0。

    1. 在此對象上執行任何應該進行的處理。 如果這是子物件,而且您想要在子對象上顯示進度,請將 lpProgress 參數中的 progress 物件指標傳遞至 方法。

    2. 呼叫 IMAPIProgress::P rogress ,並傳遞下列三個參數的值:

    • ulValue 參數設定為步驟 2 中設定的變數乘以目前的 物件。

    • ulCount 參數設定為目前的 物件。

    • ulTotal 參數設定為步驟1中設定的變數,即對象的總數。

如果未設定MAPI_TOP_LEVEL旗標,請完成下列步驟:

  1. 呼叫進度物件的 IMAPIProgress::GetMin 方法,以擷取顯示器的最小值。

  2. 呼叫 IMAPIProgress::GetMax 以擷取顯示器的最大值。

  3. 將變數設定為等於要處理的物件總數。

  4. 將變數設定為等於減去最大值的最小值,然後除以對象總數的結果。

  5. 針對要處理的每個物件,請完成下列步驟:

    1. 如果您的提供者顯示子對象的進度,請呼叫 IMAPIProgress::SetLimits ,並傳遞下列三個參數的值:
    • lpulMin 參數設定為最小值,加上目前項目減 1 乘以步驟 4 中設定的變數。

    • lpulMax 參數設定為最小值,加上目前單位乘以步驟 4 中設定的變數。

    • lpulFlags 參數設定為 0。

    1. 在此對象上執行任何應該進行的處理。 如果對像是子物件,而且您的提供者顯示子對象的進度,請將 lpProgress 參數中進度物件的指標傳遞至 方法。

    2. 呼叫 IMAPIProgress::P rogress ,並傳遞下列三個參數的值:

    • ulValue 參數設定為步驟 2 中設定的變數,乘以目前的物件。

    • ulCount 參數設定為 0。

    • ulTotal 參數設定為 0。

下列程式代碼範例說明在複製包含五個子資料夾的資料夾內容之作業的所有層級上顯示進度所需的邏輯。

lpProgress->GetFlags (lpulFlags);
ulFlags = *lpulFlags;
/* The folder in charge of the display. It contains 5 subfolders. */
if (ulFlags & MAPI_TOP_LEVEL)
{
    ulItems = 5                         // 5 subfolders in this folder
    ulScale = (ulMax / ulItems)         // 200 because ulMax = 1000
    lpProgress->SetLimits(0, ulMax, MAPI_TOP_LEVEL)
    for (i = 1; i <= ulItems; i++)      // for each subfolder to copy
    {
        lpProgress->SetLimits( (i - 1) * ulScale, i * ulScale, 0)
        CopyOneFolder(lpFolder(i), lpProgress)
        lpProgress->Progress( i * ulScale, i, ulItems)
    }
}
else
/* One of the subfolders to be copied. It contains 3 messages. */
{
    lpProgress->GetMin(&ulMin);
    lpProgress->GetMax(&ulMax);
    ulItems = 3;
    ulDelta = (ulMax - ulMin) / ulItems;
    for (i = 1; i <= ulItems; i++)
    {
        lpProgress->SetLimits(ulMin + (i - 1) * ulDelta,
                              ulMin + i * ulDelta, 0)
        CopyOneFolder(lpFolder(i), lpProgress)
        /* Pass 0 for ulCount and ulTotal because this is not the */
        /* top-level display, and that information is unavailable */
        lpProgress->Progress( i * ulDelta, 0, 0)
    }
}
 

另請參閱