Bagikan melalui


Algoritma pemrosesan perintah

Di perintah Visual Studio ditangani oleh sejumlah komponen yang berbeda. Perintah dirutekan dari konteks terdalam, yang didasarkan pada pilihan saat ini, ke konteks terluar (juga dikenal sebagai global). Untuk informasi selengkapnya, lihat Ketersediaan perintah.

Urutan resolusi perintah

Perintah diteruskan melalui tingkat konteks perintah berikut:

  1. Add-in: Sistem pertama-tama menawarkan perintah ke semua add-in yang ada.

  2. Perintah prioritas: Perintah ini didaftarkan dengan menggunakan IVsRegisterPriorityCommandTarget. Mereka dipanggil untuk setiap perintah di Visual Studio, dan dipanggil dalam urutan di mana mereka terdaftar.

  3. Perintah menu konteks: Perintah yang terletak di menu konteks pertama kali ditawarkan kepada target perintah yang diberikan kepada menu konteks, dan setelah itu ke rute umum.

  4. Target perintah toolbar set: Target perintah ini didaftarkan saat Anda memanggil SetupToolbar2. Parameter pCmdTarget dapat null. Jika bukan null, target perintah ini digunakan untuk memperbarui perintah apa pun yang terletak di toolbar yang Anda siapkan. Jika shell menyiapkan toolbar Anda, maka ia memberikan bingkai jendela sebagai pCmdTarget sehingga semua pembaruan pada perintah pada toolbar Anda mengalir melalui bingkai jendela, meskipun tidak dalam fokus.

  5. Jendela alat: Jendela alat, yang biasanya mengimplementasikan IVsWindowPane antarmuka, juga harus mengimplementasikan IOleCommandTarget antarmuka sehingga Visual Studio bisa mendapatkan target perintah ketika jendela alat adalah jendela aktif. Namun, jika jendela alat yang memiliki fokus adalah jendela Proyek , maka perintah dirutekan ke IVsUIHierarchy antarmuka yang merupakan induk umum dari item yang dipilih. Jika pilihan ini mencakup beberapa proyek, perintah dirutekan ke IVsSolution hierarki. Antarmuka IVsUIHierarchy berisi metode QueryStatusCommand dan ExecCommand yang mirip dengan perintah yang sesuai pada antarmuka IOleCommandTarget.

  6. Jendela dokumen: Jika perintah memiliki flag RouteToDocs yang diatur dalam file .vsct, Visual Studio akan mencari target perintah pada objek tampilan dokumen, yaitu berupa instans dari antarmuka IVsWindowPane atau objek dokumen, yang umumnya adalah antarmuka IVsTextLines atau antarmuka IVsTextBuffer. Jika objek tampilan dokumen tidak mendukung perintah, Visual Studio merutekan perintah ke IOleCommandTarget antarmuka yang dikembalikan. (Ini adalah antarmuka opsional untuk objek data dokumen.)

  7. Hierarki saat ini: Hierarki saat ini bisa menjadi proyek yang memiliki jendela dokumen aktif atau hierarki yang dipilih di Penjelajah Solusi. Visual Studio mencari antarmuka IOleCommandTarget yang diimplementasikan pada hierarki aktif saat ini. Hierarki harus mendukung perintah yang tetap valid ketika hierarki aktif, bahkan jika fokusnya ada pada jendela dokumen item proyek. Namun, perintah yang hanya berlaku ketika Penjelajah Solusi memiliki fokus harus didukung dengan menggunakan antarmuka IVsUIHierarchy dan metode QueryStatusCommand serta ExecCommand.

    Perintah Potong, Salin, Tempel, Hapus, Ganti Nama, Masukkan, dan DoubleClick memerlukan penanganan khusus. Untuk informasi tentang cara menangani perintah Hapus dan Hapus dalam hierarki, lihat IVsHierarchyDeleteHandler antarmuka.

  8. Global: Jika perintah belum ditangani oleh konteks yang disebutkan sebelumnya, Visual Studio mencoba merutekannya ke VSPackage yang memiliki perintah yang mengimplementasikan IOleCommandTarget antarmuka. Jika VSPackage belum dimuat, maka tidak akan dimuat saat metode QueryStatus dipanggil oleh Visual Studio. VSPackage dimuat hanya ketika metode dipanggil Exec .