Por padrão, o Assistente de objeto ATL cria uma classe de dados único, derivada de CSnapInItemImpl, para o objeto snap-in.
Em alguns casos, você precisará implementar um ou mais tipos de item personalizado para um objeto snap-in. A abordagem mais simples é copiar e modificar uma nova classe de dados da classe existente e fazer algumas modificações adicionais para o projeto. Este procedimento é realizado em três etapas:
A primeira etapa envolve a cópia da declaração de classe de dados existente para o objeto snap-in e, em seguida, modificar os resultados para criar uma classe separada.
A declaração de classe de dados pode ser encontrada no início do PROJNAME.Arquivo h do seu snap-in do projeto. Localize esta declaração de classe e copiar e colar o resultado abaixo da primeira declaração.
Na declaração recém-coladas, substitua quaisquer ocorrências do nome da primeira classe com o nome da nova classe de segundo. Por exemplo, se sua classe de dados de project é chamado CMySnapInData e você quiser criar uma classe de item de dados personalizado chamada CMyCustomSnapInData , primeiro copie e cole a declaração de classe de dados inicial. Em seguida, procure quaisquer ocorrências de CMySnapInData (na seção colada) e substituí-lo comCMyCustomSnapInData.
Além da declaração de classe, a classe de dados tem uma declaração de GUID e quatro membros de dados estáticos. Membros GUID e dados são definidos no final de PROJNAME.Arquivo CPP. A seguir está uma declaração de exemplo:
estático 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
Como esses membros de dados dependem de um GUID, você precisará primeiro gerar um novo GUID (GUIDGEN usando) e, em seguida, copiar e colar as cinco declarações de classe de dados inicial, diretamente abaixo. Depois de criar uma cópia, modificá-lo para usar o GUID recém-criado. Por exemplo, usando o exemplo de código anterior e gerar um novo GUID, o resultado para a segunda classe de dados seria da seguinte forma:
estático 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
Após essas modificações forem concluídas, há um passo à esquerda: modificando o arquivo de registro para o objeto snap-in.
O propósito da.Arquivo RGS é registrar o objeto snap-in e todos os seus componentes. Como adicionar uma classe de item de dados Personalizars, você precisará modificar o.Arquivo RGS para registrar essa classe também.
&Notanbsp; O GUID gerado na etapa anterior é usado nesta etapa.
Há duas áreas na.Você precisará modificar o arquivo RGS. Ambos podem ser encontrados rapidamente pesquisando a NodeTypes palavra-chave.
A primeira ocorrência é sob o NoRemove Snapins seção. Na aninhada NodeTypes seção, adicione o novo GUID imediatamente após o existente, usando o mesmo formato GUID como existente.
A segunda ocorrência é no NoRemove NodeTypes seção. Copiar o código encontrado nesta seção, colá-lo em imediatamente depois e alterar o GUID referenciado para o GUID da classe personalizada.
Isso conclui as modificações do snap-in do projeto. Após uma compilação bem-sucedida, você terá um novo tipo de item personalizado.