Condividi tramite


Aggiunta di una pagina di proprietà (Esercitazione di ATL, parte 6)

Le pagine delle proprietà vengono implementate come oggetti COM separati, che ne consentono di condividere su richiesta. In questo passaggio, effettuate le seguenti attività aggiungere una pagina delle proprietà al controllo:

  • Creare la risorsa della pagina delle proprietà

  • Aggiunta di codice per creare e gestire la pagina delle proprietà

  • Aggiungendo la pagina delle proprietà del controllo

Creare la risorsa della pagina delle proprietà

Per aggiungere una pagina delle proprietà al controllo, utilizzare ATL aggiunge la procedura guidata classe.

Per aggiungere una pagina delle proprietà

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul poligono.

  2. Scegliere Aggiungi dal menu di scelta rapida, quindi Aggiungi classe.

  3. Nell'elenco di modelli, Pagina delle proprietà ATL selezionare e fare clic Aggiungi.

  4. Quando la procedura guidata della pagina delle proprietà ATL, immettere PolyProp come nome short.

  5. Fare clic stringhe per aprire la pagina stringhe e per immettere &Polygon come Titolo.

    Titolo Della pagina delle proprietà è la stringa che verrà visualizzato nella scheda della pagina. Stringa del documento È una descrizione che una finestra proprietà utilizza per inserire in una riga o una descrizione comandi di stato. Si noti che la finestra proprietà standard attualmente non utilizza questa stringa, pertanto può lasciarlo con contenuto predefinito. Non si File della Guida al momento, in modo da eliminare la voce nella casella di testo.

  6. Fare clic Finee l'oggetto della pagina delle proprietà verrà creato.

Di seguito vengono creati tre file:

File

Descrizione

PolyProp.h

Contiene la classe CPolyPropC++, che implementa la pagina delle proprietà.

PolyProp.cpp

Include il file di PolyProp.h.

PolyProp.rgs

Lo script del Registro di sistema che registra l'oggetto della pagina delle proprietà.

Le seguenti modifiche al codice vengono effettuate:

  • La nuova pagina delle proprietà viene aggiunto alla voce dell'oggetto in Polygon.cpp.

  • La classe PolyProp viene aggiunto al file di Polygon.idl.

  • Il nuovo file di script PolyProp.rgs del Registro di sistema viene aggiunto alla risorsa di progetto.

  • Un modello di finestra di dialogo viene aggiunta alla risorsa di progetto per la pagina delle proprietà.

  • Le stringhe della proprietà specificate vengono aggiunte alla tabella di stringhe di risorsa.

Aggiungere i campi che si desidera visualizzare nella pagina delle proprietà.

Per aggiungere campi alla pagina delle proprietà

  1. In Esplora soluzioni, fare doppio clic sul file di risorse di Polygon.rc. Verrà aperta la Visualizzazione risorse.

  2. In Visualizzazione risorse, espandere il nodo della finestra di dialogo e fare doppio clic IDD_POLYPROP. Si noti che la finestra di dialogo è vuota a eccezione di un'etichetta che indica di inserire i controlli di seguito.

  3. Selezionare tale etichetta e modificarla per leggere lati: modifica del testo Barra del titolo nella finestra Proprietà.

  4. Ridimensionare la casella dell'etichetta in modo che appropriati la dimensione del testo.

  5. Trascinare un controllo di modifica dalla casella degli strumenti a destra dell'etichetta.

  6. Infine, modificare ID del controllo di modifica a IDC_SIDES utilizzando la Finestra Proprietà.

Ciò consente di eseguire il processo di creazione della risorsa della pagina delle proprietà.

Aggiunta di codice per creare e gestire la pagina delle proprietà

Dopo avere creato la risorsa della pagina delle proprietà, è necessario scrivere il codice di implementazione.

Innanzitutto, abilitare la classe CPolyProp per impostare il numero di lati dell'oggetto quando il pulsante Applicare premuto.

Per modificare l'aspetto di applicare funzioni per impostare il numero di lati

  • Sostituire la funzione Apply in PolyProp.h con il codice seguente:

    STDMETHOD(Apply)(void)
    {
       USES_CONVERSION;
       ATLTRACE(_T("CPolyProp::Apply\n"));
       for (UINT i = 0; i < m_nObjects; i++)
       {
          CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);
          short nSides = (short)GetDlgItemInt(IDC_SIDES);
          if FAILED(pPoly->put_Sides(nSides))
          {
             CComPtr<IErrorInfo> pError;
             CComBSTR strError;
             GetErrorInfo(0, &pError);
             pError->GetDescription(&strError);
             MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
             return E_FAIL;
          }
       }
       m_bDirty = FALSE;
       return S_OK;
    }
    

Una pagina delle proprietà può avere più client connesso alla volta, in modo dai cicli di funzione Apply intorno e chiama put_Sides su ciascun client con il valore recuperato dalla casella di modifica. Si utilizza la classe CComQIPtr, che esegue QueryInterface per ogni oggetto per ottenere l'interfaccia IPolyCtl dall'interfaccia IUnknown (archiviata nella matrice m_ppUnk ).

Di codice i controlli ora che l'impostazione della proprietà Sides realtà eseguito. Se non riesce, il codice visualizza una finestra di messaggio che visualizza dettagli di errore dall'interfaccia IErrorInfo. In genere, un contenitore è un oggetto l'interfaccia ISupportErrorInfo e chiama InterfaceSupportsErrorInfo innanzitutto, determinare se l'oggetto supporta le informazioni di errore di selezione. È possibile ignorare questa attività.

CComPtr consente di gestire automaticamente il conteggio dei riferimenti, non occorre chiamare Releaseinterfaccia. CComBSTR consente a BSTR sviluppati, pertanto non è necessario eseguire la chiamata finale SysFreeString. È anche possibile utilizzare una delle classi di conversione di stringhe, pertanto è possibile convertire BSTR se necessario (perché la macro USES_CONVERSION è all'inizio della funzione.

È inoltre necessario impostare il flag modificato della pagina delle proprietà per indicare che il pulsante Applicare deve essere abilitato. Ciò si verifica quando l'utente modifica il valore nella casella di modifica lati.

Per gestire il pulsante di applicare

  1. In Visualizzazione classi, fare clic con il pulsante destro del mouse CPolyProp e fare clic Proprietà il menu di scelta rapida.

  2. Nella Finestra Proprietà, fare clic sull'icona Eventi.

  3. Espandere l'elenco del nodo IDC_SIDES di.

  4. EN_CHANGEselezionare e scegliere dal menu a discesa a destra, scegliere <Add> OnEnChangeSides. La dichiarazione del gestore OnEnChangeSides verrà aggiunto a Polyprop.h e all'implementazione del gestore a Polyprop.cpp.

A questo punto, verrà modificato il gestore.

Per modificare il metodo di OnEnChangeSides

  • Aggiungere il codice seguente in Polyprop.cpp al metodo OnEnChangeSides (che elimina qualsiasi codice che la procedura guidata inserita in):

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides verrà chiamato quando un messaggio WM_COMMAND viene inviato con la notifica EN_CHANGE per il controllo IDC_SIDES. OnEnChangeSides chiama quindi SetDirty e passa TRUE per indicare la pagina delle proprietà viene modificato e il pulsante Applicare deve essere abilitato.

Aggiungendo la pagina delle proprietà del controllo

ATL aggiunge la procedura guidata classe e la procedura guidata della pagina delle proprietà ATL non aggiunge la pagina delle proprietà al controllo automaticamente, poiché è possibile che più controlli nel progetto. Sarà necessario aggiungere una voce al mapping di proprietà del controllo.

Per aggiungere la pagina delle proprietà

  • Aprire PolyCtl.h e aggiungere la riga seguente al mapping di proprietà:

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    

Gli aspetti del mapping di proprietà del controllo sarà la seguente:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
   PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
   PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
   // Example entries
   // PROP_ENTRY("Property Description", dispid, clsid)
   // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

È possibile aggiungere una macro PROP_PAGE con il CLSID della pagina delle proprietà, ma se si utilizza la macro PROP_ENTRY illustrata, il valore della proprietà Sides viene salvato quando il controllo viene salvato.

I tre parametri alla macro sono la descrizione della proprietà, il DISPID della proprietà e il CLSID della pagina delle proprietà con la proprietà. Ciò è utile se, ad esempio, caricare il controllo in Visual Basic e impostare il numero di lati in fase di progettazione. Poiché il numero di lati viene salvato, quando si ricarica il progetto di Visual Basic., il numero di lati verrà ripristinato.

Compilazione e test il controllo

Ora compilare il controllo e inserirlo in ActiveX control Test Container. In Test Container, scegliere dal menu Modifica, scegliere Oggetto classe di PolyCtl. La pagina delle proprietà è visualizzata, fare clic sulla scheda Poligono.

Il pulsante Applicare inizialmente è disabilitato. Iniziare a digitare un valore nella casella lati e il pulsante Applicare risulterà attivato. Dopo avere completato fornire il valore, fare clic sul pulsante Applicare. Le modifiche del controllo e il pulsante Applicare è disabilitata di nuovo. Provare a immettere un valore non valido. Verrà visualizzata una finestra di messaggio contenente la descrizione di errore che non si imposti dalla funzione put_Sides.

Successivamente, si inserirà il controllo in una pagina Web.

Per tornare al passaggio 5 | Nel passaggio 7

Vedere anche

Riferimenti

Esercitazione relativa alla Libreria ATL (Active Template Library)