Compartilhar via


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

  1. No gerenciador de soluções, clicar com o botão direito do mouse polígono.

  2. No menu de atalho, clicar Adicionare, em seguida, clicar Adicionar classe.

  3. Na lista de modelos, selecionar Página de propriedades do ATL e clicar Adicionar.

  4. Quando o Assistente de página de propriedades da ATL é exibida, digite PolyProp sistema autônomo o Short nome.

  5. 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.

  6. 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

  1. No gerenciador de soluções, clicar duas vezes no arquivo de recurso Polygon.rc.Isso abrirá o modo de exibição de recurso.

  2. 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.

  3. selecionar esse rótulo e alterar para ler Sides: alterando o Legenda texto a Propriedades janela e redimensionar a caixa Rótulo.

  4. arrastar um controle de edição da caixa de ferramentas à direita do rótulo.

  5. 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

  1. Em classe View, clicar com o botão direito do mouse em CPolyProp e clique em Propriedades no menu de atalho.

  2. Na janela Propriedades, clicar no Eventos ícone.

  3. expandir o IDC_SIDES nó listar além de eventos.

  4. 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

Consulte também

Referência

Tutorial do ATL