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 :
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.
Définissez une variable égale à 1 000 divisée par le nombre d’éléments.
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.
Pour chaque objet à traiter, effectuez les étapes suivantes :
- 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.
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 .
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 :
Appelez la méthode IMAPIProgress ::GetMin de l’objet progress pour récupérer la valeur minimale de l’affichage.
Appelez IMAPIProgress ::GetMax pour récupérer la valeur maximale de l’affichage.
Définissez une variable égale au nombre total d’objets à traiter.
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.
Pour chaque objet à traiter, effectuez les étapes suivantes :
- 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.
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 .
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)
}
}