Parancs-útválasztási algoritmus

A Visual Studio-ban a parancsokat számos különböző összetevő kezeli. A parancsok a legbelső környezetből, amely az aktuális kijelölésen alapulnak, a legkülső (más néven globális) környezetbe kerülnek. További információ: Parancs rendelkezésre állása.

Parancsmegoldás sorrendje

A parancsok a parancskörnyezet következő szintjein haladnak át:

  1. Bővítmények: A környezet először minden meglévő bővítménynek felajánlja a parancsot.

  2. Prioritási parancsok: Ezeket a parancsokat a IVsRegisterPriorityCommandTarget használatával regisztrálják. A Rendszer meghívja őket a Visual Studio minden parancsára, és a regisztrálásuk sorrendjében lesznek meghívva.

  3. Helyi menüparancsok: A helyi menüben található parancsok először a helyi menüben megadott parancscélnak, majd a tipikus útválasztásnak lesznek felajánlva.

  4. Eszköztár készletének parancscélpontjai: Ezek a parancscélpontok SetupToolbar2 hívásakor lesznek regisztrálva. A pCmdTarget paraméter lehet null. Ha nem null, akkor ez a parancscél a beállított eszköztáron található parancsok frissítésére szolgál. Ha a shell beállítja az eszköztárat, akkor átadja az ablakkeretet mint pCmdTarget, így az eszköztár parancsainak összes frissítése az ablakkereten keresztül történik, még akkor is, ha az nem aktív.

  5. Eszközablak: Az eszközablakok, amelyek általában implementálják az IVsWindowPane interfészt, a IOleCommandTarget interfészt is implementálniuk kell, hogy a Visual Studio megkaphassa a parancscélt, amikor az eszközablak az aktív ablak. Ha azonban a fókuszt tartalmazó eszközablak a Project ablak, akkor a parancs a IVsUIHierarchy kijelölt elemek közös szülőfelületéhez lesz irányítva. Ha ez a kijelölés több projektre is kiterjed, a parancs a IVsSolution hierarchiához lesz irányítva. Az IVsUIHierarchy interfész tartalmazza a QueryStatusCommand és ExecCommand metódusokat, amelyek hasonlóak a IOleCommandTarget felület megfelelő parancsaihoz.

  6. Dokumentumablak: Ha a parancs RouteToDocs fájljában a jelölő van beállítva, a Visual Studio egy parancscélt keres a dokumentumnézet-objektumon, amely vagy egy IVsWindowPane felület vagy egy dokumentumobjektum egy példánya (általában IVsTextLines felület vagy IVsTextBuffer felület). Ha a dokumentumnézet objektuma nem támogatja a parancsot, a Visual Studio a visszaadott felületre irányítja a IOleCommandTarget parancsot. (Ez a dokumentumadat-objektumok opcionális felülete.)

  7. Jelenlegi hierarchia: Az aktuális hierarchia lehet az aktív dokumentumablakot birtokoló projekt vagy a Megoldáskezelőben kiválasztott hierarchia. A Visual Studio az IOleCommandTarget aktuális vagy aktív hierarchiában implementált felületet keresi. A hierarchiának támogatnia kell azokat a parancsokat, amelyek akkor is érvényesek, ha a hierarchia aktív, még akkor is, ha egy projektelem dokumentumablaka fókuszban van. Azokat a parancsokat azonban, amelyek csak akkor érvényesek, ha a Megoldáskezelő fókuszba kerül, a felület, valamint annak IVsUIHierarchyQueryStatusCommand és ExecCommand módszereinek használatával kell támogatni.

    A Kivágás, Másolás, Beillesztés, Törlés, Átnevezés, Enter és DoubleClick parancsok speciális kezelést igényelnek. A törlési és eltávolítási parancsok hierarchiákban való kezelésével kapcsolatos információkért tekintse meg a IVsHierarchyDeleteHandler felületet.

  8. Globális: Ha egy parancsot nem a korábban említett környezetek kezelnek, a Visual Studio megpróbálja átirányítani azt a VSPackage-hez, amely egy olyan parancsot birtokol, amely implementálja a IOleCommandTarget felületet. Ha a VSPackage még nincs betöltve, akkor a rendszer nem tölti be, amikor a Visual Studio meghívja a metódust QueryStatus . A VSPackage csak a Exec metódus meghívásakor töltődik be.