Reprezentacja wizualna
Kontrolka obsługuje pozycjonowanie i wyświetlanie się w kontenerze za pomocą technologii dokumentów złożonych oraz technologii przeciągania i upuszczania OLE, która obejmuje zarówno kontrolkę, jak i jego kontener. Kontrolka musi być w stanie rysować się, gdy kontener zarządza pozycją kontrolki i jej rozmiarem.
Kontrolki dodają do podstawowych funkcji udostępnianych przez dokumenty OLE. Kontrolka wywołuje IOleClientSite::RequestNewObjectLayout metodę , aby poinformować kontener, że chce zmienić jego rozmiar. Klient wywołuje kontrolki IOleObject::GetExtent, aby uzyskać nowy rozmiar i wywołania IOleInPlaceObject::SetObjectRects, aby ustawić kontrolkę na nowy rozmiar.
Kontrolki obsługujące tylko IPersistStream lub IPersistStreamInit nie obsługują buforowania za pośrednictwem IOleCache2, ponieważ pamięć podręczna wymaga obsługi IPersistStorage. Jednak te kontrolki powinny zapewnić klientowi sposób renderowania kontrolki za pomocą IDataObject::GetData, aby klient mógł opcjonalnie utworzyć własną pamięć podręczną danych prezentacji dla kontrolki i zarządzać nią.
Kontrolki używają typu HIMETRIC dla współrzędnych. Jednak różne kontenery mogą używać różnych systemów współrzędnych. Kontener chce odbierać współrzędne we własnym systemie, ale kontrolka nie musi wiedzieć, jakich współrzędnych używa kontener. Aby pomyślnie komunikować się, kontrolka wymaga sposobu konwertowania wartości na współrzędne kontenera. Kontener udostępnia obiekt lokacji za pomocą metody IOleControlSite::TransformCoords. Kontrolka wywołuje tę metodę w lokacji klienta kontenera najpierw, aby przekonwertować współrzędne na odpowiednie współrzędne dla kontenera. Następnie może przekazać przekonwertowane współrzędne do kontenera.
Kontrolki mogą wywoływać IOleControlSite::LockInPlaceActive w obiekcie lokacji kontenera, aby uniemożliwić kontenerowi obniżenie poziomu kontrolki poza stan aktywny w miejscu. Obniżenie poziomu kontrolki w ten sposób powoduje dezaktywację kontrolki i jej okno zostało zniszczone, więc jeśli kontrolka musi zachować okno przez znany czas trwania, może wywołać LockInPlaceActive w celu zagwarantowania jego stanu.
Tematy pokrewne