Os controles ActiveX MFC: Usando vinculação de dados em um controle ActiveX

Um dos usos mais poderosos de controles ActiveX é a vinculação de dados, que permite que uma propriedade do controle para BIND com um campo específico em um banco de dados.Quando um usuário modifica dados nesta propriedade limite, o controle notifica o banco de dados e as solicitações 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 vinculação de dados com o banco de dados é de responsabilidade do contêiner de controle.Como gerenciar as interações de banco de dados no 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 de dados-limite

The COleControl classe fornece duas funções de membro que compõem um processo fácil para implementar a 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 Bindable Stock

  • Criar um método Get/conjunto Bindable

Criando uma propriedade Bindable Stock

É possível criar uma propriedade de ações com dados vinculados, embora é mais provável que você desejará um método vinculáveis get/conjunto..

Observação:

Propriedades de ações têm a vinculável and requestedit atributos por padrão.

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

  1. Começar um projeto usando o Assistente de controle ActiveX MFC.

  2. clicar com o botão direito do mouse no nó da interface para o seu controle.

    Isso abre o menu de atalho.

  3. No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar propriedade.

  4. Select one of the entries from the Property Name drop-down list.Por exemplo, você pode selecionar Texto.

    Porque Texto é uma propriedade de ações, a vinculável and requestedit atributos já são verificados.

  5. Marque as caixas de seleção seguintes from a Atributos IDL guia: displaybind and defaultbind para adicionar os atributos a definição da propriedade no arquivo .IDL do projeto.Esses atributos tornar visíveis ao usuário o controle e verifique a propriedade das ações a propriedade ligável padrão.

Neste ponto, o controle pode exibir dados de uma fonte de dados, mas o usuário não poderá para atualização campos de dados.If you want your control to also be able to update data, change the OnOcmCommand OnOcmCommand function to look as follows:

#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 construir o projeto, que registrará o controle.Quando você insere o controle em uma caixa de diálogo, a Campo de dados and Fonte de dados propriedades serão tiverem sido adicionadas e agora você pode selecionar uma fonte de dados e o campo a ser exibido no controle.

Criar um método Get/conjunto Bindable

Juntamente com um limite a dados método get/conjunto, você também pode criar um propriedade ações vinculável.

Observação:

Este procedimento assume que você tem um ActiveX projeto de controle ActiveX que controlam um Windows subclasses.

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

  1. Carregar projeto do controle.

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

  3. Carregar projeto do controle.

  4. clicar com o botão direito do mouse no nó da interface para o seu controle.

    Isso abre o menu de atalho.

  5. No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar propriedade.

  6. Digite o nome da propriedade no Nome da propriedade box.Use MyProp Neste exemplo.

  7. selecionar um tipo de dados o Tipo da propriedade caixa de listagem drop-down.Use curto para esse exemplo.

  8. For Tipo de implementação, clicar Obtém/define métodos.

  9. selecionar as seguintes caixas de seleção na guia atributos IDL: vinculável, requestedit, displaybind, and defaultbind para adicionar os atributos a definição da propriedade no arquivo .IDL do projeto.Esses atributos tornar visíveis ao usuário o controle e verifique a propriedade das ações a propriedade ligável padrão.

  10. Clique em Finish.

  11. Modificar o corpo do SetMyProp função para que ele contém 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 no arquivo .idl.

  13. Modificar o OnOcmCommand função para que ele contém 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 ele contém 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. Faça a seguinte linha a última linha na DoPropExchange função:

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

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

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

Agora você pode construir o projeto, que registrará o controle.Quando você insere o controle em uma caixa de diálogo, a Campo de dados and Fonte de dados propriedades serão tiverem sido adicionadas e agora você pode selecionar uma fonte de dados e o campo a ser exibido no controle.

Consulte também

Conceitos

Controles do ActiveX MFC

Referência

Controles de dados-Ligado (ADO e RDO)