Compartilhar via


Etapa 6: adicionando uma página de propriedades

As páginas de propriedades são implementadas como objetos COM separados, que permitem que sejam compartilhados se necessário.Em esta etapa, você irá realizar as seguintes tarefas adicionar uma página de propriedades para o controle:

  • Criando o recurso da página de propriedades

  • Adicionando código para criar e gerenciar a página de propriedades

  • Adicionando a página de propriedades para o controle

Criando o recurso da página de propriedades

Para adicionar uma página de propriedades para o controle, use o ATL adicione o assistente da classe.

Para adicionar uma página de propriedades

  1. Em o solution Explorer, clique com o botão direito do mouse polígono.

  2. Em o menu de atalho, clique Adicionar, clique em Adicionar Classe.

  3. Em a lista de modelos, de Página de Propriedades do ATL de Adicionarselecione e clique em.

  4. Quando o assistente da página de propriedades de ATL aparece, entre em PolyProp como o nome de Curto .

  5. Clique Cadeias de caracteres para abrir a página de Cadeias de caracteres e para entrar em &Polygon como Título.

    Título De a página de propriedades é a cadeia de caracteres que aparece na guia para a página.Cadeia de caracteres de Doc É uma descrição que um quadro de propriedade usa para colocar em uma linha de status ou em uma dica de ferramenta.Observe que o quadro de propriedade padrão atualmente não usa essa cadeia de caracteres, portanto você pode deixá-la com o conteúdo padrão.Você não irá gerar Arquivo de Ajuda em este ponto, portanto excluir entrada na caixa de texto.

  6. Clique Concluir, e o objeto da página de propriedades será criado.

Os três arquivos são criados:

File

Descrição

PolyProp.h

Contém a classe CPolyPropC++, que implementa a página de propriedades.

PolyProp.cpp

Inclui o arquivo de PolyProp.h.

PolyProp.rgs

O script de Registro que registra o objeto da página de propriedades.

As seguintes alterações de código são feitas também:

  • A nova página de propriedades é adicionada ao mapa de entrada de objeto em Polygon.cpp.

  • a classe de PolyProp é adicionada ao arquivo de Polygon.idl.

  • O novo arquivo de script PolyProp.rgs do Registro é adicionado ao recurso do projeto.

  • Um modelo da caixa de diálogo é adicionado ao recurso de projeto para a página de propriedades.

  • As cadeias de caracteres de propriedade que você especificou são adicionadas à tabela de cadeia de caracteres de recurso.

Agora adicione os campos que você deseja que apareça na página de propriedades.

Para adicionar campos para a página de propriedades

  1. Em o solution Explorer, clique duas vezes no arquivo de recurso de Polygon.rc.Isso abrirá o modo de recurso.

  2. Em o modo de recurso, expanda o nó da caixa de diálogo e clique duas vezes IDD_POLYPROP.Observe que a caixa de diálogo que aparece está vazia para a exceção de um rótulo que instrui o para inserir aqui seus controles.

  3. Selecione aquele rótulo e altere-o para ler lados: alterar o texto de Legenda na janela de Propriedades .

  4. Redimensionar a caixa do rótulo para que ele caiba o tamanho do texto.

  5. Arraste um controle de edição de caixa de ferramentas para a direita do rótulo.

  6. Finalmente, altere Identificação do controle de edição a IDC_SIDES usando a janela propriedades.

Isso conclui o processo de criar o recurso da página de propriedades.

Adicionando código para criar e gerenciar a página de propriedades

Agora que você criou o recurso da página de propriedades, você precisa escrever código de implementação.

Primeiro, ativar a classe de CPolyProp para definir o número de lados do seu objeto quando o botão de Aplicar é pressionada.

Para alterar aplicar a função para definir o número de lado

  • Função replace de Apply em PolyProp.h com o seguinte código:

    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 conectado a ela por vez, para que os loops de função de Apply ao redor e chama put_Sides em cada cliente com o valor recuperado da caixa de edição.Você estiver usando a classe de CComQIPtr , que executa QueryInterface em cada objeto para obter a interface de IPolyCtl de interface de IUnknown (armazenada na matriz de m_ppUnk ).

O código verifique que agora definir a propriedade de Sides funciona realmente.Se ele falhar, o código exibirá uma caixa de mensagem que exibe detalhes de erro de interface de IErrorInfo .Normalmente, um contêiner solicita um objeto a interface de ISupportErrorInfo e chama InterfaceSupportsErrorInfo primeiro, para determinar se o objeto suporta informações de erro de configuração.Você pode ignorar esta tarefa.

CComPtr automaticamente ajuda tratando a contagem de referência, então você não precisará chamar Release na interface.CComBSTR ajuda você com BSTR que processa, portanto você não precisa executar a chamada final de SysFreeString .Você também usa uma das várias classes de conversão de cadeia de caracteres, para que você pode converter BSTR se necessário (é por isso que a macro de USES_CONVERSION está no início da função).

Você também precisa definir o sinalizador sujo da página de propriedades para indicar que o botão de Aplicar deve ser ativado.Isso ocorre quando o usuário altera o valor na caixa de edição de Laterais .

Para manipular o botão aplicar

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

  2. Em a janela propriedades, clique no ícone de Eventos .

  3. Expanda o nó de IDC_SIDES na lista de eventos.

  4. EN_CHANGEselecione e, no menu suspenso à direita, clique em <Add> *** OnEnChangeSides.A declaração do manipulador de OnEnChangeSides será adicionada a Polyprop.h, e a implementação do manipulador a Polyprop.cpp.

Em seguida, você modificará o manipulador.

Para alterar o método de OnEnChangeSides

  • Adicione o seguinte código em Polyprop.cpp para o método de OnEnChangeSides (que exclui qualquer código que o assistente colocado lá):

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides será chamado quando uma mensagem de WM_COMMAND são enviadas com a notificação de EN_CHANGE para o controle de IDC_SIDES .OnEnChangeSides então chama SetDirty e passa TRUE para indicar a página de propriedades são agora sujas e o botão de Aplicar deve ser ativado.

Adicionando a página de propriedades para o controle

Os ATL adicione o assistente da classe e o assistente da página de propriedades de ATL não adiciona a página de propriedades para o controle automaticamente para você, porque pode haver vários controles em seu projeto.Você precisará adicionar uma entrada no mapa da propriedade do controle.

Para adicionar a página de propriedades

  • PolyCtl.h abertos e adiciona essa linha no mapa da propriedade:

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    

O mapa da propriedade do controle agora tem a seguinte aparência:

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ê pode adicionar uma macro de PROP_PAGE com o CLSID da página de propriedades, mas se você usar a macro de PROP_ENTRY como mostrado, o valor da propriedade de Sides é salvo também quando o controle é salvo.

Os três parâmetros para o macro são a descrição da propriedade, os DISPID de propriedade, e os CLSID da página de propriedades que possui a propriedade em ele.Isso é útil se, por exemplo, você carrega o controle no Visual Basic e define o número de lado em tempo de design.Como o número de lado é salvo, quando você recarrega seu projeto Visual Basic, o número de lados será restaurado.

Compilação e teste o controle

Agora compilar o controle e inseri-lo no contêiner de teste de controle ActiveX.Em o contêiner de teste, no menu de Editar , clique em Objeto da classe de PolyCtl.A página de propriedades é exibida; clique na guia de Polígono .

O botão de Aplicar é desativado inicialmente.Inicie digite um valor na caixa de Laterais e o botão de Aplicar será ativado.Após a conclusão de inserir o valor, clique no botão de Aplicar .A exibição do controle altera, e o botão de Aplicar é desativado novamente.Tente ao inserir um valor inválido.Você verá uma caixa de mensagem conter a descrição de erro que você defina a função de put_Sides .

Em seguida, você irá colocar o controle em uma página da Web.

De volta para a etapa 5 | a etapa 7

Consulte também

Referência

Tutorial de ATL