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
É 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. |
Começar um projeto usando o Assistente de controle ActiveX MFC.
clicar com o botão direito do mouse no nó da interface para o seu controle.
Isso abre o menu de atalho.
No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar propriedade.
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.
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.
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. |
Carregar projeto do controle.
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.
Carregar projeto do controle.
clicar com o botão direito do mouse no nó da interface para o seu controle.
Isso abre o menu de atalho.
No menu de atalho, clicar Adicionar e, em seguida, clicar Adicionar propriedade.
Digite o nome da propriedade no Nome da propriedade box.Use MyProp Neste exemplo.
selecionar um tipo de dados o Tipo da propriedade caixa de listagem drop-down.Use curto para esse exemplo.
For Tipo de implementação, clicar Obtém/define métodos.
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.
Clique em Finish.
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(); }
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.
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;
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); }
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;
Faça a seguinte linha a última linha na DoPropExchange função:
PX_String(pPX, _T("MyProp"), m_strText);
Modificar o OnResetState função para que ele contém o seguinte código:
COleControl::OnResetState(); // Resets defaults found in DoPropExchange m_strText = AmbientDisplayName();
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.