Практическое руководство. Функциональные возможности поддержки перетаскивания панели элементов
Примечание
Рекомендуемый способ добавлять пользовательские элементы управления в панели элементов использовать шаблоны элементов управления панели элементов, поступающие в пакет SDK Visual Studio 10, включая перетаскивание и удаляют поддержка.В этом разделе сохраняется только в целях обратной совместимости, и для работы с существующими элементами управления.
Дополнительные сведения о создании управления панели элементов с помощью шаблонов см. в разделе Практическое руководство. Создание элемента управления панели элементов является использования Windows Forms и Практическое руководство. Создание элемента управления панели элементов является использования WPF.
VSPackages должен реализовать поддержку перетаскивания, если их использования Панель элементов элементы управления с представлениями документа, например редакторы и конструкторы.
По умолчанию все объекты, производные от Control автоматически и прозрачно предоставление поддержки для использования Панель элементов элементы управления и описанных ниже процедур нет. Базовая функциональность может быть расширена путем создания конструктор.
Дополнительные сведения см. в разделах Общие сведения о Windows Forms и Расширение поддержки времени разработки.
К функциональности базовой реализации перетаскивания
Предоставление поддержки перетаскивания, реализовав IDropTarget в объекте представления. Это предоставляет представление с перетаскиванием функциональными возможностями OLE и сериализацию элемента управления.
Дополнительные сведения о реализации см. перетаскивания функциональные возможности. Перетаскивание (OLE).
Drop могут быть элементами и элементами управления буфера обмена, удаленными в конструкторе. Дополнительные сведения о стандартных форматах, поддерживаемых буфера обмена Visual Studio Панель элементовсм. Панель элементов (Visual Studio).
Предоставление базовая реализация IVsToolboxUser интерфейс для представления документа.
Если пользователь пытается перетащить элемент управления панели элементов к представлению, Visual Studio запросы оболочки VSPackage представления наличия в нем содержатся IVsToolboxUser интерфейс.
Реализация IsSupported возврата S_OK для этих Панель элементов форматирует целевой объект перетаскивания поддерживают. Пример в платежными документами, чтобы увидеть, если объект данных в пользовательском формате буфера обмена (CF_CUSTOM_FORMAT) и является ли объект элемента управления ActiveX.
STDMETHODIMP CustTbxUser::IsSupported(IDataObject* pDO) { HRESULT hr; STGMEDIUM stm; if (!pDO) return E_POINTER; // Determine if the data object is in the Custom clip board format // fetc is the dialog editor toolbox item template. FORMATETC fetc = { m_CF_CUSTOM_FORMAT, //Value set with RegisterClipboardFormat NULL, DVASPECT_CONTENT, // DVASCPECT_ICON might be better -1, TYMED_HGLOBAL }; if (FAILED(hr = pDO->GetData(&fetc, &stm))) { // Determine if the object is in the class-id clipboard format ... this // would be the case if the control is an activeX toolbox item. FORMATETC xfetc = { m_CF_CLSID, NULL, DVASPECT_CONTENT, // DVASCPECT_ICON might be better -1, TYMED_HGLOBAL }; if (SUCCEEDED(hr = pDO->GetData(&xfetc,&stm))) { USES_CONVERSION; GUID guid; LPSTR pData = (LPSTR)GlobalLock(stm.hGlobal); if (pData) { // Convert from the string format to a binary GUID. if (CLSIDFromString(A2W(pData), &guid) != S_OK) return E_FAIL; // HTML data objects could have CLSID format ... so any data object could // be returned as a NULL guid ... fail on null guid, obviously they are // not active X controls. if (guid == GUID_NULL) return E_FAIL; } } } return hr; }
Интегрированная среда разработки проверять данные при загрузке окна представления первые и для каждой активации окна представления после возврата Панель элементов пользователем с помощью интегрированной среды разработки НастройкаПанель элементов диалоговое окно. Обычно Панель элементов указывает неподдерживаемый Панель элементов элементы.
Пользователи могут устанавливать параметр отображение всех страницах области элементов. В этом случае среда не запрашивает редактора IsSupported. Сведения о том, как пользователь может настроить Панель элементов с помощью интегрированной среды разработки см. в разделе Как Manipulate toolbox tabs.
После IDropTarget реализация (описанных выше) как успешно обрабатывает удаленный компонент, объект просмотра должен уведомить Visual Studio среда этого путем вызова DataUsed
Если необходимо, VSPackage может расширять их путем расширения его поддержки перетаскивания IVsToolboxUser реализация.
IVsToolboxUser реализация может поддерживаться перетаскивание Панель элементов элементы в окне выделением, а не действие мыши. То есть при перетаскивании элемента, когда пользователь дважды щелкает на a Панель элементов элемент и один жесты, а затем нажмите клавишу ввод. Описание процедуры
Реализуйте метод ItemPicked.
Этот метод, вызываемый средой разработки выбран через нажмите кнопку или нажав клавиши ВВОД.
Метод должен ввод Панель элементов элемент, в поле целевого объекта.
Если не нуждаются поддержки реализации выделением, то метод должен возвращать S_FALSE.
В примере, приведенном ниже, реализация ItemPicked метод проверяет если выбранный объект поддерживается, и если возвращаются десериализует его в код:
STDMETHODIMP CustTbxUser::ItemPicked(IDataObject* pDataObject) { if (!pDataObject) return E_POINTER; UINT nIDTool; if (IsSupported(pDataObject) == S_OK) { SetToolCursor(); m_pDataObject = pDataObject; nIDTool = DeserializeObject(); // Get the focus back m_pResObject->m_spWndFrame->Show(); return S_OK; } }
Выполнить следующие шаги, чтобы обеспечить правильный фокус поддерживается для приложения:
Если окно редактора реализует 2 различных панелей, не 2 различных представления, а затем вызывают UpdateToolboxUI метод при переключении активации в панели в окне редактора. Только известно, если изменения происходят внутри приложения активации окна.
Правильно, чтобы активировать окно и убедиться в том, что маршрутизация команд обновления правильно, необходимо вызвать Show метод в компоненте. Это действие необходимо выполнить при установке фокуса на окно редактора компонента, например, созданный или измененного операцией перетаскивания, включая область элементов.
VSPackage может вмешаться в операции перетаскивания и доработаться удаленного элемента посредством IVsToolboxActiveUserHook интерфейс.
Например, вместо добавление новой Панель элементов мониторинг явно к Панель элементовможет перехватывать стандарт, VSPackage Панель элементов по мере того, как она будет удалена и заменить ее с пользовательской реализацией.
Динамически изменять управления панели элементов
Реализуйте метод IVsToolboxActiveUserHook.
При a InterceptDataObject выбран или удален элемент Панель элементов запросы целевой объект перетаскивания определить, он поддерживает Панель элементов интерфейс и, если он выполняет вызовы IVsToolboxActiveUserHook метод.
InterceptDataObject метод должен возвращать новую IDataObject объект, который нужно использовать, а не исходные IDataObject.
Если целевому объекту не требуется переопределять удаления объект данных, он должен вернуть качестве входных данных.
VSPackage может разрешить пользователям цикл через содержимое буфера обмена, нажав клавишу CTRL+SHIFT+V.
Поддержка буфер обмена
Реализуйте обработчик CMDIDPasteNextTBXCBItem команда с помощью:
IOleCommandTarget для interop-сборка-основанного VSPackages.
OleMenuCommandService для управляемого VSPackages.NET Framework-основанного пакетом. IVsToolboxClipboardCycler интерфейс.
В обработчике команды, реализуйте AreDataObjectsAvailable метод позволяет определить, есть ли объекты буфера обмена в цикл до конца.
Если элементы в буфере обмена панели элементов, среда проверяет буфер обмена системы, чтобы понять, если все элементы в нем.
Если элементы в системный буфер обмена, но не в буфере обмена панели элементов, то буфер обмена заполняется элементами системы.
Чтобы выбрать следующий элемент в списке, реализация вызывает GetAndSelectNextDataObject метод.
Для возврата в начало цикла буфера обмена, вызовите BeginCycle метод.
См. также
Задачи
Предварительная разработка элемента управления панели элементов
Основные понятия
Регистрация функции поддержки панели элементов