Metodi IPaperSink
COPaper espone l'interfaccia IConnectionPointContainer in modo che i client possano connettersi a COPaper per ricevere notifiche di eventi specificati che si verificano in COPaper. Esponendo questa interfaccia, COPaper diventa un oggetto connettibile. Un client può chiamare QueryInterface per questa interfaccia e usarlo per ottenere i punti di connessione dell'oggetto. La partecipazione dei clienti a questo schema è trattata nell'esempio StoClien associato.
In pratica, il client implementa ciò che viene chiamato sink sotto forma di oggetto sink con un'interfaccia sink. L'interfaccia sink riceve chiamate di notifica degli eventi in uscita da COPaper dopo che il sink è connesso correttamente dal client a un'istanza COPaper. Il client effettua la connessione usando un oggetto punto di connessione gestito da COPaper. In un singolo oggetto COM collegabile possono essere presenti numerosi punti di connessione. Nell'esempio StoServe , COPaper ha un solo punto di connessione, che gestisce gli eventi della carta di disegno.
Qualsiasi numero di client può connettersi a un singolo punto di connessione. Il punto di connessione CONNPOINT_PAPERSINK in COPaper gestisce un gruppo di connessioni che possono crescere dinamicamente in fase di esecuzione. I dettagli completi sul supporto degli oggetti connettibili di COPaper sono codificati nei file CONNECT. H e CONNECT. Il CPP e non verrà trattato qui. La costruzione è molto simile a quella studiata nell'esempio di codice CONSERVE.
Il client StoClien implementa gli oggetti sink appropriati per i punti di connessione che prevede di trovare in COPaper. Dal contesto di COPaper, l'oggetto sink importante implementato da StoClien espone l'interfaccia IPaperSink . Si tratta dell'interfaccia in uscita usata da COPaper per notificare a StoClien diversi eventi in COPaper.
Ecco un riepilogo dei metodi in IPaperSink da IPAPER. H nella directory di pari livello \INC.
Metodo | Descrizione |
---|---|
Bloccato | Un cliente ha preso il controllo e ha bloccato la carta. |
Sbloccato | Un cliente ha rinunciato al controllo della carta. |
Loaded | Un client ha caricato il contenuto della carta dal proprio file composto. |
Salvato | Un client ha salvato il contenuto della carta nel proprio file composto. |
InkStart | Un client ha avviato una sequenza di disegno a penna a colori sulla carta. |
InkDraw | Un client inserisce punti dati input penna sulla superficie della carta. |
InkStop | Un cliente ha interrotto la sequenza di disegno dell'inchiostro sulla carta. |
Cancellato | Un cliente ha cancellato tutti i dati dell'input penna dal foglio. |
Ridimensionato | Un client ha ridimensionato la carta. |
Questi metodi sono in gran parte autoesplicativi. Anche se il sink deve implementare tutti questi metodi in qualche modo, molti vengono implementati come stub e non vengono usati negli esempi StoServe/StoClien .
Un metodo importante usato in questi esempi è il metodo Loaded. Quando COPaper viene indicato dal client per caricare un nuovo disegno dal file, è necessario un modo per notificare al client quando vengono caricati i nuovi dati. A tale scopo, COPaper chiama IPaperSink::Loaded nel sink client. Il client può quindi chiamare IPaper::Redraw per richiedere che COPaper riprova i nuovi dati al client. Il disegno caricato nella visualizzazione del client viene ridisegnato. Al termine del caricamento, il disegno appena caricato viene visualizzato automaticamente nella finestra fornita dal client.
Per informazioni complete sulla connettività del metodo IPaper a IPaperSink, vedere IPaper::Redraw.
I metodi IPaperSinkInkStart, InkDraw e InkStop vengono usati per inviare al client singoli pacchetti di dati input penna. Alla ricezione, il cliente li disegna nel suo display nello stesso modo in cui originariamente li ha inviati a COPaper. La logica precedente è sufficientemente generale da consentire a più client che sono tutti in ascolto sullo stesso punto di connessione CONNPOINT_PAPERSINK. Se un'istanza COPaper comune è stata condivisa da questi client, è possibile che tutti visualizzino lo stesso disegno connettendosi a questo punto di connessione.