Der ATL-Objekt-Assistent erstellt standardmäßig eine einzelne Datenklasse, abgeleitet von CSnapInItemImpl, für das Snap-in-Objekt.
In einigen Fällen müssen Sie eine oder mehrere benutzerdefinierte Elementtypen für ein Objekt-Snap-in zu implementieren. Der einfachste Ansatz ist zu kopieren und eine neue Klasse aus der vorhandenen Datenklasse ändern und einige zusätzlichen Änderungen an dem Projekt zu machen. Dieses Verfahren erfolgt in drei Schritten:
Der erste Schritt umfasst die Deklaration der Datenklasse vorhandenen für das Snap-in-Objekt kopieren und ändern dann die Ergebnisse in eine separate Klasse erstellen.
Die Klassendeklaration Daten kann zu Beginn der PROJNAMEgefunden werden.H-Datei des Projekts-Snap-in. Suchen Sie diese Klassendeklaration, und kopieren Sie und fügen Sie das Ergebnis unterhalb der ersten Deklaration.
Ersetzen Sie in der neu eingefügten Erklärung alle Vorkommen von der ersten Klasse Name mit dem Namen der neuen zweiten Klasse. Zum Beispiel, wenn die Daten-Klasse aufgerufen wird CMySnapInData und Sie erstellen eine benutzerdefinierte Daten-Element-Klasse namens CMyCustomSnapInData , zuerst kopieren und fügen Sie die Deklaration der Klasse Ausgangsdaten. Suchen Sie dann nach jedem Vorkommen von CMySnapInData (im eingefügten Abschnitt) und ersetzen Sie ihn durchCMyCustomSnapInData.
Neben der Deklaration der Klasse hat die Datenklasse ein GUID-Deklaration und vier statische Datenmember. Am Ende der PROJNAMEwerden die GUID und Daten-Member definiert.CPP-Datei. Der folgende Code ist ein Beispiel-Erklärung:
static const GUID CProjNameGUID_NODETYPE = {0xb386c6b, 0x8633, 0x11d1, {0xb0, 0 x 8, 0 x 0, 0xc0, 0x4f, 0xb9, 1,di, 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
Da diese Datenmember einer GUID abhängen, müssen Sie zuerst generieren eine neue GUID (mit GUIDGEN) und dann kopieren und fügen die fünf Deklarationen der Klasse Ausgangsdaten, direkt unterhalb. Nachdem Sie eine Kopie erstellen, ändern sie die neu erstellte GUID verwenden. Beispielsweise würde der vorhergehenden Beispielcode verwenden und eine neue GUID generieren, das Ergebnis der zweiten Datenklasse wie folgt aussehen:
static const GUID CMyCustomSnapInGUID_NODETYPE = Nbsp; {0x8dbeb252, 0x9201, 0x11d1, {0xa8, 0xd6, 0 x 0, 0 x 60, 0 x 8, 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
Nachdem diese Änderungen abgeschlossen sind, gibt es einen Schritt Links: Ändern der Registry-Datei für das Objekt-Snap-in.
Der Zweck der.RGS-Datei ist das Snap-in-Objekt und alle seine Komponenten zu registrieren. Da Sie eine benutzerdefinierte Datenklasse Element hinzugefügt haben, müssen Sie ändern die.RGS-Datei, um diese Klasse zu registrieren.
Hinweis&Nbsp; In diesem Schritt wird die GUID, den Sie im vorherigen Schritt generiert verwendet.
Es gibt zwei Bereiche in der.RGS-Datei, die Sie bearbeiten möchten. Beide können schnell gefunden werden, bei der Suche nach den NodeTypes Stichwort.
Das erste Vorkommen ist unter den NoRemove Snapins Abschnitt. In der verschachtelten NodeTypes Abschnitt, fügen Sie die neue GUID unmittelbar nach der vorhandenen, mit dem gleichen GUID-Format als die heute existierende.
Das zweite Vorkommen ist den NoRemove NodeTypes Abschnitt. Kopieren Sie der Code in diesem Abschnitt gefunden, fügen Sie ihn sofort nach und ändern Sie die referenzierte GUID die GUID der benutzerdefinierten Klasse.
Dies schließt die Änderungen des das-Snap-in-Projekt. Nach einer erfolgreichen kompilieren müssen Sie einen neuen benutzerdefinierten Elementtyp.