Etapa 6: Adicionar uma página de propriedade.

Páginas de propriedades são implementadas como objetos separados, permitir que as páginas de propriedade ser compartilhado se necessário. Para adicionar uma página de propriedades para o Controlarar, você pode usar o Assistente de objeto ATL.

Iniciar o Assistente de objeto ATL e selecione controles como a categoria do lado esquerdo. Selecionar Página de propriedades à direita e, em seguida, clique em seguinte.

Você começa novamente a caixa de diálogo permitindo que você insira o nome do novo objeto. Chamar o objeto PolyProp e digite esse nome na caixa de edição Nome curto.

Observe que a caixa de edição Interface é cinzento. Isso ocorre porque uma página de propriedades não precisa de uma interface Personalizar.

Clique na guia seqüências de caracteres para definir o título da página de propriedades. O título da página de propriedades é a Cadeia de caracteres que aparece na guia da página. Digite amp;Polígono como o título. &A Cadeia de caracteres Doc é uma descrição de um quadro de propriedade usa para colocar em uma dica de linha ou a ferramenta de status. Observe que o quadro de propriedade padrão no momento não usa essa Cadeia de caracteres, mas você pode configurá-lo de qualquer maneira. Você não vai gerar um Helpfile no momento, então apagar a entrada nessa caixa de texto. Clique em OK e a propriedade página objeto será criado.

São criados três arquivos a seguir:

Arquivo Descrição
Polyprop. H Contém a classe do C++ CPolyProp , que implementa a página de propriedade.
Polyprop. cpp Inclui o arquivo PolyProp. H.
Polyprop. RGS O script de Registro registra o objeto de página de propriedade.

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

Agora, adicione os campos que você deseja que apareça na página de propriedades. Observe que em Polygon.rc a caixa de diálogo é vazio, exceto para um rótulo que diz a você para inserir seus controles aqui. Excluir esse rótulo e adicionar um que contém o texto "lados:". Próximo ao rótulo adicionar uma caixa de edição e dê a ele uma identificação deIDC_SIDES.

Incluir Polygon.h na parte superior do arquivo PolyProp. H:

# i&nclude "Polygon.h"nbsp; / / definição de IPolyCtl

Agora activar o CPolyProp classe para definir o número de lados em seu objeto quando o botão aplicar é pressionado. Alterar o Apply função em Polyprop. H da seguinte maneira.

STDMETHOD(Apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   para (UINT I = 0; i lt; m_nObjects; i + +)
   {
      CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
      curta-nSides = (short)GetDlgItemInt(IDC_SIDES);
      se falhou (pPoly - > put_Sides(nSides))
      {
         PError CComPtr <IErrorInfo>;
         CComBSTR strError;
         GetErrorInfo (0, & pError);
         pError - > GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         retornar E_FAIL;
      }
   }
   m_bDirty = FALSE;
   retornar S_OK;
}

Uma página de propriedade poderia ter mais de um cliente anexado a ele ao mesmo tempo, para que o Apply função faz um loop em torno e chamadas put_Sides em cada cliente com o valor obtido na caixa Editar. Você está usando CComQIPtr classe, que executa o QueryInterface em cada objeto para obter o IPolyCtl interface de IUnknown (armazenado na m_ppUnk matriz).

O código agora verifica que a configuração a propriedade de lados realmente funcionou. Se ele falhar, o código exibe uma caixa de mensagem exibindo detalhes do erro da interface IErrorInfo . Normalmente, um contêiner solicita um objeto para a interface de ISupportErrorInfo e chama InterfaceSupportsErrorInfo primeiro, para determinar se o objeto oferece suporte a informações de erro de configuração. Mas desde que é seu controle, você pode renunciar a essa verificação.

CComPtr ajudará por automaticamente Manipulação a referência contagem, portanto você não precisará chamar Release sobre a interface. CComBSTR ajuda com BSTR processar, assim você não precisa executar o final chamar SysFreeString . Você também usa uma das várias classes de conversão de Cadeia de caracteres, assim você pode converter o BSTR se necessário (é por isso vamos adicionar a macro USES_CONVERSION no início da função).

Você também deve definir o sinalizador sujo da página de propriedades para indicar que o botão aplicar deve ser habilitado. Isso ocorre quando o usuário altera o valor na caixa de editar os lados. Botão direito do mouse a classe de página propriedade (CPolyProp) no ClassView e, em seguida, selecione Add Windows Mensagem Handler... de menu.nbsp de atalho; Selecione IDC_SIDES na caixa objeto e, em seguida, adicionar a mensagem E&N_CHANGE.

Agora adicione o seguinte código em Polyprop. h para o OnChangeSides função (excluindo qualquer código que o assistente colocar lá):

 LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   return 0;
}

OnChangeSidesserá chamado quando uma mensagem WM_COMMAND é enviada com a notificação de EN_CHANGE para o IDC_SIDES control. OnChangeSides , em seguida, chama SetDirty e passa verdadeiro para indicar a página propriedade agora está suja e deve ser habilitado o botão aplicar.

Agora, adicione a página de propriedades para seu controle. O Assistente de objeto ATL não faz isso para você automaticamente, desde que pode haver Múltiplo controles em seu projeto. Abrir PolyCtl. H e adicionar esta linha para o mapa de propriedade.:

   PROP_ENTRY ("lados", 1, CLSID_PolyProp)

Mapa de propriedade do Controlarar agora se parece com isso:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   PROP_ENTRY ("lados", 1, CLSID_PolyProp)
   / / Entradas de exemplo
   / / PROP_ENTRY ("Descrição da propriedade", dispid, clsid)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Você poderia ter adicionado um PROP_PAGE macro com o CLSID da página propriedade, mas se você usar o PROP_ENTRY macro como mostrado, os lados valor da propriedade também é salvas quando o Controlarar for salvo. Os três parâmetros para a macro são a descrição da propriedade, o DISPID da propriedade e o CLSID da página de propriedade que tenha a propriedade sobre ele. Isso é útil se, por exemplo, carregar o controle no Visual Basic e definir o número de lados em tempo de design. Uma vez que o número de lados é salvo, quando você recarregar seu projeto Visual Basic, que o número de lados será restaurado.

Agora construir esse Controlarar e inseri-lo no Controlarar ActiveX teste recipiente. No Contêiner de teste, clique no menu Editar em Objeto de classe PolyCtl. A página de propriedade é exibida; escolheu a guia de polígono.

O botão aplicar inicialmente está desativado. Caixa de edição de iniciar digitar um valor em ambos os lados e vai tornar-se habilitado o botão Aplicar. Depois que você tiver terminado de inserir o valor, clique no botão aplicar . As alterações de exibição de controle e o botão aplicar novamente está desabilitado. Tente digitar um valor inválido e você deverá ver uma caixa de mensagem que contém a descrição de erro que você definir a partir do put_Sides função.

Em seguida você vai colocar o Controlarar em uma página da Web.

Voltar para a etapa 5 |nbsp; A etapa 7

Index