Adicionando uma propriedade ao controle (Tutorial ATL, parte 3)

IPolyCtl é a interface que contém os métodos e propriedades personalizados do controle e você adicionará uma propriedade a ela.

Para adicionar as definições de propriedade ao seu projeto

  1. No Modo de Exibição de Classe, expanda o branch Polygon.

  2. Clique com o botão direito do mouse em IPolyCtl.

  3. No menu de atalho, clique em Adicionar e, em seguida, em Adicionar Propriedade. O assistente Adicionar Propriedade será exibido.

  4. Digite Sides como o Nome da Propriedade.

  5. Na lista suspensa de Tipo de Propriedade, selecione short.

  6. Clique em OK para terminar de adicionar a propriedade.

  7. Em Gerenciador de Soluções, abra Polygon.idl e substitua as seguintes linhas no final da interface IPolyCtl : IDispatch:

    short get_Sides();
    void set_Sides(short value);
    

    por

    [propget, id(1), helpstring("property Sides")] HRESULT Sides([out, retval] short *pVal);
    [propput, id(1), helpstring("property Sides")] HRESULT Sides([in] short newVal);
    
  8. Em Gerenciador de Soluções, abra PolyCtl.h e adicione as seguintes linhas após a definição de m_clrFillColor:

    short m_nSides;
    STDMETHOD(get_Sides)(short* pval);
    STDMETHOD(put_Sides)(short newval);
    

Embora agora você tenha funções estruturais para definir e recuperar a propriedade e uma variável para armazenar a propriedade, você deve implementar as funções adequadamente.

Para atualizar os métodos get e put

  1. Defina o valor padrão de m_nSides. Torne a forma padrão um triângulo adicionando uma linha ao construtor em PolyCtl.h:

    m_nSides = 3;
    
  2. Implemente os métodos Get e Put. As declarações da função get_Sides e put_Sides foram adicionadas ao PolyCtl.h. Agora, adicione o código para get_Sides e put_Sides ao PolyCtl.cpp com o seguinte:

    STDMETHODIMP CPolyCtl::get_Sides(short* pVal)
    {
       *pVal = m_nSides;
    
       return S_OK;
    }
    
    STDMETHODIMP CPolyCtl::put_Sides(short newVal)
    {
       if (2 < newVal && newVal < 101)
       {
          m_nSides = newVal;
          return S_OK;
       }
       else
       {
          return Error(_T("Shape must have between 3 and 100 sides"));
       }
    }
    

O método get_Sides retorna o valor atual da propriedade Sides por meio do ponteiro pVal. No método put_Sides, o código garante que o usuário esteja definindo a propriedade Sides como um valor aceitável. O mínimo deve ser 3 e, como uma matriz de pontos será usada para cada lado, 100 é um limite razoável para um valor máximo.

Agora você tem uma propriedade chamada Sides. Na próxima etapa, você alterará o código de desenho para usá-lo.

Voltar para a Etapa 2 | Na Etapa 4

Confira também

Tutorial