Passaggio 6: Aggiunta una pagina delle proprietà

Pagine delle proprietà vengono implementate come oggetti COM separati, che permettono le pagine delle proprietà in comune se necessario. Per aggiungere una pagina delle proprietà al controllo, è possibile utilizzare la creazione guidata oggetto.

Avviare la creazione guidata oggetto e selezionare i controlli come la categoria sul lato sinistro. Selezionare la Pagina delle proprietà sulla destra, quindi fare clic su Next.

È possibile ottenere nuovamente la finestra di dialogo consente di immettere il nome del nuovo oggetto. Chiamare l'oggetto PolyProp e inserire tale nome nella casella di modifica Nome breve.

Si noti che la casella di modifica interfaccia viene visualizzato in grigio. Questo è perché una pagina delle proprietà non ha bisogno di un'interfaccia personalizzata.

F&are clic sulla scheda stringhe per impostare il titolo della pagina delle proprietà. Il titolo della pagina delle proprietà è la stringa visualizzata nella scheda per quella pagina. Digitare amp;Poligono come il titolo. La Doc String è una descrizione che una cornice di proprietà viene utilizzato per inserire in una punta di linea o strumento di stato. Si noti che la cornice di proprietà standard attualmente non fa uso di questa stringa, ma è possibile impostare comunque. Non hai intenzione di generare un file della guida al momento, quindi cancellare la voce in tale casella di testo. Fare clic su OK e la proprietà verrà creato l'oggetto page.

Vengono creati i file seguenti tre:

File Descrizione
Polyprop. H Contiene la classe C++ CPolyProp , che implementa la pagina delle proprietà.
PolyProp Include il file Polyprop. H.
PolyProp.rgs Lo script del Registro di sistema che registra l'oggetto della pagina Proprietà.

Inoltre sono fatti le seguenti modifiche del codice:

Ora aggiungere i campi che si desidera venga visualizzato nella pagina delle proprietà. Si noti che in Polygon.rc la finestra di dialogo è vuota, ad eccezione di un'etichetta che ti dice di inserire qui i vostri controlli. Eliminare quell'etichetta e aggiungere uno contenente il testo "i lati:". Accanto all'etichetta di aggiungere una casella di modifica e dargli un ID diIDC_SIDES.

Includere Polygon.h nella parte superiore del file Polyprop. H:

# i&nclude "Polygon.h"nbsp; / / definizione di IPolyCtl

Ora abilitare il CPolyProp classe per impostare il numero di lati nell'oggetto quando viene premuto il pulsante applica . Modifica la Apply funzionare in Polyprop. H come segue.

STDMETHOD(Apply)(void)
{
   USES_CONVERSION;
   ATLTrace(_T("CPolyProp::Apply\n"));
   per (UINT io = 0; ho lt; m_nObjects; i + +)
   {
      CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
      breve nSides = (short)GetDlgItemInt(IDC_SIDES);
      Se non è riuscita (pPoly - > put_Sides(nSides))
      {
         PError CComPtr <IErrorInfo>;
         CComBSTR strError;
         GetErrorInfo (0 & pError);
         pError - > GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         restituire E_FAIL;
      }
   }
   m_bDirty = FALSE;
   restituisce S_OK;
}

Una pagina delle proprietà potrebbe avere più di un client collegato ad esso in un momento, così il Apply funzione loop intorno e chiama put_Sides su ciascun client con il valore Estratto da casella di modifica. Si utilizza la classe CComQIPtr , che esegue QueryInterface su ogni oggetto per ottenere il IPolyCtl interfaccia IUnknown (archiviati nella m_ppUnk matrice).

Il codice Controlla adesso che l'impostazione della proprietà di lati effettivamente lavorata. Se non riesce, il codice visualizza una finestra di messaggio visualizzazione Dettagli errore dall'interfaccia IErrorInfo . In genere, un contenitore chiede un oggetto per l'interfaccia ISupportErrorInfo e chiama InterfaceSupportsErrorInfo in primo luogo, per determinare se l'oggetto supporta informazioni sull'errore di impostazione. Ma dato che è il controllo, si può rinunciare a tale controllo.

CComPtr ti aiuta a gestendo automaticamente il riferimento contando, quindi non è necessario chiamare Release sull'interfaccia. CComBSTR ti aiuta con elaborazione BSTR , così non devi effettuare l'ultima chiamata SysFreeString . Anche utilizzare una delle varie classi di conversione stringa, così è possibile convertire BSTR se necessario (questo è il motivo per cui abbiamo aggiungere la macro USES_CONVERSION all'inizio della funzione).

È inoltre necessario impostare flag sporco della pagina delle proprietà per indicare che deve essere attivato il pulsante applica . Ciò si verifica quando l'utente modifica il valore nella casella di modifica i lati. Fare clic destro la classe della pagina Proprietà (CPolyProp) in ClassView e quindi scegliere Aggiungi Windows gestore messaggi... dal menu.nbsp scelta rapida; Selezionare IDC_SIDES dalla casella oggetto e quindi aggiungere il messaggio E&N_CHANGE.

Ora aggiungere il codice seguente in Polyprop. h per la OnChangeSides funzione (eliminazione di qualsiasi codice che la procedura guidata messo lì):

 LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   return 0;
}

OnChangeSidesverrà chiamato quando viene inviato un messaggio WM_COMMAND con la notifica EN_CHANGE per il IDC_SIDES control. OnChangeSides quindi chiama SetDirty e passa TRUE per indicare la pagina delle proprietà ora è sporca e deve essere attivato il pulsante applica.

Ora, aggiungere la pagina delle proprietà per il controllo. La creazione guidata oggetto non fare questo per voi automaticamente, dal momento che ci potesse essere più controlli al vostro progetto. Aprire PolyCtl. H e aggiungere questa riga alla mappa delle proprietà:

   PROP_ENTRY ("lati", 1, CLSID_PolyProp)

Mappa delle proprietà del controllo ora assomiglia a questo:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   PROP_ENTRY ("lati", 1, CLSID_PolyProp)
   / / Esempi di voci
   / / PROP_ENTRY ("proprietà Description", dispid, clsid)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Potrebbe aver aggiunto un PROP_PAGE macro con CLSID della tua pagina di proprietà, ma se si utilizza il PROP_ENTRY macro come mostrato, i lati il valore della proprietà viene salvato anche 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à che ha la proprietà su di esso. Ciò risulta utile se, ad esempio, caricare il controllo in Visual Basic e impostare il numero di lati in fase di progettazione. Dal momento che il numero di lati viene salvato, quando ricaricare il vostro progetto di Visual Basic, che verrà ripristinato il numero di lati.

Ora costruire tale controllo e inserirlo in ActiveX Control Test Container. In Test Container, dal menu Modifica scegliere Oggetto della classe PolyCtl. Viene visualizzata la pagina delle proprietà; ha scelto la scheda poligono.

Il pulsante applica inizialmente è disattivato. Casella di modifica comincia a digitare un valore ai lati e sarà diventato abilitato il pulsante Applica. Dopo aver finito inserendo il valore, fare clic sul pulsante applica . I cambiamenti di visualizzazione del controllo e il pulsante applica nuovamente è disattivato. Provare a immettere un valore non valido e si dovrebbe vedere una finestra di messaggio che contiene la descrizione dell'errore che hai impostato dalla put_Sides funzione.

Poi mettete il controllo in una pagina Web.

Torna a passo 5 |nbsp; Al passaggio 7

Index