По умолчанию мастер объектов ATL создает один данных, производный класс от CSnapInItemImpl, для объекта snap-in.
В некоторых случаях вам нужно реализовать один или несколько нестандартные типы элементов для объекта snap-in. Самый простой подход заключается в том, чтобы скопировать и изменить новый класс от класса существующих данных и внести некоторые дополнительные изменения в проект. Эта процедура выполняется в три шага:
Первый этап включает копирование декларацию существующего класса данных для объекта snap-in и затем изменение результаты для создания отдельного класса.
Объявление класса данных можно найти в начале PROJNAME.H файл вашего проекта оснастки. Найдите это объявление класса и скопируйте и вставьте результат ниже первой Декларации.
В Декларации вновь вставленный замените все вхождения имени первого класса с именем нового второго класса. Например если вызывается класс данных проекта CMySnapInData и вы хотите создать пользовательский элемент класс данных под названием CMyCustomSnapInData , сначала скопируйте и вставьте объявление класса исходных данных. Тогда обыскивать для любых случаев из CMySnapInData (в разделе вставленный) и заменить ее сCMyCustomSnapInData.
В дополнение к объявлению класса класс данных имеет Декларация 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-файл для регистрации этот класс тоже.
Примечание GUID, созданные на предыдущем шаге используется в этом действии.
Существует две области в.RGS-файл, который необходимо изменить. Оба можно быстро найти, выполнив поиск NodeTypes ключевое слово.
Первое вхождение находится под NoRemove Snapins секции. В вложенных NodeTypes раздел, добавьте новый идентификатор GUID сразу же после существующей, используя тот же формат GUID в качестве существующей.
Второе появление находится в NoRemove NodeTypes разделе. Копирование кода в этом разделе, вставьте его в сразу же после и измените указанный идентификатор GUID на идентификатор GUID настраиваемого класса.
Это завершает изменения проекта оснастки. После успешной компиляции вы получите новый тип пользовательского элемента.