Bagikan melalui


Antarmuka IOleParentUndoUnit (ocidl.h)

Memungkinkan unit urungkan untuk memuat unit urungkan anak. Misalnya, tindakan kompleks dapat disajikan kepada pengguna akhir sebagai tindakan urungkan tunggal meskipun sejumlah tindakan terpisah terlibat. Semua tindakan batalkan subordinat terkandung dalam unit pembatalan induk tingkat atas.

Unit pembukaan induk awalnya dibuat menggunakan metode IOleUndoManager::Open. Penambahan unit urungkan harus selalu dilakukan melalui manajer urungkan. Metode IOleParentUndoUnit::Open dan IOleParentUndoUnit::Close pada unit induk akan akhirnya dipanggil oleh manajer urungkan. Meminta unit induk memanggil kembali ke manajer urungkan akan menyebabkan rekursi tak terbatas.

Saat unit induk terbuka, manajer urungkan menambahkan unit urungkan ke unit tersebut dengan memanggil IOleParentUndoUnit::Add. Ketika manajer urungkan menutup induk tingkat atas, seluruh unit batalkan dengan subordinat berlapis ditempatkan di atas tumpukan batalkan.

Induk pengaktifan diperlukan untuk dibuka pada tumpukan sebelum unit urungkan lainnya dapat ditambahkan. Jika tidak terbuka, tumpukan harus dibersihkan sebagai gantinya. Hal ini untuk memastikan bahwa unit urungkan hanya ditambahkan sebagai akibat dari tindakan pengguna dan bukan tindakan terprogram. Misalnya, jika aplikasi Anda ingin membuat mengklik tombol tertentu tidak dapat diurungkan, tetapi tindakan yang sama juga diekspos melalui model objek. Tindakan tersebut harus tidak dapat dibatalkan melalui antarmuka pengguna tetapi bukan model objek karena Anda tidak dapat memulihkan status kode skrip pengguna. Karena kode yang sama mengimplementasikan perubahan dalam kedua kasus, kode UI yang menangani klik tombol harus membuka induk yang mengaktifkan pada tumpukan, memanggil kode yang sesuai, lalu menutup unit induk. Kode model objek tidak akan membuka unit induk, menyebabkan tumpukan pembukaan dihapus.

Induk pemblokiran digunakan ketika Anda tidak ingin kode Anda memanggil kode lain yang Anda tahu mungkin mencoba menambahkan unit urungkan ke tumpukan. Misalnya, Anda harus menggunakan induk pemblokiran jika Anda memanggil kode yang membuat unit urungkan, bahwa kode luar Anda telah dibuat yang akan sepenuhnya membatalkan semua perilaku yang diinginkan.

Induk yang tidak mengaktifkan digunakan saat Anda mengaktifkan peristiwa sebagai respons terhadap tindakan pengguna. Tumpukan akan dibersihkan hanya jika penanganan aktivitas melakukan sesuatu yang mencoba membuat unit pembukaan, tetapi jika tidak ada handler maka tumpukan pembukaan akan dipertahankan.

Jika objek perlu membuat unit induk, ada beberapa kasus yang perlu dipertimbangkan:

  • Untuk membuat unit induk yang mengaktifkan, objek memanggil IOleUndoManager::GetOpenParentState pada manajer urungkan dan memeriksa nilai yang dikembalikan. Jika nilainya S_FALSE, maka objek akan membuat induk yang mengaktifkan dan membukanya. Jika nilai yang dikembalikan S_OK, maka ada induk yang sudah terbuka. Jika induk terbuka diblokir (UAS_BLOCKED bit set), atau induk yang mengaktifkan (UAS_BLOCKED dan bit UAS_NOPARENTENABLE tidak diatur), maka tidak perlu membuat induk yang mengaktifkan. Jika induk yang saat ini terbuka adalah induk yang menonaktifkan (set bit UAS_NOPARENTENABLE), maka induk yang mengaktifkan harus dibuat dan dibuka untuk mengaktifkan kembali penambahan unit pembatalan. Perhatikan bahwa UAS_NORMAL memiliki nilai nol, yang berarti tidak adanya semua bit lainnya dan bukan bendera bit yang dapat diatur. Jika membandingkan *pdwState dengan UAS_NORMAL, keluarkan bit yang tidak digunakan dari pdwState dengan UAS_MASK untuk memungkinkan ekspansi di masa mendatang.
  • Untuk membuat induk yang diblokir, objek memanggil IOleUndoManager::GetOpenParentState dan memeriksa induk terbuka yang sudah diblokir. Jika ada, maka tidak perlu membuat induk pemblokiran baru. Jika tidak, objek akan membuatnya dan membukanya pada tumpukan.
  • Untuk membuat induk penonaktifan, objek memanggil IOleUndoManager::GetOpenParentState dan memeriksa induk terbuka yang diblokir atau dinonaktifkan. Jika salah satu ada, tidak perlu membuat induk baru. Jika tidak, objek membuat induk dan membukanya pada tumpukan.
Jika bendera UAS_NOPARENTENABLE dan UAS_BLOCKED diatur, bendera yang paling relevan dengan pemanggil harus digunakan dengan UAS_NOPARENTENABLE diutamakan. Misalnya, jika objek membuat unit urungkan sederhana, objek harus memperhatikan bendera UAS_NOPARENTENABLE dan menghapus tumpukan batalkan. Jika membuat unit induk yang mengaktifkan, maka unit induk harus memperhatikan bendera UAS_BLOCKED dan melewati pembuatan.

Ketika unit batalkan induk ditandai diblokir, unit tersebut akan membatalkan unit yang diterimanya.

Warisan

Antarmuka IOleParentUndoUnit mewarisi dari IOleUndoUnit. IOleParentUndoUnit juga memiliki jenis anggota ini:

Metode

Antarmuka IOleParentUndoUnit memiliki metode ini.

 
IOleParentUndoUnit::Tambahkan

Menambahkan unit urungkan sederhana ke koleksi.
IOleParentUndoUnit::Close

Menutup unit urungkan induk yang ditentukan. (IOleParentUndoUnit.Close)
IOleParentUndoUnit::FindUnit

Menunjukkan apakah unit yang ditentukan adalah anak dari unit urungkan ini atau salah satu turunannya, yaitu jika unit yang ditentukan adalah bagian dari hierarki di unit induk ini.
IOleParentUndoUnit::GetParentState

Mengambil informasi status tentang unit pembukaan induk terbuka paling dalam. (IOleParentUndoUnit.GetParentState)
IOleParentUndoUnit::Open

Membuka unit pembukaan induk baru, yang menjadi bagian dari tumpukan pembukaan unit yang berisi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header ocidl.h

Lihat juga

IOleUndoManager

IOleUndoUnit