Compartir a través de


Mostrar un indicador de progreso

Hace referencia a: Outlook 2013 | Outlook 2016

Para mostrar un indicador de progreso, llame a IMAPIProgress::GetFlags para recuperar la configuración de marcas actual.

Si se establece la marca de MAPI_TOP_LEVEL, complete los pasos siguientes:

  1. Establezca una variable igual al número total de elementos que se procesarán en la operación. Por ejemplo, si va a copiar el contenido de una carpeta, este valor será igual al número de subcarpetas de la carpeta más el número de mensajes.

  2. Establezca una variable igual a 1000 dividida por el número de elementos.

  3. Si muestra el progreso de los subobjetos, llame al método IMAPIProgress::SetLimits del objeto de progreso y pase los siguientes valores para los tres parámetros:

    • Establezca el parámetro lpulMin en 0.

    • Establezca el parámetro lpulMax en 1000.

    • Establezca el parámetro lpulFlags en MAPI_TOP_LEVEL.

  4. Para cada objeto que se va a procesar, complete los pasos siguientes:

    1. Llame a IMAPIProgress::SetLimits y pase los siguientes valores para los tres parámetros:
    • Establezca el parámetro lpulMin en la variable establecida en el paso 2 multiplicada por el elemento actual menos 1.

    • Establezca el parámetro lpulMax en la variable establecida en el paso 2 multiplicada por el objeto actual.

    • Establezca el parámetro lpulFlags en 0.

    1. Realice el procesamiento que se debe realizar en este objeto. Si se trata de un subobjeto y desea mostrar el progreso en los subobjetos, pase un puntero al objeto progress del parámetro lpProgress al método .

    2. Llame a IMAPIProgress::P rogress y pase los siguientes valores para los tres parámetros:

    • Establezca el parámetro ulValue en la variable establecida en el paso 2 multiplicada por el objeto actual.

    • Establezca el parámetro ulCount en el objeto actual.

    • Establezca el parámetro ulTotal en la variable establecida en el paso 1, el número total de objetos.

Si no se establece la marca de MAPI_TOP_LEVEL, siga estos pasos:

  1. Llame al método IMAPIProgress::GetMin del objeto de progreso para recuperar el valor mínimo para la presentación.

  2. Llame a IMAPIProgress::GetMax para recuperar el valor máximo para la presentación.

  3. Establezca una variable igual al número total de objetos que se van a procesar.

  4. Establezca una variable igual al resultado de restar el valor mínimo del valor máximo y, a continuación, dividir por el número total de objetos.

  5. Para cada objeto que se va a procesar, complete los pasos siguientes:

    1. Si el proveedor muestra el progreso de los subobjetos, llame a IMAPIProgress::SetLimits y pase los siguientes valores para los tres parámetros:
    • Establezca el parámetro lpulMin en el valor mínimo más el elemento actual menos 1 multiplicado por la variable establecida en el paso 4.

    • Establezca el parámetro lpulMax en el valor mínimo más la unidad actual multiplicada por la variable establecida en el paso 4.

    • Establezca el parámetro lpulFlags en 0.

    1. Realice el procesamiento que se debe realizar en este objeto. Si el objeto es un subobjeto y el proveedor muestra el progreso de los subobjetos, pase un puntero al objeto de progreso en el parámetro lpProgress al método .

    2. Llame a IMAPIProgress::P rogress y pase los siguientes valores para los tres parámetros:

    • Establezca el parámetro ulValue en la variable establecida en el paso 2 multiplicada por el objeto actual.

    • Establezca el parámetro ulCount en 0.

    • Establezca el parámetro ulTotal en 0.

En el ejemplo de código siguiente se muestra la lógica necesaria para mostrar el progreso en todos los niveles de una operación que copia el contenido de una carpeta que contiene cinco subcarpetas.

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

Vea también