Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obiekty, które obsługują właściwości, na przykład za pomocą automatyzacji OLE i interfejsu IDispatch, mogą chcieć zezwolić klientom na powiadamianie, gdy niektóre właściwości zmieniają wartość. Taka właściwość jest nazywana właściwością powiązaną, ponieważ powiadomienia umożliwiają klientowi synchronizowanie własnego wyświetlania bieżących wartości właściwości obiektu. Ponadto te same obiekty mogą chcieć zezwolić klientowi na kontrolowanie, kiedy niektóre właściwości mogą ulec zmianie. Takie właściwości są nazywane właściwościami edycji żądania.
IPropertyNotifySink to standardowy interfejs powiadomień obsługujący właściwości możliwe do powiązania i edycji żądań. IPropertyNotifySink jest obsługiwany przez obiekt z właściwościami jako interfejs wyjściowy. Oznacza to, że sam interfejs jest implementowany przez obiekt ujścia klienta, a klient łączy ujście z obiektem pomocniczym za pośrednictwem opisanego wcześniej mechanizmu punktu połączenia. IPropertyNotifySinkjest zdefiniowany w następujący sposób:
interface IPropertyNotifySink : IUnknown
{
HRESULT OnChanged([in] DISPID dispID);
HRESULT OnRequestEdit([in] DISPID dispID);
}
Gdy obiekt chce powiadomić połączone ujścia o zmianie właściwości możliwej do powiązania zidentyfikowanej z danym identyfikatorem DISPID, wywołuje OnChanged. Jeśli obiekt zmienia wiele właściwości jednocześnie, może przekazać DISPID_UNKNOWN do OnChanged, w tym przypadku klient odświeża swoją pamięć podręczną wszystkich interesujących go wartości właściwości.
Gdy właściwość edycji żądania ma ulec zmianie, obiekt może zapytać klienta, czy pozwoli to na zmianę. Obiekt wywołuje OnRequestEdit, przekazując identyfikator DISPID dotyczący danej właściwości (lub DISPID_UNKNOWN w celu zidentyfikowania wszystkich właściwości). Interfejs klienta zwraca S_OK, aby wskazać, że zmiana jest dozwolona, lub S_FALSE (lub błąd), aby wskazać, że zmiana nie jest dozwolona. Gdy obiekt wywołuje OnRequestEdit, należy przestrzegać życzeń klienta przez przestrzeganie dokładnych zasad semantyki wartości zwróconych S_OK i S_FALSE.
Należy pamiętać, że OnRequestEdit nie można użyć do weryfikacji danych, ponieważ w momencie wywołania nowa wartość właściwości nie jest jeszcze dostępna. Powiadomienie może służyć tylko do kontrolowania stanu tylko do odczytu dla właściwości.
Obiekty kontrolują, które właściwości można powiązać, i żądają edycji i oznaczania takich właściwości w informacjach o typie obiektu. W informacjach o typie, atrybut wiązalny oznacza, że właściwość obsługuje OnChanged. Atrybut requestedit oznacza właściwość jako obsługującą OnRequestEdit.
Jedna właściwość może obsługiwać oba zachowania, w którym to przypadku OnRequestEdit jest wywoływana jako pierwsza, a OnChanged jest wywoływana tylko wtedy, gdy zmiana jest dozwolona.
Jednym wyjątkiem od zachowania takich właściwości jest to, że żadne powiadomienia nie są wysyłane w wyniku inicjowania obiektu lub procedur ładowania. W takich momentach zakłada się, że wszystkie właściwości zmieniają się i że wszystkie muszą być dozwolone do zmiany. Powiadomienia do tego interfejsu są zatem istotne tylko w kontekście w pełni zainicjowanego/załadowanego obiektu.
Dwa inne atrybuty można zastosować do właściwości w informacjach o typie obiektu. Atrybut defaultbind oznacza powiązaną właściwość jako taką, która najlepiej reprezentuje stan obiektu jako całości. Atrybut displaybind oznacza właściwość wiązalną, która jest odpowiednia do wyświetlania w interfejsie użytkownika klienta.
Tematy pokrewne