Controlli ActiveX MFC: Utilizzando l'associazione dati in un controllo ActiveX

Uno degli scopi più importanti dei controlli ActiveX rappresenta l'associazione dati, che consente una proprietà del controllo sull'associazione con un campo specifico in un database.Quando un utente modifica i dati nella rispettiva proprietà, il controllo notifica al database e richiede che il campo del nuovo record sia aggiornato.Il database verrà quindi notifica al controllo dell'esito positivo o negativo della richiesta.

In questo articolo riguarda il lato del controllo dell'attività.Implementare le interazioni dell'associazione dati con il database è responsabilità del contenitore di controlli.Come gestire le interazioni del database nel contenitore non rientra nell'ambito della presente documentazione.Come preparato il controllo per l'associazione dati è descritto nella parte restante di questo articolo.

Diagramma concettuale di un controllo associato a dati

Controllo associato ai dati

La classe di COleControl vengono fornite due funzioni membro che consentono all'associazione dati in un processo semplice per implementare.La prima funzione, BoundPropertyRequestEdit, viene utilizzata per richiedere l'autorizzazione a modificare il valore della proprietà.BoundPropertyChanged, la seconda funzione, viene chiamato dopo che il valore della proprietà è stata modificata correttamente.

Questo articolo vengono trattati i seguenti argomenti:

  • Creare una proprietà predefinita associabile

  • Creazione di un associabile ottenere o impostare il metodo

Creare una proprietà predefinita associabile

È possibile creare una proprietà predefinita con associazione a dati, ma è più probabile che risaltino associabile ottenere o impostare il metodo.

[!NOTA]

Le proprietà predefinite presentano gli attributi di requestedit e di bindable per impostazione predefinita.

Per aggiungere una proprietà predefinita associabile tramite l'aggiunta guidata proprietà

  1. Inizia un progetto utilizzando Creazione guidata controllo ActiveX MFC.

  2. Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia per il controllo.

    Verrà visualizzato il menu di scelta rapida.

  3. Dal menu di scelta rapida, fare clic Aggiungi quindi fare clic su Aggiungi proprietà.

  4. Selezionare una delle voci dall'elenco a discesa di ProprietàNome .Ad esempio, è possibile selezionare Testo.

    Poiché Testo è una proprietà predefinita, gli attributi di requestedit e di bindable già selezionate.

  5. Selezionare le caselle di controllo dalla scheda di IDL Attributes : displaybind e defaultbind per aggiungere attributi alla definizione della proprietà nel file .IDL del progetto.Questi attributi rendono il controllo visibile all'utente e producono alla proprietà predefinita la proprietà associabile predefinita.

In questa fase, il controllo consente di visualizzare i dati da un'origine dati, ma non sarà possibile aggiornare i campi dati.Se si desidera che il controllo anche per aggiornare i dati, modificare la funzione di OnOcmCommandOnOcmCommand per essere simile al seguente:

#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;

È ora possibile compilare il progetto, che registrerà il controllo.Quando si inserisce il controllo in una finestra di dialogo, le proprietà Origine dati e di Data Field è verranno aggiunte e sarà possibile selezionare un'origine dati e un campo visualizzato nel controllo.

Creazione di un associabile ottenere o impostare il metodo

Oltre a un tipo con associazione a dati ottenere o impostare il metodo, è anche possibile creare proprietà predefinita associabile.

[!NOTA]

Questa procedura si presuppone che dispone di un progetto di controllo ActiveX che rappresenta una sottoclasse di un controllo Windows.

Per aggiungere un associabile ottenere/impostare il metodo utilizzando l'aggiunta guidata proprietà

  1. Caricare il progetto del controllo.

  2. Nella pagina di Control Settings , selezionare una classe della finestra per il controllo di una sottoclasse.Ad esempio, è possibile decidere di una sottoclasse un controllo di modifica.

  3. Caricare il progetto del controllo.

  4. Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia per il controllo.

    Verrà visualizzato il menu di scelta rapida.

  5. Dal menu di scelta rapida, fare clic Aggiungi quindi fare clic su Aggiungi proprietà.

  6. Digitare il nome della proprietà nella casella di Property Name .Utilizzare MyProp per questo esempio.

  7. Selezionare un tipo di dati dall'elenco a discesa di Property Type .Utilizzo short per questo esempio.

  8. Per Implementation Type, fare clic Get/Set Methods.

  9. Selezionare le caselle di controllo dalla scheda di attributi IDL: bindable, requestedit, displaybinde defaultbind per aggiungere attributi alla definizione della proprietà nel file .IDL del progetto.Questi attributi rendono il controllo visibile all'utente e producono alla proprietà predefinita la proprietà associabile predefinita.

  10. Fare clic su Fine.

  11. Modificare il corpo della funzione di SetMyProp in modo che contenga il seguente codice:

    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. Il parametro passato alle funzioni di BoundPropertyRequestEdit e di BoundPropertyChanged è il dispid della proprietà, che è il parametro passato all'attributo di identificazione () per la proprietà nel file .IDL.

  13. Modificare la funzione di OnOcmCommand in modo che contiene il codice seguente:

    #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. Modificare la funzione di OnDraw in modo che contenga il seguente codice:

    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. Nella sezione pubblica del file di intestazione il file di intestazione per la classe del controllo, aggiungere le definizioni seguenti (costruttori) per le variabili membro:

    CString m_strText;
    short m_nMyNum;
    
  16. Rendere alla riga seguente l'ultima riga in DoPropExchange eseguire:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Modificare la funzione di OnResetState in modo che contenga il seguente codice:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. Modificare la funzione di GetMyProp in modo che contenga il seguente codice:

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

È ora possibile compilare il progetto, che registrerà il controllo.Quando si inserisce il controllo in una finestra di dialogo, le proprietà Origine dati e di Data Field è verranno aggiunte e sarà possibile selezionare un'origine dati e un campo visualizzato nel controllo.

Vedere anche

Riferimenti

Controlli associati a dati (ADO e RDO)

Concetti

Controlli ActiveX MFC