Перечисление списков воспроизведения синхронизации
[Функция, связанная с этой страницей, Медиаплеер Windows SDK, является устаревшей функцией. Он был заменен MediaPlayer. MediaPlayer оптимизирован для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует по возможности использовать MediaPlayer вместо пакета SDK для Медиаплеер Windows. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
В следующем примере кода создается функция, которая заполняет элемент управления ListView списками воспроизведения. Сначала отображаются списки воспроизведения синхронизации. Списки воспроизведения синхронизации для выбранного устройства помечаются меткой проверка и сортируются в порядке приоритета синхронизации. Все остальные списки воспроизведения сняты.
Элемент управления ListView был настроен для одного выбора. Порядок списков воспроизведения в элементе управления ListView определяет приоритет их синхронизации. Проверенное состояние отдельного списка воспроизведения определяет, является ли он списком воспроизведения синхронизации для выбранного в данный момент устройства.
Параметр lPSIndex указывает индекс партнерства для выбранного в данный момент переносимого устройства.
STDMETHODIMP CSyncSettings::ShowPlaylists(long lPSIndex)
{
HRESULT hr = S_OK;
ATLASSERT(m_pMainDlg);
CComPtr<IWMPMediaCollection> spMediaCollection;
CComPtr<IWMPPlaylist> spPlaylist; // Contains a playlist of all playlists.
long lSyncItemCount= 0; // Count of items selected for synchronization.
ListView_DeleteAllItems(m_hPlView);
m_spPlaylist.Release();
if(lPSIndex == 0)
{
return S_OK;
}
HCURSOR hCursor = LoadCursor(NULL, IDC_WAIT);
HCURSOR hCursorOld = SetCursor(hCursor);
if(SUCCEEDED(hr))
{
// Retrieve a pointer to IWMPMediaCollection.
hr = m_spPlayer->get_mediaCollection(&spMediaCollection);
}
if(SUCCEEDED(hr) && spMediaCollection)
{
// Retrieve a playlist filled with IWMPMedia items.
// Each IWMPMedia represents an individual playlist
// in the library.
hr = spMediaCollection->getByAttribute(CComBSTR("MediaType"), CComBSTR("playlist"), &spPlaylist);
}
if(SUCCEEDED(hr) && spPlaylist)
{
// Get the sync attribute name for the current device.
CComBSTR bstrAttribute(g_szSyncAttributeNames[lPSIndex]);
// Sort the playlist.
// lSyncItemCount is the count of synchronization playlists.
hr = SortPlaylist(spPlaylist, bstrAttribute, &lSyncItemCount);
if(SUCCEEDED(hr))
{
m_spPlaylist = spPlaylist; // Cache the playlist.
long lCount = 0;
spPlaylist->get_count(&lCount);
// Fill the ListView control.
for(long i = 0; i < lCount; i++)
{
CComPtr<IWMPMedia> spMedia;
CComBSTR bstrPlaylistName;
CComBSTR bstrVal; // Value of the SyncXX attribute.
// Retrieve a playlist.
hr = spPlaylist->get_item(i, &spMedia);
if(SUCCEEDED(hr) && spMedia)
{
// Get the name.
hr = spMedia->get_name(&bstrPlaylistName);
}
if(SUCCEEDED(hr) && spMedia)
{
// Get the SyncXX attribute value.
hr = spMedia->getItemInfo(bstrAttribute, &bstrVal);
}
if(SUCCEEDED(hr) && bstrPlaylistName.Length())
{
// Insert the item in the ListView control.
LVITEM lvI;
ZeroMemory(&lvI, sizeof(LVITEM));
lvI.mask = LVIF_TEXT;
lvI.lParam = _wtol(bstrVal);
lvI.iItem = ListView_GetItemCount(m_hPlView);
lvI.pszText = "";
ListView_InsertItem(m_hPlView, &lvI);
// If this is a sync playlist, mark the check box.
if(i < lSyncItemCount)
{
ListView_SetCheckState(m_hPlView, i, TRUE);
}
// Display the playlist name.
lvI.iSubItem = 1;
lvI.pszText = COLE2T(bstrPlaylistName);
ListView_SetItem(m_hPlView, &lvI);
}
}
}
}
SetCursor(hCursorOld);
return hr;
}
Сведения о реализации функции SortPlaylist см. в разделе Сортировка списков воспроизведения по приоритету синхронизации.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по