Udostępnij za pośrednictwem


Formanty ActiveX MFC: Tworzenie podklas sterowania systemu Windows

W tym artykule opisano proces tworzenie podklas wspólnej kontroli systemu Windows do tworzenia formantu ActiveX.Tworzenie podklas istniejących Windows formant jest szybko zaprojektować formant ActiveX.Nowy formant będzie miał możliwości sterowania subclassed systemu Windows, takich jak malowanie i odpowiada na kliknięcia myszą.Formanty MFC ActiveX próbki przycisk jest przykładem tworzenie podklas sterowania systemu Windows.

Do podklasy sterowania systemu Windows należy wykonać następujące zadania:

  • Zastąpić Członkowskich funkcje IsSubclassedControl i PreCreateWindow COleControl

  • Modyfikowanie funkcji składowej OnDraw

  • Obsługiwać komunikaty formantu ActiveX (OCM) do formantu

    [!UWAGA]

    Znaczną część tej pracy jest wykonywana automatycznie przez Kreatora formantów ActiveX po wybraniu formantu do podklasy, za pomocą Wybierz klasy okna nadrzędnego listy rozwijanej na Ustawienia sterowania strony.

Zobacz artykuł Q243454 bazy wiedzy Knowledge Base, aby uzyskać więcej informacji na tworzenie podklas formantu.

Przesłanianie IsSubclassedControl i PreCreateWindow

Aby zastąpić PreCreateWindow i IsSubclassedControl, Dodaj poniższe wiersze kodu protected sekcji deklaracji klasy kontroli:

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    BOOL IsSubclassedControl();

W pliku implementacji sterowania (.CPP), Dodaj poniższe wiersze kodu do wykonania dwóch funkcji przesłonięte:

// CMyAxSubCtrl::PreCreateWindow - Modify parameters for CreateWindowEx

BOOL CMyAxSubCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
    cs.lpszClass = _T("BUTTON");
    return COleControl::PreCreateWindow(cs);
}

// CMyAxSubCtrl::IsSubclassedControl - This is a subclassed control

BOOL CMyAxSubCtrl::IsSubclassedControl()
{
    return TRUE;
}

Ogłoszenia, że w tym przykładzie Windows przycisk formantu jest określona w PreCreateWindow.Jednakże można podklasy standardowych formantów z systemu Windows.Aby uzyskać więcej informacji o standardowych formantów systemu Windows, zobacz kontroli.

Podczas tworzenie podklas sterowania systemu Windows, można określić styl danego okna (WS_) i extended styl okna (WS_EX_) flagi ma być używany przy tworzeniu formantu okna.Można ustawić wartości dla tych parametrów w PreCreateWindow funkcji składowej modyfikując cs.style i cs.dwExStyle struktury pól.Zmiany do tych pól należy wykonać stosując OR operacji, aby zachować flagi domyślne, które są ustawiane przez klasę COleControl.Na przykład, jeśli formant jest tworzenie podklas formant przycisku i formant były wyświetlane jako pole wyboru, wstaw poniższy wiersz kodu do wykonania CSampleCtrl::PreCreateWindow, przed instrukcji return:

cs.style |= BS_CHECKBOX;

Dodaje tę operację BS_CHECKBOX styl flagi, pozostawiając flagę Domyślny styl (WS_CHILD) klasy COleControl nienaruszone.

Modyfikowanie funkcji składowej OnDraw

Jeśli chcesz, aby Twoje subclassed formantu, aby zachować ten sam wygląd jak odpowiedniego formantu Windows OnDraw Członkowskie funkcji kontroli powinna zawierać tylko wywołania DoSuperclassPaint funkcji składowej, jak w poniższym przykładzie:

void CMyAxSubCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
    if (!pdc)
        return;

    DoSuperclassPaint(pdc, rcBounds);
}

DoSuperclassPaint Funkcji składowej, realizowane przez COleControl, używa procedury okna formantu Windows, aby narysować formant w kontekście określonego urządzenia, w obrębie prostokąta obwiedni.Dzięki temu formant widoczne nawet w przypadku, gdy nie jest aktywny.

[!UWAGA]

DoSuperclassPaint Członkowskich funkcji będzie działać tylko z tych typów kontroli, umożliwiające kontekstu urządzenia mają być przekazywane jako wParam z WM_PAINT wiadomości.Dotyczy to niektórych standardowych formantów systemu Windows, takich jak pasek PRZEWIJANIA i przyciskoraz wspólnej kontroli.Dla formantów, które nie obsługują to zachowanie trzeba będzie podać kod poprawnie wyświetlał nieaktywny formant.

Obsługa odzwierciedlenie okna wiadomości

Formanty systemu Windows zazwyczaj wysyłają niektórych komunikatów okna do ich okno nadrzędne.Niektóre z tych wiadomości, takich jak WM_COMMAND, o akcji przez użytkownika.Inne, takie jak WM_CTLCOLOR, są używane do uzyskiwania informacji z okna nadrzędnego.Formant ActiveX zazwyczaj komunikuje się z okna nadrzędnego w inny sposób.Powiadomienia są przekazywane przez wyzwalania zdarzenia (wysyłanie powiadomień o zdarzeniach) i informacji o kontenerze formant uzyskuje się poprzez dostęp do właściwości otoczenia kontenera.Ponieważ istnieje tych technik komunikacyjnych, pojemniki formant ActiveX nie oczekuje się przetwarzać żadnych komunikatów okien wysyłanych przez formant.

Aby uniemożliwić odbieranie wiadomości okno wysłane przez formant Windows subclassed pojemnika COleControl tworzy dodatkowe okno, aby służyć jako formantu nadrzędnego.To dodatkowe okno nazywane "odblaskowe", jest tworzony tylko dla formantu ActiveX, że podklasy systemu Windows, kontroli i ma taki sam rozmiar i położenie okna formantu.Okno odblaskowego przechwytuje niektóre okna wiadomości i wysyła je do kontroli.Formant, w jego procedury okna następnie przetwarza te wiadomości odbitego poprzez podjęcie działania właściwe dla formantu ActiveX (na przykład wyzwalania zdarzenia).Zobacz Odzwierciedlenie identyfikatorów komunikatów okna dla listy windows przechwycone wiadomości i odpowiednie odzwierciedlenie wiadomości.

Kontenera formantu ActiveX może być przeznaczone do wykonywania odbicia wiadomości, eliminując potrzebę COleControl Tworzenie okna reflektor i skracanie czasu uruchomienia obciążenie w przypadku subclassed sterowania systemu Windows.COleControlwykrywa, czy kontener obsługuje tę funkcję, sprawdzając właściwości otoczenia o wartości MessageReflect TRUE.

Do obsługi wiadomości odbitego okna, dodać wpis do mapy komunikat sterujący i zaimplementować funkcję obsługi.Ponieważ odbitego wiadomości nie są częścią standardowego zestawu komunikatów zdefiniowanych w systemie Windows, widok klasa nie obsługuje dodawania takie programy obsługi wiadomości.Jednakże nie jest trudne do ręcznego dodania programu obsługi.

Aby dodać obsługi wiadomości dla wiadomości okno odbitego ręcznie wykonaj następujące czynności:

  • W klasie kontroli.Plik h zadeklarować funkcji obsługi.Funkcja powinny mieć typ zwracany LRESULT i dwa parametry typu WPARAM i LPARAM, odpowiednio.Na przykład:

    class CMyAxSubCtrl : public COleControl
    {
    
    
    ...
    
    
    protected:
        LRESULT OnOcmCommand(WPARAM wParam, LPARAM lParam);
    };
    
  • W klasie kontroli.CPP plików, dodawanie ON_MESSAGE wpisu mapy wiadomości.Parametry tego wpisu powinny być identyfikator wiadomości i nazwę funkcji obsługi.Na przykład:

    BEGIN_MESSAGE_MAP(CMyAxSubCtrl, COleControl)
        ON_MESSAGE(OCM_COMMAND, &CMyAxSubCtrl::OnOcmCommand)
    END_MESSAGE_MAP()
    
  • Również w.Plik CPP zaimplementować OnOcmCommand Członkowskie funkcji do przetwarzania wiadomości odbity.WParam i lParam parametry są takie same jak oryginalny komunikat okna.

Na przykład odzwierciedlenie wiadomości są przetwarzane, odnoszą się do próbki formantów MFC ActiveX przycisk.Pokazuje on OnOcmCommand obsługi wykrywa BN_CLICKED kod powiadomienia i zdarzenie Click odpowiada poprzez wypalanie (wysyłanie).

Zobacz też

Koncepcje

Formanty ActiveX MFC