Как добавить пользовательские типы элементов в объект Snap-In?

По умолчанию мастер объектов ATL создает один данных, производный класс от CSnapInItemImpl, для объекта snap-in.

В некоторых случаях вам нужно реализовать один или несколько нестандартные типы элементов для объекта snap-in. Самый простой подход заключается в том, чтобы скопировать и изменить новый класс от класса существующих данных и внести некоторые дополнительные изменения в проект. Эта процедура выполняется в три шага:

Создание пользовательского класса данных элемента

Первый этап включает копирование декларацию существующего класса данных для объекта snap-in и затем изменение результаты для создания отдельного класса.

Объявление класса данных можно найти в начале PROJNAME.H файл вашего проекта оснастки. Найдите это объявление класса и скопируйте и вставьте результат ниже первой Декларации.

В Декларации вновь вставленный замените все вхождения имени первого класса с именем нового второго класса. Например если вызывается класс данных проекта CMySnapInData и вы хотите создать пользовательский элемент класс данных под названием CMyCustomSnapInData , сначала скопируйте и вставьте объявление класса исходных данных. Тогда обыскивать для любых случаев из CMySnapInData (в разделе вставленный) и заменить ее сCMyCustomSnapInData.

Реализация идентификаторы GUID для пользовательского класса данных

В дополнение к объявлению класса класс данных имеет Декларация GUID и четырьмя статические члены данных. GUID и данных членов, определенных в конце PROJNAME.Файл CPP. Ниже приведен пример объявления:

static const GUID CProjNameGUID_NODETYPE = {0xb386c6b, 0x8633, 0x11d1, {0xb0, 0x8, 0x0, 0xc0, 0x4f, 0xb9, 0x94, 0x36}};
const GUID * nbsp; CProjNameData::m_NODETYPE = & CsdfdsfGUID_NODETYPE;
const TCHAR * CProjNameData::m_SZNODETYPE = _T("0B386C6B-8633-11D1-B008-00C04FB99436");
const TCHAR * CProjNameData::m_SZDISPLAY_NAME = _T("Csdfdsf");
const CLSID * CProjNameData::m_SNAPIN_CLASSID = & CLSID_sdfdsf

Поскольку эти члены данных зависят от идентификатора GUID, необходимо сначала создать новый код GUID (с помощью GUIDGEN) и затем скопировать и вставить пять объявления класса исходных данных, непосредственно ниже. После создания копии, измените его, чтобы использовать только что созданный GUID. Например используя в предыдущем примере кода, новый идентификатор GUID, результат для второго класса данных будет следующим:

static const GUID CMyCustomSnapInGUID_NODETYPE = nbsp;  {0x8dbeb252, 0x9201, 0x11d1, {0xa8, 0xd6, 0x0, 0x60, 0x8, 0x93,
        0x8f, 0xb8}};
const GUID * CMyCustomSnapIn::m_NODETYPE = & CMySnapInGUID_NODETYPE;
const TCHAR * CMyCustomSnapIn::m_SZNODETYPE =
    _T("8DBEB252-9201-11D1-A8D6-006008938FB8");
const TCHAR * CMyCustomSnapIn::m_SZDISPLAY_NAME = _T("CMyCustomSnapIn");
const CLSID * CMyCustomSnapIn::m_SNAPIN_CLASSID = & CLSID_MyCustomSnapIn

После того, как эти изменения являются полными, есть один шаг влево: изменение файла реестра для объекта snap-in.

Изменение.RGS-файл проекта Snap-In

Цель.RGS-файл предназначен для регистрации объекта snap-in и всех его компонентов. Из-за добавления пользовательского элемента класса данных необходимо изменить.RGS-файл для регистрации этот класс тоже.

Примечание   GUID, созданные на предыдущем шаге используется в этом действии.

Существует две области в.RGS-файл, который необходимо изменить. Оба можно быстро найти, выполнив поиск NodeTypes ключевое слово.

Первое вхождение находится под NoRemove Snapins секции. В вложенных NodeTypes раздел, добавьте новый идентификатор GUID сразу же после существующей, используя тот же формат GUID в качестве существующей.

Второе появление находится в NoRemove NodeTypes разделе. Копирование кода в этом разделе, вставьте его в сразу же после и измените указанный идентификатор GUID на идентификатор GUID настраиваемого класса.

Это завершает изменения проекта оснастки. После успешной компиляции вы получите новый тип пользовательского элемента.

Index