Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aplikasi desktop sampel terdiri dari dua bagian utama:
- Proyek wmdapp berisi sebagian besar kelas yang menampilkan antarmuka pengguna, menangani menyeret dan melepas, dan melakukan semua fungsi program yang diperlukan.
- Proyek proghelp adalah aplikasi pembantu yang berisi kelas yang tidak penting untuk menangani pemberitahuan status dan transfer file manual dari desktop ke aplikasi.
Executable menggunakan proyek pembantu hanya ketika pengguna memilih Gunakan Antarmuka Operasi pada menu Opsi untuk menangani transfer file manual ke perangkat, dan untuk menaikkan bilah status dalam formulir kemajuan unduhan. Semua aplikasi lainnya ditangani dalam proyek wmdapp.
Kelas | Arsip | Deskripsi |
---|---|---|
— | wmdmapp.cpp | Kelas yang menangani jendela induk antarmuka pengguna. Kode dalam file ini juga menangani beberapa input pengguna yang tidak ditangani oleh CDevFiles, seperti membuat daftar putar atau album pada perangkat, menghapus file, dan mendaftarkan pilihan menu. |
CDevices | Devices.cpp | Kelas yang menangani panel sebelah kiri jendela aplikasi utama, tempat perangkat yang tersedia dicantumkan. Kelas ini mengelola loop pesan, yang menangani input pengguna seperti memilih perangkat dan memberi tahu pane CDevFiles untuk memuat file yang sesuai ketika pemilihan perangkat telah berubah. |
CDevFiles | Devfiles.cpp | Kelas yang menangani panel kanan jendela aplikasi utama, tempat file pada perangkat yang dipilih dicantumkan. Kelas ini mengelola perulangan olahpesan, dan menangani input pengguna seperti menyeret file ke perangkat dan menghapus file dari perangkat. |
CStatus | Status.cpp | Kelas yang menangani bilah status bawah di jendela utama, di mana jumlah perangkat dan file tercantum, bersama dengan jumlah memori gratis dan digunakan pada perangkat yang dipilih. |
CWMDM | Wmdevmgr.cpp | Antarmuka tingkat atas untuk Windows Media Device Manager. Kelas ini menangani autentikasi, mengambil antarmuka IWMDeviceManager tingkat atas, dan berlangganan pemberitahuan dengan antarmuka IWMDMNotification. |
CProgress | Progress.cpp | Kelas dalam proyek aplikasi utama yang membuat dan mengelola kotak dialog memperlihatkan kemajuan peristiwa. |
CItemData | ItemData.cpp | Kelas pembungkus yang menyimpan pointer ke penyimpanan (jika mewakili file atau folder pada perangkat) atau perangkat (jika mewakili perangkat), serta berbagai informasi tentang objek termasuk ukuran dan atribut. |
CNotificationHandler | Notificationhandler.cpp | Mengelola notifikasi kedatangan dan penghapusan perangkat dengan memberitahu jendela CDevices. |
CProgressHelper | ProgressHelper.cpp | Dibuat oleh CDevFiles dalam fungsi lokal untuk menerima pemberitahuan dari Windows Media Device Manager dengan menerapkan IWMDMProgress. Ini digunakan oleh kelas CProgress untuk menentukan jumlah bilah di bilah kemajuan, dan ketika tindakan selesai. Kelas ini didefinisikan sebagai objek COM yang mengekspos antarmuka SDK IWMDMProgress dan antarmuka kustom IWMDMProgressHelper. |
COperationHelper | Operationhelper.cpp | Kelas ini mengimplementasikan IWMDMOperation untuk menangani transfer file secara manual. Ini adalah multi-thread untuk memungkinkannya terjadi secara asinkron, dan didefinisikan sebagai objek COM yang mengekspos antarmuka kustom, IWMDMOperationHelper, untuk menginstansiasi dan menginisialisasi kelas. Kelas ini hanya digunakan jika pengguna memilih "Gunakan Antarmuka Operasi" di menu Opsi. |
Daftar berikut ini menguraikan langkah-langkah dasar yang terjadi untuk berbagai tindakan pengguna:
Pada permulaan
Langkah-langkah utama berikut terjadi ketika aplikasi sampel dimulai.
- Variabel CWMDM global dibuat dan diautentikasi, dan mendaftar untuk menerima pemberitahuan
- CDevices secara global dibuat, dan CDevices::Create dipanggil untuk membuat dan mengisi jendela perangkat.
- CDevFiles global dibuat, dan CDevFiles::Create dipanggil untuk membuat panel file (yang tidak diisi hingga pengguna memilih perangkat).
- Instance global CStatus diinisiasi, dan CStatus::Create dipanggil untuk menginisiasi bilah status.
- _OnViewRefresh menghitung melalui semua perangkat dan menginisialisasi dan menambahkan semua perangkat (CItemData) ke CDevices dan memperbarui bilah status untuk menampilkan jumlah perangkat.
- CDevices::AddItem menambahkan item ke treeview yang merepresentasikan perangkat, dengan pointer ke dirinya sendiri sebagai TVITEM.lparam. Semua objek CDevice (perangkat) dan CDevFiles (file) disimpan dalam anggota simpul treeview ini di jendela yang sesuai.
Saat memilih perangkat
Langkah-langkah utama berikut terjadi saat pengguna memilih perangkat di panel kiri jendela aplikasi.
- Jendela CDevices menangkap klik dan memposting pesan WM_DRM_UPDATEDEVICE ke dirinya sendiri.
- CDevices menerima pesannya sendiri dan memanggil UpdateSelection, yang memberi tahu objek CDevFiles global untuk menghapus semuanya, menghitung semua item tingkat atas di perangkat, dan memanggil CDevFiles::AddItem untuk menambahkan masing-masing ke panel file.
- Terakhir, CDevices memanggil CDevFiles::UpdateStatusBar untuk memperbarui bilah status dengan perangkat dan informasi file yang benar.
Membuat daftar putar
Setelah mengklik "Buat Daftar Putar" pada menu Kontainer, aplikasi memanggil fungsi lokal _OnCreatePlaylist, yang melakukan tindakan berikut:
- Dapatkan jumlah item yang dipilih dari variabel CDevFiles global.
- Panggil fungsi lokal DlgNamePlaylist untuk membuka kotak dialog untuk mendapatkan nama daftar putar.
- Panggil CProgress::Create untuk membuat jendela dialog yang menunjukkan kemajuan tindakan, dan atur parameter pada kelas CProgress, seperti teks judul, rentang, nilai saat ini, dan sebagainya.
- Ulangi semua item yang dipilih di objek tampilan pohon CDevFiles, dan minta objek CItemData yang terkait dengan setiap file yang dipilih dalam tampilan pohon, dengan menaikkan bilah dialog kemajuan dengan setiap file. File ditambahkan ke array antarmukaIWMDMStorage.
- Dapatkan handle ke item yang saat ini dipilih dan lakukan kueri pada antarmuka IWMDMStorageControl3, yang akan digunakan nanti untuk membuat playlist baru di perangkat.
- Kueri objek yang dipilih untuk IWMDMStorage3, dan panggil CreateEmptyMetadataObject untuk membuat antarmukaIWMDMMetaDatabaru.
- Tambahkan kode format WMDM_FORMATCODE_ABSTRACTAUDIOVIDEOPLAYLIST ke antarmuka IWMDMMetadata baru dan buat daftar putar di perangkat dengan memanggil IWMDMStorageControl3::Insert3, melewati antarmuka metadata. Metode ini mengambil pointer ke IWMDMStorage baru pada perangkat.
- Isi daftar putar dengan melakukan kueri pada penyimpanan baru untuk IWMDMStorage4, dan memanggil IWMDMStorage4::SetReferences, memberikan array penunjuk IWMDMStorage yang dikumpulkan di langkah 4.
- Terakhir, buat objek CItemData baru untuk menahan daftar putar baru di perangkat, menginisialisasinya dengan penyimpanan baru, dan memanggil CDevFiles::AddItem untuk menambahkannya ke panel CDevFiles.
Topik terkait