Kontrolki ActiveX MFCMFC ActiveX Controls

Kontrolka ActiveX to składnik oprogramowania wielokrotnego użytku oparty na Component Object Model (COM), który obsługuje szeroką gamę funkcji OLE i można go dostosować do potrzeb wielu programów.An ActiveX control is a reusable software component based on the Component Object Model (COM) that supports a wide variety of OLE functionality and can be customized to fit many software needs.

Ważne

Kontrolka ActiveX to Starsza technologia, która nie powinna być używana do nowych celów programistycznych.ActiveX is a legacy technology that should not be used for new development. Aby uzyskać więcej informacji, zobacz kontrolki ActiveX.For more information, see ActiveX Controls.

Formanty ActiveX są przeznaczone do użycia zarówno w zwykłych kontenerach formantów ActiveX, jak i w Internecie, w World Wide Web stronach.ActiveX controls are designed for use both in ordinary ActiveX control containers and on the Internet, in World Wide Web pages. Kontrolki ActiveX można utworzyć przy użyciu MFC, opisanego tutaj lub z Active Template Library (ATL).You can create ActiveX controls either with MFC, described here, or with the Active Template Library (ATL).

Formant ActiveX może być rysowany w osobnym oknie, odpowiadać na zdarzenia (takie jak kliknięcia myszą) i być zarządzany przez interfejs, który zawiera właściwości i metody podobne do tych w obiektach automatyzacji.An ActiveX control can draw itself in its own window, respond to events (such as mouse clicks), and be managed through an interface that includes properties and methods similar to those in Automation objects.

Te kontrolki można opracować dla wielu celów, takich jak dostęp do bazy danych, monitorowanie danych lub tworzenie wykresów.These controls can be developed for many uses, such as database access, data monitoring, or graphing. Oprócz ich przenośności kontrolki ActiveX nie obsługują funkcji, które wcześniej nie były dostępne dla formantów ActiveX, takich jak zgodność z istniejącymi kontenerami OLE i możliwość integrowania ich menu z menu kontenera OLE.Besides their portability, ActiveX controls support features previously not available to ActiveX controls, such as compatibility with existing OLE containers and the ability to integrate their menus with the OLE container menus. Ponadto Kontrolka ActiveX w pełni obsługuje automatyzację, która umożliwia formantowi uwidocznienie właściwości read\write oraz zestawu metod, które mogą być wywoływane przez użytkownika formantu.In addition, an ActiveX control fully supports Automation, which allows the control to expose read\write properties and a set of methods that can be called by the control user.

Można tworzyć bezokienkowe kontrolki ActiveX i kontrolki, które tworzą okno tylko wtedy, gdy stają się aktywne.You can create windowless ActiveX controls and controls that only create a window when they become active. Kontrolki bez okien przyspieszają wyświetlanie aplikacji i umożliwiają przezroczyste i nieprostokątne kontrolki.Windowless controls speed up the display of your application and make it possible to have transparent and nonrectangular controls. Możesz również ładować właściwości kontrolki ActiveX asynchronicznie.You can also load ActiveX control properties asynchronously.

Kontrolka ActiveX jest implementowana jako serwer wewnątrzprocesowe (zazwyczaj niewielki obiekt), którego można użyć w dowolnym kontenerze OLE.An ActiveX control is implemented as an in-process server (typically a small object) that can be used in any OLE container. Należy zauważyć, że pełna funkcja kontrolki ActiveX jest dostępna tylko wtedy, gdy jest używana w kontenerze OLE zaprojektowanym tak, aby wiedzieć o kontrolkach ActiveX.Note that the full functionality of an ActiveX control is available only when used within an OLE container designed to be aware of ActiveX controls. Zobacz kontrolki ActiveX portów do innych aplikacji , aby uzyskać listę kontenerów, które obsługują kontrolki ActiveX.See Port ActiveX Controls to Other Applications for a list of containers that support ActiveX controls. Ten typ kontenera, zwany dalej "kontenerem sterowania", może obsługiwać kontrolkę ActiveX przy użyciu właściwości i metod kontrolki, a następnie odbiera powiadomienia z kontrolki ActiveX w formie zdarzeń.This container type, hereafter called a "control container," can operate an ActiveX control by using the control's properties and methods, and receives notifications from the ActiveX control in the form of events. Na poniższej ilustracji przedstawiono tę interakcję.The following figure demonstrates this interaction.

Współpraca kontrolki ActiveX i konteneraInterplay of ActiveX control container and control
Interakcja między kontenerem kontrolki ActiveX i kontrolką okienkową ActiveXInteraction Between an ActiveX Control Container and a Windowed ActiveX Control

Aby uzyskać najnowsze informacje na temat optymalizowania kontrolek ActiveX, zobacz kontrolki ActiveX MFC: Optymalizacja.For some recent information on optimizing your ActiveX controls, see MFC ActiveX Controls: Optimization.

Aby utworzyć kontrolkę ActiveX MFC, zobacz Tworzenie projektu kontrolki ActiveX.To create an MFC ActiveX control, see Create an ActiveX control project.

Aby uzyskać więcej informacji, zobacz:For more information, see:

Podstawowe składniki kontrolki ActiveXBasic Components of an ActiveX Control

Kontrolka ActiveX używa kilku elementów programistycznych do wydajnej współpracy z kontenerem sterowania i użytkownikiem.An ActiveX control uses several programmatic elements to interact efficiently with a control container and with the user. Są to klasy COleControl, zestaw funkcji uruchamiania zdarzeń oraz mapa wysyłania.These are class COleControl, a set of event-firing functions, and a dispatch map.

Każdy obiekt formantu ActiveX, który tworzysz, dziedziczy zaawansowany zestaw funkcji z klasy podstawowej MFC COleControl .Every ActiveX control object you develop inherits a powerful set of features from its MFC base class, COleControl. Te funkcje obejmują aktywację w miejscu i logikę automatyzacji.These features include in-place activation, and Automation logic. COleControl może dostarczyć obiekt sterowania z tą samą funkcjonalnością co obiekt okna MFC oraz możliwość uruchamiania zdarzeń.COleControl can provide the control object with the same functionality as an MFC window object, plus the ability to fire events. COleControl może również udostępniać bezokienkowe kontrolki, które są zależne od ich kontenera, aby uzyskać pomoc dotyczącą niektórych funkcji dostępnych w oknie (przechwytywanie myszy, fokus klawiatury, przewijanie), ale oferują znacznie szybsze wyświetlanie.COleControl can also provide windowless controls, which rely on their container for help with some of the functionality a window provides (mouse capture, keyboard focus, scrolling), but offer much faster display.

Ponieważ Klasa formantów pochodzi z COleControl , dziedziczy możliwość wysyłania komunikatów (nazywanych zdarzeniami) do kontenera kontroli po spełnieniu określonych warunków.Because the control class derives from COleControl, it inherits the capability to send, or "fire," messages, called events, to the control container when certain conditions are met. Te zdarzenia są używane do powiadamiania kontenera kontroli, gdy jakaś istotna występuje w formancie.These events are used to notify the control container when something important happens in the control. Można wysłać dodatkowe informacje o zdarzeniu do kontenera kontroli przez dołączenie parametrów do zdarzenia.You can send additional information about an event to the control container by attaching parameters to the event. Aby uzyskać więcej informacji na temat zdarzeń kontrolki ActiveX, zobacz artykuł kontrolki ActiveX MFC: zdarzenia.For more information about ActiveX control events, see the article MFC ActiveX Controls: Events.

Końcowy element to mapa wysyłania, która jest używana do ujawnienia zestawu funkcji (nazywanych metodami) i atrybutów (nazywanych właściwościami) użytkownikowi kontrolki.The final element is a dispatch map, which is used to expose a set of functions (called methods) and attributes (called properties) to the control user. Właściwości umożliwiają kontenerowi sterowania lub użytkownikowi kontrolce manipulowanie kontrolką na różne sposoby.Properties allow the control container or the control user to manipulate the control in various ways. Użytkownik może zmienić wygląd kontrolki, zmienić niektóre wartości kontrolki lub wykonać żądania kontrolki, takie jak dostęp do określonego fragmentu danych obsługiwanego przez formant.The user can change the appearance of the control, change certain values of the control, or make requests of the control, such as accessing a specific piece of data that the control maintains. Ten interfejs jest określany przez dewelopera kontroli i jest definiowany przy użyciu Widok klasy.This interface is determined by the control developer and is defined using Class View. Aby uzyskać więcej informacji na temat metod i właściwości kontrolki ActiveX, zobacz artykuły formanty ActiveX MFC: metody i Właściwości.For more information on ActiveX control methods and properties, see the articles MFC ActiveX Controls: Methods and Properties.

Interakcja między kontrolkami przy użyciu kontenerów formantów systemu Windows i ActiveXInteraction Between Controls with Windows and ActiveX Control Containers

Gdy kontrolka jest używana w kontenerze sterowania, używa dwóch mechanizmów do komunikowania: ujawnia właściwości i metody oraz wyzwala zdarzenia.When a control is used within a control container, it uses two mechanisms to communicate: it exposes properties and methods, and it fires events. Na poniższej ilustracji pokazano, jak te dwa mechanizmy są implementowane.The following figure demonstrates how these two mechanisms are implemented.

Kontrolka ActiveX komunikuje się z jej konteneremActiveX control communicates with its container
Komunikacja między kontenerem kontrolki ActiveX i kontrolką ActiveXCommunication Between an ActiveX Control Container and an ActiveX Control

Na powyższym rysunku pokazano również, jak inne interfejsy OLE (oprócz automatyzacji i zdarzeń) są obsługiwane przez formanty.The previous figure also illustrates how other OLE interfaces (besides automation and events) are handled by controls.

Cała komunikacja formantu z kontenerem jest wykonywana przez COleControl .All of a control's communication with the container is performed by COleControl. Aby obsłużyć niektóre żądania kontenera, COleControl program wywoła funkcje członkowskie, które są zaimplementowane w klasie kontrolki.To handle some of the container's requests, COleControl will call member functions that are implemented in the control class. Wszystkie metody i niektóre właściwości są obsługiwane w ten sposób.All methods and some properties are handled in this way. Klasa kontrolki może również inicjować komunikację z kontenerem przez wywoływanie funkcji składowych COleControl .Your control's class can also initiate communication with the container by calling member functions of COleControl. Zdarzenia są generowane w ten sposób.Events are fired in this manner.

Aktywne i nieaktywne Stany kontrolki ActiveXActive and Inactive States of an ActiveX Control

Kontrolka ma dwa stany podstawowe: aktywne i nieaktywne.A control has two basic states: active and inactive. Tradycyjnie te Stany były rozróżniane, niezależnie od tego, czy formant miał okno.Traditionally, these states were distinguished by whether the control had a window. Aktywna kontrolka miała okno; nieaktywna kontrolka.An active control had a window; an inactive control did not. W przypadku wprowadzenia aktywacji bezokienkowej tego rozróżnienia nie jest już uniwersalne, ale nadal dotyczy wielu kontrolek.With the introduction of windowless activation, this distinction is no longer universal, but still applies to many controls.

Gdy sterowanie bezokienkowe jest aktywne, wywołuje funkcję przechwytywania myszy, fokus klawiatury, przewijanie i inne usługi okna z jego kontenera.When a windowless control goes active, it invokes mouse capture, keyboard focus, scrolling, and other window services from its container. Możesz również zapewnić interakcję myszy z nieaktywnymi kontrolkami, a także tworzyć kontrolki, które oczekują na utworzenie okna.You can also provide mouse interaction to inactive controls, as well as create controls that wait until activated to create a window.

Gdy kontrolka z oknem stanie się aktywna, można w pełni korzystać z kontenera kontroli, użytkownika i systemu Windows.When a control with a window becomes active, it is able to interact fully with the control container, the user, and Windows. Na poniższym rysunku przedstawiono ścieżki komunikacji między kontrolką ActiveX, kontenerem sterowania i systemem operacyjnym.The figure below demonstrates the paths of communication between the ActiveX control, the control container, and the operating system.

Przetwarzanie komunikatów w aktywnym oknie kontrolki ActiveXMsg processing in active windowed ActiveX control
Przetwarzanie komunikatów systemu Windows w oknie kontrolki ActiveX (gdy jest aktywny)Windows Message Processing in a Windowed ActiveX Control (When Active)

SerializacjiSerialization

Możliwość serializowania danych, czasami określana jako trwałość, umożliwia kontrolce zapisanie wartości właściwości do magazynu trwałego.The ability to serialize data, sometimes referred to as persistence, allows the control to write the value of its properties to persistent storage. Kontrolki można następnie odtworzyć przez odczytanie stanu obiektu z magazynu.Controls can then be recreated by reading the object's state from the storage.

Należy zauważyć, że formant nie jest odpowiedzialny za uzyskanie dostępu do nośnika magazynu.Note that a control is not responsible for obtaining access to the storage medium. Zamiast tego kontener kontrolki jest odpowiedzialny za zapewnienie kontroli z nośnikiem magazynującym do użycia w odpowiednim czasie.Instead, the control's container is responsible for providing the control with a storage medium to use at the appropriate times. Aby uzyskać więcej informacji na temat serializacji, zobacz artykuł MFC ActiveX formantów: serializacji.For more information on serialization, see the article MFC ActiveX Controls: Serializing. Aby uzyskać informacje na temat optymalizowania serializacji, zobacz Optymalizacja trwałości i inicjalizacji w kontrolkach ActiveX: Optymalizacja.For information on optimizing serialization, see Optimizing Persistence and Initialization in ActiveX Controls: Optimization.

Instalowanie klas i narzędzi formantów ActiveXInstalling ActiveX Control Classes and Tools

Podczas instalowania Visual C++ klasy kontrolek ActiveX MFC i sieci sprzedaży i debugowania formantów ActiveX czasu wykonywania są instalowane automatycznie, jeśli kontrolki ActiveX są wybrane w instalatorze (domyślnie są wybrane).When you install Visual C++, the MFC ActiveX control classes and retail and debug ActiveX control run-time DLLs are automatically installed if ActiveX controls are selected in Setup (they are selected by default).

Domyślnie klasy formantów ActiveX i narzędzia są instalowane w następujących podkatalogach w folderze \Program Files\Microsoft Visual Studio .NET:By default, the ActiveX control classes and tools are installed in the following subdirectories under \Program Files\Microsoft Visual Studio .NET:

  • \Common7\Tools\Common7\Tools

    Zawiera pliki kontenera testowego (TstCon32.exe, a także jego pliki pomocy).Contains the Test Container files (TstCon32.exe, as well as its Help files).

  • \Vc7\atlmfc\include\Vc7\atlmfc\include

    Zawiera pliki dołączane, które są konieczne do opracowania formantów ActiveX z MFCContains the include files needed to develop ActiveX controls with MFC

  • \Vc7\atlmfc\src\mfc\Vc7\atlmfc\src\mfc

    Zawiera kod źródłowy dla określonych klas formantów ActiveX w MFCContains the source code for specific ActiveX control classes in MFC

  • \Vc7\atlmfc\lib\Vc7\atlmfc\lib

    Zawiera biblioteki wymagane do opracowania formantów ActiveX z MFCContains the libraries required to develop ActiveX controls with MFC

Istnieją także przykłady dla kontrolek ActiveX MFC.There are also samples for MFC ActiveX controls. Aby uzyskać więcej informacji na temat tych przykładów, zobacz Control Samples: MFC-Based ActiveX ControlsFor more information about these samples, see Controls Samples: MFC-Based ActiveX Controls

Zobacz teżSee also

Elementy interfejsu użytkownikaUser Interface Elements