Bagikan melalui


IUIAnimationPriorityComparison::Metode HasPriority (uianimation.h)

Menentukan apakah papan cerita baru memiliki prioritas atas papan cerita terjadwal.

Sintaks

HRESULT HasPriority(
  [in] IUIAnimationStoryboard       *scheduledStoryboard,
  [in] IUIAnimationStoryboard       *newStoryboard,
  [in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);

Parameter

[in] scheduledStoryboard

Papan cerita yang saat ini dijadwalkan.

[in] newStoryboard

Papan cerita baru yang mengganggu papan cerita terjadwal yang ditentukan dalam scheduledStoryboard.

[in] priorityEffect

Efek potensial pada newStoryboard jika scheduledStoryboard memiliki prioritas yang lebih tinggi.

Mengembalikan nilai

Metode ini dapat mengembalikan salah satu nilai ini.

Menampilkan kode Deskripsi
S_OK
newStoryboard memiliki prioritas.
S_FALSE
scheduledStoryboard memiliki prioritas.

Keterangan

Satu variabel animasi dapat disertakan dalam beberapa papan cerita, tetapi beberapa papan cerita tidak dapat menganimasikan variabel yang sama secara bersamaan.

Jika papan cerita baru mencoba menganimasikan satu atau beberapa variabel yang saat ini dijadwalkan untuk animasi oleh papan cerita yang berbeda, konflik penjadwalan terjadi.

Untuk menentukan papan cerita mana yang memiliki prioritas, manajer animasi dapat memanggil HasPriority pada satu atau beberapa handler perbandingan prioritas yang disediakan oleh aplikasi.

Mendaftarkan objek perbandingan prioritas bersifat opsional. Secara default, semua papan cerita dapat dipangkas, disimpulkan, atau dikompresi untuk mencegah kegagalan, tetapi tidak ada yang dapat dibatalkan, dan secara default tidak ada papan cerita yang akan dibatalkan atau dipangkas untuk mencegah penundaan.

Secara default, panggilan yang dilakukan dalam metode panggilan balik ke metode animasi lainnya menghasilkan panggilan gagal dan mengembalikan UI_E_ILLEGAL_REENTRANCY. Namun, ada pengecualian untuk default ini. Metode berikut dapat berhasil dipanggil dari HasPriority:

Manajemen Pertikaian

Untuk mengatasi konflik penjadwalan, pengelola animasi memiliki opsi berikut:

  • Batalkan papan cerita terjadwal jika belum mulai diputar dan objek perbandingan prioritas yang terdaftar di IUIAnimationManager::SetCancelPriorityComparison mengembalikan S_OK. Papan cerita yang dibatalkan sepenuhnya dihapus dari jadwal.
  • Pangkas papan cerita terjadwal jika objek perbandingan prioritas yang terdaftar di IUIAnimationManager::SetTrimPriorityComparison mengembalikan S_OK. Jika papan cerita baru memangkas papan cerita terjadwal, papan cerita terjadwal tidak dapat lagi memengaruhi variabel ketika papan cerita baru mulai menganimasikan variabel tersebut.
  • Akhiri papan cerita terjadwal jika papan cerita terjadwal berisi perulangan dengan jumlah pengulangan UI_ANIMATION_REPEAT_INDEFINITELY dan objek perbandingan prioritas yang terdaftar di IUIAnimationManager::SetConcludePriorityComparison mengembalikan S_OK. Jika papan cerita disimpulkan, pengulangan perulangan saat ini selesai, dan pengingat papan cerita kemudian diputar.
  • Kompres papan cerita terjadwal, dan papan cerita lainnya yang menjiwai variabel yang sama, jika objek perbandingan prioritas yang terdaftar di IUIAnimationManager::SetCompressPriorityComparison mengembalikan S_OK untuk semua papan cerita terjadwal yang mungkin terpengaruh oleh kompresi. Ketika papan cerita dikompresi, waktu untuk sementara dipercepat untuk papan cerita yang terpengaruh, sehingga mereka bermain lebih cepat.

Jika tidak ada opsi di atas yang diizinkan oleh objek perbandingan prioritas, upaya untuk menjadwalkan papan cerita gagal dan Animasi Windows mengembalikan UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY ke aplikasi panggilan.

Perhatikan bahwa agar papan cerita baru berhasil dijadwalkan, itu harus dimulai sebelum penundaan yang dapat diterima terpanjang telah berlalu. Ini ditentukan oleh IUIAnimationStoryboard::SetLongestAcceptableDelay atau IUIAnimationManager::SetDefaultLongestAcceptableDelay (jika tidak dipanggil, defaultnya adalah 0,0 detik). Jika penundaan yang dapat diterima terpanjang adalah UI_ANIMATION_SECONDS_EVENTUALLY, penundaan terbatas akan cukup.

Parameter priorityEffect menjelaskan kemungkinan efek pada papan cerita baru jika HasPriority mengembalikan S_FALSE. Jika priorityEffectUI_ANIMATION_PRIORITY_EFFECT_FAILURE, ada kemungkinan bahwa mengembalikan S_FALSE akan mengakibatkan kegagalan untuk menjadwalkan papan cerita baru (ada kemungkinan juga bahwa manajer animasi akan diizinkan untuk menyelesaikan konflik dengan cara yang berbeda dengan objek perbandingan prioritas lain). Jika priorityEffectUI_ANIMATION_PRIORITY_EFFECT_DELAY, satu-satunya kelemahan dari mengembalikan S_FALSE adalah bahwa papan cerita mungkin dimulai lebih lambat daripada hasPriority yang dikembalikan S_OK.

Ketika UI_ANIMATION_PRIORITY_EFFECT_DELAY diteruskan ke HasPriority, manajer animasi telah menentukan bahwa ia dapat menjadwalkan papan cerita baru sehingga akan dimulai sebelum penundaan terpanjang yang dapat diterima telah berlalu, tetapi pada akhirnya meminta aplikasi apakah papan cerita harus dimulai lebih awal. Dalam beberapa skenario, mungkin yang terbaik adalah mengurangi latensi animasi dengan mengembalikan S_OK. Di yang lain, mungkin lebih baik membiarkan animasi terjadwal selesai jika memungkinkan, dalam hal ini S_FALSE harus dikembalikan. UI_ANIMATION_PRIORITY_EFFECT_DELAY hanya diteruskan ke HasPriority ketika manajer animasi sedang mempertimbangkan untuk membatalkan atau memangkas papan cerita.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7, Windows Vista, dan Pembaruan Platform untuk Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Tidak ada yang didukung
Target Platform Windows
Header uianimation.h
DLL UIAnimation.dll

Lihat juga

IUIAnimationManager::SetCancelPriorityComparison

IUIAnimationManager::SetCompressPriorityComparison

IUIAnimationManager::SetConcludePriorityComparison

IUIAnimationManager::SetTrimPriorityComparison

Perbandingan IUIAnimationPriority

UI_ANIMATION_PRIORITY_EFFECT