Freigeben über


Anzeigen einer Statusanzeige

Gilt für: Outlook 2013 | Outlook 2016

Um eine Statusanzeige anzuzeigen, rufen Sie IMAPIProgress::GetFlags auf, um die aktuelle Flageinstellung abzurufen.

Wenn das MAPI_TOP_LEVEL-Flag festgelegt ist, führen Sie die folgenden Schritte aus:

  1. Legen Sie eine Variable fest, die der Gesamtanzahl von Elementen entspricht, die im Vorgang verarbeitet werden sollen. Wenn Sie beispielsweise den Inhalt eines Ordners kopieren, entspricht dieser Wert der Anzahl der Unterordner im Ordner plus der Anzahl der Nachrichten.

  2. Legen Sie eine Variable auf 1000 dividiert durch die Anzahl der Elemente fest.

  3. Wenn Sie den Fortschritt für Unterobjekte anzeigen, rufen Sie die IMAPIProgress::SetLimits-Methode des Progress-Objekts auf, und übergeben Sie die folgenden Werte für die drei Parameter:

    • Legen Sie den lpulMin-Parameter auf 0 fest.

    • Legen Sie den lpulMax-Parameter auf 1000 fest.

    • Legen Sie den lpulFlags-Parameter auf MAPI_TOP_LEVEL fest.

  4. Führen Sie für jedes zu verarbeitende Objekt die folgenden Schritte aus:

    1. Rufen Sie IMAPIProgress::SetLimits auf, und übergeben Sie die folgenden Werte für die drei Parameter:
    • Legen Sie den lpulMin-Parameter auf die Variable fest, die in Schritt 2 multipliziert mit dem aktuellen Element minus 1 festgelegt wurde.

    • Legen Sie den Parameter lpulMax auf die Variable fest, die in Schritt 2 multipliziert mit dem aktuellen Objekt festgelegt wurde.

    • Legen Sie den lpulFlags-Parameter auf 0 fest.

    1. Führen Sie die verarbeitung aus, die für dieses Objekt ausgeführt werden soll. Wenn dies ein Unterobjekt ist und Sie den Fortschritt für Unterobjekte anzeigen möchten, übergeben Sie einen Zeiger auf das progress-Objekt im lpProgress-Parameter an die -Methode.

    2. Rufen Sie IMAPIProgress::P rogress auf, und übergeben Sie die folgenden Werte für die drei Parameter:

    • Legen Sie den ulValue-Parameter auf die Variable fest, die in Schritt 2 multipliziert mit dem aktuellen Objekt festgelegt wurde.

    • Legen Sie den ulCount-Parameter auf das aktuelle Objekt fest.

    • Legen Sie den ulTotal-Parameter auf die Variable fest, die in Schritt 1 festgelegt wurde, die Gesamtanzahl der Objekte.

Wenn das MAPI_TOP_LEVEL-Flag nicht festgelegt ist, führen Sie die folgenden Schritte aus:

  1. Rufen Sie die IMAPIProgress::GetMin-Methode des progress-Objekts auf, um den Mindestwert für die Anzeige abzurufen.

  2. Rufen Sie IMAPIProgress::GetMax auf, um den Maximalwert für die Anzeige abzurufen.

  3. Legen Sie eine Variable fest, die der Gesamtzahl der zu verarbeitenden Objekte entspricht.

  4. Legen Sie eine Variable fest, die dem Ergebnis des Subtrahierens des Minimalwerts vom Höchstwert entspricht, und dividieren Sie dann durch die Gesamtzahl der Objekte.

  5. Führen Sie für jedes zu verarbeitende Objekt die folgenden Schritte aus:

    1. Wenn Ihr Anbieter den Fortschritt für Unterobjekte anzeigt, rufen Sie IMAPIProgress::SetLimits auf, und übergeben Sie die folgenden Werte für die drei Parameter:
    • Legen Sie den lpulMin-Parameter auf den Minimalwert plus das aktuelle Element minus 1 multipliziert mit der in Schritt 4 festgelegten Variablen fest.

    • Legen Sie den lpulMax-Parameter auf den Minimalwert plus die aktuelle Einheit multipliziert mit der Variablen fest, die in Schritt 4 festgelegt wurde.

    • Legen Sie den lpulFlags-Parameter auf 0 fest.

    1. Führen Sie die verarbeitung aus, die für dieses Objekt ausgeführt werden soll. Wenn das Objekt ein Unterobjekt ist und Ihr Anbieter den Fortschritt für Unterobjekte anzeigt, übergeben Sie einen Zeiger auf das progress-Objekt im lpProgress-Parameter an die -Methode.

    2. Rufen Sie IMAPIProgress::P rogress auf, und übergeben Sie die folgenden Werte für die drei Parameter:

    • Legen Sie den ulValue-Parameter auf eine Variable fest, die in Schritt 2 multipliziert mit dem aktuellen Objekt festgelegt wurde.

    • Legen Sie den ulCount-Parameter auf 0 fest.

    • Legen Sie den ulTotal-Parameter auf 0 fest.

Das folgende Codebeispiel veranschaulicht die Logik, die erforderlich ist, um den Fortschritt auf allen Ebenen eines Vorgangs anzuzeigen, der den Inhalt eines Ordners kopiert, der fünf Unterordner enthält.

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)
    }
}
 

Siehe auch