Etapa 6: Adicionando uma página propriedade
propriedade páginas são implementadas sistema autônomo objetos separados COM, permitindo que o seja compartilhado se necessário.Nesta etapa, você fará as seguintes tarefas para adicionar um página de propriedades ao controle:
Criando o recurso de página de propriedades
Adicionando código para criar e gerenciar o página de propriedades
Adicionando o página de propriedades ao controle
Criando o recurso de página de propriedades
Para adicionar um página de propriedades seu controle, use o Assistente para adicionar classe do ATL.
Para adicionar uma página propriedade
No gerenciador de soluções, clicar com o botão direito do mouse polígono.
No menu de atalho, clicar Adicionare, em seguida, clicar Adicionar classe.
Na lista de modelos, selecionar Página de propriedades do ATL e clicar Adicionar.
Quando o Assistente de página de propriedades da ATL é exibida, digite PolyProp sistema autônomo o Short nome.
clicar Seqüências de caracteres para em em aberto o Seqüências de caracteres de página e digite &Polygon sistema autônomo o Título.
The Título do página de propriedades é a seqüência de caracteres que aparece na guia da página.The Seqüência de caracteres de doc é uma descrição que usa um quadro de propriedade para colocar em uma dica de ferramenta ou linha de status.Observe que o quadro de propriedade padrão atualmente não usa essa seqüência de caracteres, portanto, você pode deixá-lo com o Sumário padrão.Você não irá gerar um Arquivo de ajuda no momento, portanto, exclua a entrada nessa caixa de texto.
clicar Concluir e o objeto de página de propriedades serão criado.
São criados três arquivos a seguintes:
File |
Descrição |
---|---|
PolyProp.h |
Contém a classe de C++ CPolyProp, que implementa o página de propriedades. |
PolyProp.cpp |
Inclui o arquivo PolyProp.h. |
PolyProp.rgs |
O script de registro registra o objeto de página de propriedades. |
As seguintes alterações de código também são feitas:
A nova página de propriedades é adicionada ao MAP de entrada de objeto no Polygon.cpp.
The PolyProp classe é adicionada ao arquivo Polygon.idl.
O novo arquivo de script do registro PolyProp.rgs é adicionado para o recurso de projeto.
Um modelo de caixa de diálogo é adicionado ao recurso de projeto para o página de propriedades.
As seqüências de caracteres da propriedade que você especificou são adicionadas à tabela de seqüência de caracteres de recursos.
Agora, adicione os campos que você deseja que apareça no página de propriedades.
Para adicionar campos à página propriedade
No gerenciador de soluções, clicar duas vezes no arquivo de recurso Polygon.rc.Isso abrirá o modo de exibição de recurso.
No modo de exibição de recurso, expandir o nó caixa de diálogo e clicar duas vezes IDD_POLYPROP.Observe que a caixa de diálogo que aparece vazia, exceto para um rótulo que informa que você insira aqui seus controles.
selecionar esse rótulo e alterar para ler Sides: alterando o Legenda texto a Propriedades janela e redimensionar a caixa Rótulo.
arrastar um controle de edição da caixa de ferramentas à direita do rótulo.
Por fim, altere o ID do o controle de ediçãoIDC_SIDES usando a janela Propriedades.
Isso conclui o processo de criação do recurso da página de propriedades.
Adicionando código para criar e gerenciar o página de propriedades
Agora que você criou o recurso de página de propriedades, você precisa escrever o código de implementação.
Primeiro, ative o CPolyProp classe para conjunto o número de lados em seu objeto quando o Aplicar botão é pressionado.
Para modificar a função aplicar para conjunto o número de lados
Alterar o Apply função PolyProp.h da seguinte maneira:
STDMETHOD(Apply)(void) { USES_CONVERSION; ATLTRACE(_T("CPolyProp::Apply\n")); for (UINT i = 0; i < m_nObjects; i++) { CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]); short nSides = (short)GetDlgItemInt(IDC_SIDES); if FAILED(pPoly->put_Sides(nSides)) { CComPtr<IErrorInfo> pError; CComBSTR strError; GetErrorInfo(0, &pError); pError->GetDescription(&strError); MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION); return E_FAIL; } } m_bDirty = FALSE; return S_OK; }
Uma página de propriedades pode ter mais de um cliente anexado a ele por vez, portanto, a Apply função loops ao redor e chamadas put_Sides em cada cliente com o valor recuperado da caixa de edição. Você está usando o CComQIPtr classe, que executa o QueryInterface em cada objeto para obter o IPolyCtl interface dos IUnknown interface (armazenado no m_ppUnk matriz).
Agora, o código verifica essa configuração de Sides propriedade realmente trabalha. Se ele falhar, o código exibe uma caixa de mensagem exibindo detalhes do erro do IErrorInfo interface.Normalmente, um contêiner solicita um objeto o ISupportErrorInfo interface e chamadas de InterfaceSupportsErrorInfo primeiro, para determinar se o objeto oferece suporte a informações de erro de configuração. Você pode ignorar esta tarefa.
CComPtr ajuda você a manipulando automaticamente a referência de contagem, portanto, você não precisa chamar Versão na interface.CComBSTR ajuda você a com BSTR processamento, para que não precisem executar a final SysFreeString telefonar.Você também usar um das várias classes de conversão de seqüência de caracteres para que você pode converter o BSTR Se necessário (é por isso que o USES_CONVERSION macro é no início da função).
Você também precise conjunto dirty sinalizar da página de propriedades para indicar que o Aplicar botão deve ser ativada.Isso ocorre quando o usuário altera o valor no Lados caixa de edição.
Para lidar com o botão Aplicar
Em classe View, clicar com o botão direito do mouse em CPolyProp e clique em Propriedades no menu de atalho.
Na janela Propriedades, clicar no Eventos ícone.
expandir o IDC_SIDES nó listar além de eventos.
selecionar EN_CHANGEe a partir do menu suspenso à direita, clicar <add>OnEnChangeSides.The OnEnChangeSides declaração do manipulador será adicionada ao Polyprop.h e a implementação do manipulador para Polyprop.cpp.
Em seguida, você modificará o manipulador.
Para modificar o método OnEnChangeSides
Adicione o seguinte código no Polyprop.cpp à OnEnChangeSides método (excluindo qualquer código que o assistente coloca lá):
LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { SetDirty(TRUE); return 0; }
OnEnChangeSides será chamado quando um WM_COMMAND mensagem é enviada com o EN_CHANGE notificação de a IDC_SIDES controle. OnEnChangeSides em seguida, chama SetDirty e passagens TRUE para indicar o página de propriedades agora está com problemas e o Aplicar botão deve ser ativada.
Adicionando o página de propriedades ao controle
O Assistente para adicionar classe do ATL e o Assistente de página de propriedade ATL não adicione a página de propriedades para o controle para você automaticamente, porque pode haver vários controles em seu projeto.Você precisará adicionar uma entrada para o MAP de propriedade do controle.
Para adicionar o propriedade página
Abra PolyCtl.h e adicione esta linha para o MAP de propriedade:
PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
Agora, o MAP de propriedade do controle é semelhante a:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
Você poderia ter adicionado um PROP_PAGE macro com o CLSID de sua página de propriedades, mas se você usar o PROP_ENTRY macro, sistema autônomo mostrado, o Sides o valor da propriedade também é salvas quando o controle for salvo.
Os três parâmetros para a macro são a descrição da propriedade, DISPID da propriedade e o CLSID da página de propriedades tem a propriedade nele.Isso é útil se, por exemplo, você pode carregar o controle no Visual Basic e conjunto o número de lados em time de design.Como o número de lados é salvo, quando você recarregar o projeto Visual Basic, o número de lados será restaurado.
Criando e testando o controle
Agora crie esse controle e insira-o no contêiner de teste do controle ActiveX.No contêiner de teste, sobre o edição menu, clicar Objeto da classe PolyCtl.A página de propriedades é exibida; clicar no Polígono guia.
The Aplicar botão inicialmente é desabilitado.Comece a digitar um valor no Lados caixa e o Aplicar botão irá se tornar habilitado.Após terminar de inserir o valor, clicar no Aplicar botão.As alterações de exibição de controle e o Aplicar botão novamente desabilitado.Tente digitar um valor inválido.Você verá uma caixa de mensagem que contém a descrição do erro que você conjunto a partir de put_Sides função.
Em seguida, você colocará seu controle em uma página da Web.
Voltar para etapa 5 | A etapa 7