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
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çã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
Iniciar um projeto usando o Assistente de controle MFC ActiveX.
Clique com o botão direito no nó de interface para o seu controle.
Isso abre o menu de atalho.
No menu de atalho, clique em Add e clique em Adicionar propriedade de.
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.
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çã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
Carregar projeto do controle.
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.
Carregar projeto do controle.
Clique com o botão direito no nó de interface para o seu controle.
Isso abre o menu de atalho.
No menu de atalho, clique em Add e clique em Adicionar propriedade de.
Digite o nome da propriedade de O nome da propriedade caixa.Use MyProp para esse exemplo.
Selecione um tipo de dados da Um tipo de propriedade caixa de listagem suspensa.Use curto para esse exemplo.
Para O tipo de implementação, clique Métodos Get/Set.
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.
Clique em Concluir.
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(); }
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.
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;
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); }
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;
Verifique a seguinte linha na última linha do DoPropExchange função:
PX_String(pPX, _T("MyProp"), m_strText);
Modificar o OnResetState função para que contenha o seguinte código:
COleControl::OnResetState(); // Resets defaults found in DoPropExchange m_strText = AmbientDisplayName();
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)