Compartilhar via


Controles de ActiveX MFC: Usando ligação de dados em um controle ActiveX

Um dos usos mais poderosos controles de ActiveX é a vinculação de dados, que permite que uma propriedade do controle para vincular a um campo específico em um banco de dados.Quando um usuário modifica dados nesta propriedade acoplado, o controle notifica o banco de dados e solicita que o campo de registro seja atualizado.O banco de dados, em seguida, notifica o controle do sucesso ou falha da solicitação.

Este artigo aborda o lado do controle de sua tarefa.Implementar as interações de ligação de dados com o banco de dados é de responsabilidade do contêiner de controle.Como gerenciar as interações do banco de dados em seu contêiner está além do escopo desta documentação.Como preparar o controle de vinculação de dados é explicado no restante deste artigo.

Diagrama conceitual de um controle vinculado a dados

Controle associado a dados

O COleControl classe fornece duas funções de membro que compõem um processo fácil de implementar de vinculação de dados.A primeira função, BoundPropertyRequestEdit, usado para solicitar permissão para alterar o valor da propriedade.BoundPropertyChanged, a segunda função é chamado depois que o valor da propriedade foi alterado com êxito.

Este artigo aborda os seguintes tópicos:

  • Criando uma propriedade ligável Stock

  • Criando um método Get/Set vinculável

Criando uma propriedade ligável Stock

É possível criar uma propriedade de ações ligados a dados, embora seja mais provável que você queira um método get/set vinculáveis.

ObservaçãoObservação

As propriedades de ações de vinculáveis e requestedit atributos por padrão.

Para adicionar uma propriedade ligável de ações usando o Assistente para adicionar propriedade

  1. Iniciar um projeto usando o Assistente de controle MFC ActiveX.

  2. Clique com o botão direito no nó de interface para o seu controle.

    Isso abre o menu de atalho.

  3. No menu de atalho, clique em Add e clique em Adicionar propriedade de.

  4. Selecione uma das entradas do propriedadenome na lista suspensa.Por exemplo, você pode selecionar texto.

    Porque texto é uma propriedade de ações, o vinculáveis e requestedit atributos já são verificados.

  5. Marque as seguintes caixas de seleção do Atributos IDL guia: displaybind e defaultbind para adicionar atributos a definição da propriedade do projeto.Arquivo IDL.Esses atributos tornam visível ao usuário o controle e tornam a propriedade de ações de propriedade ligável.

Neste ponto, o controle pode exibir dados de uma fonte de dados, mas o usuário não poderá atualizar os campos de dados.Se você deseja o controle também é possível atualizar os dados, altere o OnOcmCommandOnOcmCommand função para ter a seguinte aparência:

#ifdef _WIN32
   WORD wNotifyCode = HIWORD(wParam);
#else
   WORD wNotifyCode = HIWORD(lParam);
#endif

   if(wNotifyCode==EN_CHANGE)
   {
      if(!BoundPropertyRequestEdit(DISPID_TEXT))
      {
         SetNotSupported();
      }
      else
      {
         GetText();
         // Notify container of change
         BoundPropertyChanged(DISPID_TEXT);
      }
   }

   return 0;

Agora você pode criar o projeto, que irá registrar o controle.Quando você insere o controle em uma caixa de diálogo, o Campo de dados e Fonte de dados propriedades serão adicionadas e agora você pode selecionar uma fonte de dados e o campo para exibir no controle.

Criando um método Get/Set vinculável

Com um data-bound método get/set, você também pode criar uma propriedade ligável ações.

ObservaçãoObservação

Este procedimento supõe que você tem um controle de ActiveX projeto que subclasses um controle do Windows.

Para adicionar um método get/set vinculáveis usando o Assistente para adicionar propriedade

  1. Carregar projeto do controle.

  2. Sobre o Configurações de controle de , selecione uma classe de janela para o controle de subclasse.Por exemplo, convém subclasse um controle de edição.

  3. Carregar projeto do controle.

  4. Clique com o botão direito no nó de interface para o seu controle.

    Isso abre o menu de atalho.

  5. No menu de atalho, clique em Add e clique em Adicionar propriedade de.

  6. Digite o nome da propriedade de O nome da propriedade caixa.Use MyProp para esse exemplo.

  7. Selecione um tipo de dados da Um tipo de propriedade caixa de listagem suspensa.Use curto para esse exemplo.

  8. Para O tipo de implementação, clique Métodos Get/Set.

  9. Selecionar as seguintes caixas de seleção na guia Atributos IDL: vinculáveis, requestedit, displaybind, e defaultbind para adicionar atributos a definição da propriedade do projeto.Arquivo IDL.Esses atributos tornam visível ao usuário o controle e tornam a propriedade de ações de propriedade ligável.

  10. Clique em Concluir.

  11. Modificar o corpo da SetMyProp função para que contenha o seguinte código:

    if(!BoundPropertyRequestEdit(1))
    {
       SetNotSupported();
       return;
    }
    else
    {
       if(AmbientUserMode()) // SendMessage only at run-time
       {
          _stprintf_s(m_strText.GetBuffer(10), 10, _T("%d"), newVal);
          SetWindowText(m_strText);
          m_strText.ReleaseBuffer();
       }
       else
       {
          InvalidateControl();
       }
    
       // Signal a property change
       // This is the MFC equivalent of OnChanged()
       BoundPropertyChanged(1);
       SetModifiedFlag();
    }
    
  12. O parâmetro passado para o BoundPropertyChanged e BoundPropertyRequestEdit funções é dispid da propriedade, que é o parâmetro passado para o atributo id() para a propriedade na.Arquivo IDL.

  13. Modificar o OnOcmCommand função para que contenha o seguinte código:

    #ifdef _WIN32
       WORD wNotifyCode = HIWORD(wParam);
    #else
       WORD wNotifyCode = HIWORD(lParam);
    #endif
    
       if(wNotifyCode==EN_CHANGE)
       {
          if(!BoundPropertyRequestEdit(DISPID_TEXT))
          {
             SetNotSupported();
          }
          else
          {
             GetText();
             // Notify container of change
             BoundPropertyChanged(DISPID_TEXT);
          }
       }
    
       return 0;
    
  14. Modificar o OnDraw função para que contenha o seguinte código:

    if(!AmbientUserMode())
    {
       // Draw the Text property at design-time
       pdc->FillRect(rcBounds, 
          CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
       pdc->DrawText(m_strText, -1, (LPRECT)&rcBounds, 
          DT_LEFT | DT_TOP | DT_SINGLELINE);
    }
    else
    {
       DoSuperclassPaint(pdc, rcBounds);
    }
    
  15. A seção pública do arquivo de cabeçalho do arquivo de cabeçalho para sua classe de controle, adicione as seguintes definições (construtores) para as variáveis de membro:

    CString m_strText;
    short m_nMyNum;
    
  16. Verifique a seguinte linha na última linha do DoPropExchange função:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Modificar o OnResetState função para que contenha o seguinte código:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. Modificar o GetMyProp função para que contenha o seguinte código:

    if(AmbientUserMode())
    {
       GetWindowText(m_strText);
       m_nMyNum = (short)_ttoi(m_strText);
    }
    return m_nMyNum;
    

Agora você pode criar o projeto, que irá registrar o controle.Quando você insere o controle em uma caixa de diálogo, o Campo de dados e Fonte de dados propriedades serão adicionadas e agora você pode selecionar uma fonte de dados e o campo para exibir no controle.

Consulte também

Referência

Controles ligados a dados (ADO e RDO)

Conceitos

Controles de ActiveX do MFC