Partager via


Affichage d’un indicateur de progression

S’applique à : Outlook 2013 | Outlook 2016

Pour afficher un indicateur de progression, appelez IMAPIProgress ::GetFlags pour récupérer le paramètre d’indicateurs actuel.

Si l’indicateur MAPI_TOP_LEVEL est défini, procédez comme suit :

  1. Définissez une variable égale au nombre total d’éléments à traiter dans l’opération. Par exemple, si vous copiez le contenu d’un dossier, cette valeur est égale au nombre de sous-dossiers dans le dossier plus le nombre de messages.

  2. Définissez une variable égale à 1 000 divisée par le nombre d’éléments.

  3. Si vous affichez la progression des sous-objets, appelez la méthode IMAPIProgress ::SetLimits de l’objet progress et transmettez les valeurs suivantes pour les trois paramètres :

    • Définissez le paramètre lpulMin sur 0.

    • Définissez le paramètre lpulMax sur 1000.

    • Définissez le paramètre lpulFlags sur MAPI_TOP_LEVEL.

  4. Pour chaque objet à traiter, effectuez les étapes suivantes :

    1. Appelez IMAPIProgress ::SetLimits et passez les valeurs suivantes pour les trois paramètres :
    • Définissez le paramètre lpulMin sur la variable définie à l’étape 2 multipliée par l’élément actuel moins 1.

    • Définissez le paramètre lpulMax sur la variable définie à l’étape 2 multipliée par l’objet actuel.

    • Définissez le paramètre lpulFlags sur 0.

    1. Effectuez le traitement qui doit être effectué sur cet objet. S’il s’agit d’un sous-objet et que vous souhaitez afficher la progression sur les sous-objets, passez un pointeur vers l’objet progress dans le paramètre lpProgress à la méthode .

    2. Appelez IMAPIProgress ::P rogress et passez les valeurs suivantes pour les trois paramètres :

    • Définissez le paramètre ulValue sur la variable définie à l’étape 2 multipliée par l’objet actuel.

    • Définissez le paramètre ulCount sur l’objet actuel.

    • Définissez le paramètre ulTotal sur la variable définie à l’étape 1, le nombre total d’objets.

Si l’indicateur MAPI_TOP_LEVEL n’est pas défini, procédez comme suit :

  1. Appelez la méthode IMAPIProgress ::GetMin de l’objet progress pour récupérer la valeur minimale de l’affichage.

  2. Appelez IMAPIProgress ::GetMax pour récupérer la valeur maximale de l’affichage.

  3. Définissez une variable égale au nombre total d’objets à traiter.

  4. Définissez une variable égale au résultat de la soustraction de la valeur minimale de la valeur maximale, puis de la division par le nombre total d’objets.

  5. Pour chaque objet à traiter, effectuez les étapes suivantes :

    1. Si votre fournisseur affiche la progression des sous-objets, appelez IMAPIProgress ::SetLimits et transmettez les valeurs suivantes pour les trois paramètres :
    • Définissez le paramètre lpulMin sur la valeur minimale plus l’élément actuel moins 1 multiplié par la variable définie à l’étape 4.

    • Définissez le paramètre lpulMax sur la valeur minimale plus l’unité actuelle multipliée par la variable définie à l’étape 4.

    • Définissez le paramètre lpulFlags sur 0.

    1. Effectuez le traitement qui doit être effectué sur cet objet. Si l’objet est un sous-objet et que votre fournisseur affiche la progression des sous-objets, passez un pointeur vers l’objet progress dans le paramètre lpProgress à la méthode .

    2. Appelez IMAPIProgress ::P rogress et passez les valeurs suivantes pour les trois paramètres :

    • Définissez le paramètre ulValue sur la variable définie à l’étape 2 multipliée par l’objet actuel.

    • Définissez le paramètre ulCount sur 0.

    • Définissez le paramètre ulTotal sur 0.

L’exemple de code suivant illustre la logique requise pour afficher la progression à tous les niveaux d’une opération qui copie le contenu d’un dossier qui contient cinq sous-dossiers.

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

Voir aussi