Share via


Trabajar con dispositivos portátiles

[La característica asociada a esta página, Reproductor multimedia de Windows SDK, es una característica heredada. Se ha reemplazado por MediaPlayer. MediaPlayer se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer en lugar de Reproductor multimedia de Windows SDK, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

En esta sección se describe cómo usar un control ActiveX Reproductor multimedia de Windows remoto para trabajar con dispositivos portátiles.

En los ejemplos de código de esta sección se usan clases de Biblioteca de plantillas activas (ATL), como CComPtr.

Encabezados incluidos

Para usar el código de esta sección, incluya los siguientes encabezados:

#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <commctrl.h>
#include "wmp.h"
#include "wmpids.h"

Puntero IWMPPlayer

El puntero IWMPPlayer se almacena en una variable miembro.

CComPtr<IWMPPlayer> m_spPlayer;

Los dispositivos se almacenan en una matriz

El código de ejemplo tiene acceso a la siguiente variable miembro, que se va a declarar en el encabezado del proyecto:

IWMPSyncDevice **m_ppWMPDevices; // Points to the custom device array.

El recuento de dispositivos se almacena en una variable miembro.

int m_cDevices; // Count of devices.

Recuperación de un puntero de dispositivo

Un puntero a un dispositivo determinado se recupera a través de su índice de matriz mediante código similar al siguiente:

CComPtr<IWMPSyncDevice> spSyncDevice(m_ppWMPDevices[lIndex]);

Tenga en cuenta que el índice que se muestra en los ejemplos anteriores no es el índice de asociación para el dispositivo. Es el índice para el dispositivo en la matriz personalizada de dispositivos.

Limpieza

En los ejemplos se usa la siguiente función para liberar la memoria de la matriz de dispositivos y liberar los punteros de interfaz:

void CMainDlg::FreeDeviceArray()
{
    if(m_ppWMPDevices)
    {
        for(long i = 0; i < m_cDevices; i++)
        {
            m_ppWMPDevices[i]->Release();
        }
 
        delete[] m_ppWMPDevices;
        m_ppWMPDevices = NULL;        
    }
}

Los dispositivos se muestran en un cuadro de lista

La función GetSelectedDeviceIndex devuelve el índice del dispositivo que el usuario seleccionó en un cuadro de lista mediante el código siguiente:

long CMainDlg::GetSelectedDeviceIndex()
{
    return (long)SendMessage(GetDlgItem(IDC_DEVICES), LB_GETCURSEL, 0, 0);
}

El estado de la interfaz de usuario se administra mediante una sola función

La función SetUIState administra la interfaz de usuario.

SetUIState(UIState 
NewState, BOOL 
bConnected)

Los detalles de esta función no son relevantes para las discusiones de esta sección, pero tenga en cuenta que esta función realiza tareas como habilitar o deshabilitar controles y cambiar el texto para mostrar en la interfaz de usuario.

La enumeración UIState se definió de la siguiente manera:

enum UIState
{
    Partnership,
    NoPartnership,
    Synchronizing
};

El parámetro bConnected especifica si se debe configurar la interfaz de usuario para un dispositivo conectado (TRUE significa que el dispositivo está conectado). Los parámetros NewState y bConnected transmiten la información necesaria para que la función realice su trabajo.

En las secciones siguientes se proporcionan explicaciones del código de ejemplo:

Guía de control del reproductor